ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
March 2010
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
19 participants
896 discussions
Start a n
N
ew thread
[cwittich] 45937: [SHDOCLC] reduce diff to wine
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 14:32:24 2010 New Revision: 45937 URL:
http://svn.reactos.org/svn/reactos?rev=45937&view=rev
Log: [SHDOCLC] reduce diff to wine Modified: trunk/reactos/dll/win32/shdoclc/De.rc trunk/reactos/dll/win32/shdoclc/Fr.rc trunk/reactos/dll/win32/shdoclc/Lt.rc trunk/reactos/dll/win32/shdoclc/Si.rc trunk/reactos/dll/win32/shdoclc/rsrc.rc Modified: trunk/reactos/dll/win32/shdoclc/De.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shdoclc/De.rc?re…
============================================================================== --- trunk/reactos/dll/win32/shdoclc/De.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shdoclc/De.rc [iso-8859-1] Sat Mar 6 14:32:24 2010 @@ -250,4 +250,3 @@ MENUITEM "Scrolle rechts", IDM_SCROLL_RIGHT } } -#pragma code_page(default) Modified: trunk/reactos/dll/win32/shdoclc/Fr.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shdoclc/Fr.rc?re…
============================================================================== --- trunk/reactos/dll/win32/shdoclc/Fr.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shdoclc/Fr.rc [iso-8859-1] Sat Mar 6 14:32:24 2010 @@ -252,4 +252,3 @@ MENUITEM "Défilement vers la droite", IDM_SCROLL_RIGHT } } -#pragma code_page(default) Modified: trunk/reactos/dll/win32/shdoclc/Lt.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shdoclc/Lt.rc?re…
============================================================================== --- trunk/reactos/dll/win32/shdoclc/Lt.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shdoclc/Lt.rc [iso-8859-1] Sat Mar 6 14:32:24 2010 @@ -249,4 +249,3 @@ MENUITEM "Slinkti deÅ¡inÄn", IDM_SCROLL_RIGHT } } -#pragma code_page(default) Modified: trunk/reactos/dll/win32/shdoclc/Si.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shdoclc/Si.rc?re…
============================================================================== --- trunk/reactos/dll/win32/shdoclc/Si.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shdoclc/Si.rc [iso-8859-1] Sat Mar 6 14:32:24 2010 @@ -248,4 +248,3 @@ MENUITEM "Drsenje desno", IDM_SCROLL_RIGHT } } -#pragma code_page(default) Modified: trunk/reactos/dll/win32/shdoclc/rsrc.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shdoclc/rsrc.rc?…
============================================================================== --- trunk/reactos/dll/win32/shdoclc/rsrc.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shdoclc/rsrc.rc [iso-8859-1] Sat Mar 6 14:32:24 2010 @@ -24,21 +24,24 @@ #include "Bg.rc" #include "Da.rc" -#include "De.rc" #include "En.rc" #include "Es.rc" #include "Fi.rc" -#include "Fr.rc" #include "Hu.rc" #include "Ko.rc" -#include "Lt.rc" #include "Nl.rc" #include "No.rc" +#include "Sv.rc" +#include "Tr.rc" + +/* UTF-8 */ +#include "De.rc" +#include "Fr.rc" +#include "Lt.rc" #include "Pt.rc" #include "Ro.rc" #include "Ru.rc" #include "Si.rc" -#include "Sv.rc" -#include "Tr.rc" #include "Uk.rc" #include "Zh.rc" +
14 years, 9 months
1
0
0
0
[cwittich] 45936: [QUERY] sync query to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 14:27:36 2010 New Revision: 45936 URL:
http://svn.reactos.org/svn/reactos?rev=45936&view=rev
Log: [QUERY] sync query to wine 1.1.40 Modified: trunk/reactos/dll/win32/query/query_main.c Modified: trunk/reactos/dll/win32/query/query_main.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/query/query_main…
============================================================================== --- trunk/reactos/dll/win32/query/query_main.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/query/query_main.c [iso-8859-1] Sat Mar 6 14:27:36 2010 @@ -64,7 +64,6 @@ HRESULT WINAPI DllCanUnloadNow(void) { - FIXME("\n"); return S_FALSE; }
14 years, 9 months
1
0
0
0
[cwittich] 45935: [OLEACC] sync oleacc to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 14:26:12 2010 New Revision: 45935 URL:
http://svn.reactos.org/svn/reactos?rev=45935&view=rev
Log: [OLEACC] sync oleacc to wine 1.1.40 Added: trunk/reactos/dll/win32/oleacc/oleacc_De.rc (with props) trunk/reactos/dll/win32/oleacc/oleacc_Lt.rc (with props) trunk/reactos/dll/win32/oleacc/oleacc_No.rc (with props) trunk/reactos/dll/win32/oleacc/oleacc_Pt.rc (with props) trunk/reactos/dll/win32/oleacc/oleacc_Ro.rc (with props) Modified: trunk/reactos/dll/win32/oleacc/oleacc.rc trunk/reactos/dll/win32/oleacc/oleacc_En.rc trunk/reactos/dll/win32/oleacc/oleacc_Fr.rc trunk/reactos/dll/win32/oleacc/oleacc_Ko.rc trunk/reactos/dll/win32/oleacc/oleacc_Nl.rc trunk/reactos/dll/win32/oleacc/oleacc_Pl.rc Modified: trunk/reactos/dll/win32/oleacc/oleacc.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc.rc…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -22,7 +22,15 @@ #include "oleacc.h" #include "oleacc_En.rc" -#include "oleacc_Fr.rc" #include "oleacc_Ko.rc" #include "oleacc_Nl.rc" #include "oleacc_Pl.rc" + +/* UTF-8 */ +#include "oleacc_De.rc" +#include "oleacc_Fr.rc" +#include "oleacc_Lt.rc" +#include "oleacc_No.rc" +#include "oleacc_Pt.rc" +#include "oleacc_Ro.rc" + Added: trunk/reactos/dll/win32/oleacc/oleacc_De.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_De…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_De.rc (added) +++ trunk/reactos/dll/win32/oleacc/oleacc_De.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -1,0 +1,94 @@ +/* + * German resources for oleacc + * + * Copyright 2009 André Hentschel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "oleacc.h" + +#pragma code_page(65001) + +LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +{ + 0 "unbekanntes Objekt" /* undocumented */ + ROLE_SYSTEM_TITLEBAR "Titelleiste" + ROLE_SYSTEM_MENUBAR "Menüleiste" + ROLE_SYSTEM_SCROLLBAR "Bildlaufleiste" + ROLE_SYSTEM_GRIP "Fangpunkt" + ROLE_SYSTEM_SOUND "Audio" + ROLE_SYSTEM_CURSOR "Cursor" + ROLE_SYSTEM_CARET "Caret-Zeichen" + ROLE_SYSTEM_ALERT "Warnung" + ROLE_SYSTEM_WINDOW "Fenster" + ROLE_SYSTEM_CLIENT "Client" + ROLE_SYSTEM_MENUPOPUP "Kontextmenü" + ROLE_SYSTEM_MENUITEM "Menübefehl" + ROLE_SYSTEM_TOOLTIP "Tooltip" + ROLE_SYSTEM_APPLICATION "Anwendung" + ROLE_SYSTEM_DOCUMENT "Dokument" + ROLE_SYSTEM_PANE "Ausschnitt" + ROLE_SYSTEM_CHART "Diagramm" + ROLE_SYSTEM_DIALOG "Dialog" + ROLE_SYSTEM_BORDER "Rahmen" + ROLE_SYSTEM_GROUPING "Gruppierung" + ROLE_SYSTEM_SEPARATOR "Trennlinie" + ROLE_SYSTEM_TOOLBAR "Symbolleiste" + ROLE_SYSTEM_STATUSBAR "Statusleiste" + ROLE_SYSTEM_TABLE "Tabelle" + ROLE_SYSTEM_COLUMNHEADER "Spaltenkopf" + ROLE_SYSTEM_ROWHEADER "Zeilenkopf" + ROLE_SYSTEM_COLUMN "Spalte" + ROLE_SYSTEM_ROW "Zeile" + ROLE_SYSTEM_CELL "Zelle" + ROLE_SYSTEM_LINK "Link" + ROLE_SYSTEM_HELPBALLOON "Hilfesprechblase" + ROLE_SYSTEM_CHARACTER "Assistent" + ROLE_SYSTEM_LIST "Liste" + ROLE_SYSTEM_LISTITEM "Listenelement" + ROLE_SYSTEM_OUTLINE "Gliederung" + ROLE_SYSTEM_OUTLINEITEM "Gliederungselement" + ROLE_SYSTEM_PAGETAB "Registerkarte" + ROLE_SYSTEM_PROPERTYPAGE "Eigenschaftenseite" + ROLE_SYSTEM_INDICATOR "Anzeige" + ROLE_SYSTEM_GRAPHIC "Grafik" + ROLE_SYSTEM_STATICTEXT "Text" + ROLE_SYSTEM_TEXT "Text" + ROLE_SYSTEM_PUSHBUTTON "Schaltfläche" + ROLE_SYSTEM_CHECKBUTTON "Kontrollkästchen" + ROLE_SYSTEM_RADIOBUTTON "Optionskästchen" + ROLE_SYSTEM_COMBOBOX "Kombinationsfeld" + ROLE_SYSTEM_DROPLIST "Drop Down" + ROLE_SYSTEM_PROGRESSBAR "Fortschrittsanzeige" + ROLE_SYSTEM_DIAL "wählen" + ROLE_SYSTEM_HOTKEYFIELD "Schnellzugriffsfeld" + ROLE_SYSTEM_SLIDER "Schieberegler" + ROLE_SYSTEM_SPINBUTTON "Drehfeld" + ROLE_SYSTEM_DIAGRAM "Diagramm" + ROLE_SYSTEM_ANIMATION "Animation" + ROLE_SYSTEM_EQUATION "Gleichung" + ROLE_SYSTEM_BUTTONDROPDOWN "Dropdown Schaltfläche" + ROLE_SYSTEM_BUTTONMENU "Menü Schaltfläche" + ROLE_SYSTEM_BUTTONDROPDOWNGRID "Raster Dropdown Schaltfläche" + ROLE_SYSTEM_WHITESPACE "Leerzeichen" + ROLE_SYSTEM_PAGETABLIST "Register" + ROLE_SYSTEM_CLOCK "Uhr" + ROLE_SYSTEM_SPLITBUTTON "Trenn Schaltfläche" + ROLE_SYSTEM_IPADDRESS "IP Addresse" + ROLE_SYSTEM_OUTLINEBUTTON "Gliederung Schaltfläche" +} Propchange: trunk/reactos/dll/win32/oleacc/oleacc_De.rc ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/reactos/dll/win32/oleacc/oleacc_En.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_En…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_En.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_En.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -17,6 +17,8 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ + +#include "oleacc.h" LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT Modified: trunk/reactos/dll/win32/oleacc/oleacc_Fr.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_Fr…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_Fr.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_Fr.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -2,6 +2,7 @@ * French resources for oleacc * * Copyright 2008 Jonathan Ernst + * Copyright 2009 Frédéric Delanoy * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,32 +19,37 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "oleacc.h" + +/* UTF-8 */ +#pragma code_page(65001) + LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL STRINGTABLE DISCARDABLE { - 0 "objet inconnu" /* undocumented */ + 0 "objet inconnu" /* non documenté */ ROLE_SYSTEM_TITLEBAR "barre de titre" - ROLE_SYSTEM_MENUBAR "barre de menu" + ROLE_SYSTEM_MENUBAR "barre de menus" ROLE_SYSTEM_SCROLLBAR "barre de défilement" - ROLE_SYSTEM_GRIP "grip" + ROLE_SYSTEM_GRIP "poignée" ROLE_SYSTEM_SOUND "son" ROLE_SYSTEM_CURSOR "curseur" - ROLE_SYSTEM_CARET "caret" + ROLE_SYSTEM_CARET "curseur texte" ROLE_SYSTEM_ALERT "alerte" ROLE_SYSTEM_WINDOW "fenêtre" ROLE_SYSTEM_CLIENT "client" - ROLE_SYSTEM_MENUPOPUP "menu popup" + ROLE_SYSTEM_MENUPOPUP "menu contextuel" ROLE_SYSTEM_MENUITEM "élément de menu" ROLE_SYSTEM_TOOLTIP "infobulle" ROLE_SYSTEM_APPLICATION "application" ROLE_SYSTEM_DOCUMENT "document" - ROLE_SYSTEM_PANE "pane" - ROLE_SYSTEM_CHART "chart" + ROLE_SYSTEM_PANE "panneau" + ROLE_SYSTEM_CHART "diagramme" ROLE_SYSTEM_DIALOG "boîte de dialogue" ROLE_SYSTEM_BORDER "bordure" - ROLE_SYSTEM_GROUPING "grouping" - ROLE_SYSTEM_SEPARATOR "separateur" + ROLE_SYSTEM_GROUPING "groupement" + ROLE_SYSTEM_SEPARATOR "séparateur" ROLE_SYSTEM_TOOLBAR "barre d'outils" ROLE_SYSTEM_STATUSBAR "barre d'état" ROLE_SYSTEM_TABLE "table" @@ -57,8 +63,8 @@ ROLE_SYSTEM_CHARACTER "caractère" ROLE_SYSTEM_LIST "liste" ROLE_SYSTEM_LISTITEM "élément de liste" - ROLE_SYSTEM_OUTLINE "outline" - ROLE_SYSTEM_OUTLINEITEM "outline item" + ROLE_SYSTEM_OUTLINE "plan" + ROLE_SYSTEM_OUTLINEITEM "élément du plan" ROLE_SYSTEM_PAGETAB "onglet de page" ROLE_SYSTEM_PROPERTYPAGE "page de propriétés" ROLE_SYSTEM_INDICATOR "indicateur" @@ -68,23 +74,23 @@ ROLE_SYSTEM_PUSHBUTTON "bouton pressoir" ROLE_SYSTEM_CHECKBUTTON "case à cocher" ROLE_SYSTEM_RADIOBUTTON "bouton radio" - ROLE_SYSTEM_COMBOBOX "combo box" - ROLE_SYSTEM_DROPLIST "drop down" + ROLE_SYSTEM_COMBOBOX "boîte combinée" + ROLE_SYSTEM_DROPLIST "liste déroulante" ROLE_SYSTEM_PROGRESSBAR "barre de progression" - ROLE_SYSTEM_DIAL "dial" - ROLE_SYSTEM_HOTKEYFIELD "hot key field" - ROLE_SYSTEM_SLIDER "slider" - ROLE_SYSTEM_SPINBUTTON "spin box" + ROLE_SYSTEM_DIAL "cadran" + ROLE_SYSTEM_HOTKEYFIELD "champ avec raccourci clavier" + ROLE_SYSTEM_SLIDER "glissière" + ROLE_SYSTEM_SPINBUTTON "bouton fléché" ROLE_SYSTEM_DIAGRAM "diagramme" ROLE_SYSTEM_ANIMATION "animation" ROLE_SYSTEM_EQUATION "équation" - ROLE_SYSTEM_BUTTONDROPDOWN "drop down button" + ROLE_SYSTEM_BUTTONDROPDOWN "bouton avec liste déroulante" ROLE_SYSTEM_BUTTONMENU "bouton de menu" - ROLE_SYSTEM_BUTTONDROPDOWNGRID "grid drop down button" - ROLE_SYSTEM_WHITESPACE "espace blanc" - ROLE_SYSTEM_PAGETABLIST "page tab list" + ROLE_SYSTEM_BUTTONDROPDOWNGRID "bouton avec grille déroulante" + ROLE_SYSTEM_WHITESPACE "blanc" + ROLE_SYSTEM_PAGETABLIST "liste d'onglets de pages" ROLE_SYSTEM_CLOCK "horloge" - ROLE_SYSTEM_SPLITBUTTON "split button" - ROLE_SYSTEM_IPADDRESS "Adresse IP" - ROLE_SYSTEM_OUTLINEBUTTON "outline button" + ROLE_SYSTEM_SPLITBUTTON "bouton avec menu" + ROLE_SYSTEM_IPADDRESS "adresse IP" + ROLE_SYSTEM_OUTLINEBUTTON "bouton de résumé" } Modified: trunk/reactos/dll/win32/oleacc/oleacc_Ko.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_Ko…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_Ko.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_Ko.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -18,6 +18,8 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ + +#include "oleacc.h" LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT Added: trunk/reactos/dll/win32/oleacc/oleacc_Lt.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_Lt…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_Lt.rc (added) +++ trunk/reactos/dll/win32/oleacc/oleacc_Lt.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -1,0 +1,95 @@ +/* + * Lithuanian resources for oleacc + * + * Copyright 2009 Aurimas FiÅ¡eras <aurimas(a)gmail.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "oleacc.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_LITHUANIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +{ + 0 "nežinomas objektas" /* undocumented */ + ROLE_SYSTEM_TITLEBAR "lango antraÅ¡tÄs juosta" + ROLE_SYSTEM_MENUBAR "meniu juosta" + ROLE_SYSTEM_SCROLLBAR "slankjuostÄ" + ROLE_SYSTEM_GRIP "rankenÄlÄ" + ROLE_SYSTEM_SOUND "garsas" + ROLE_SYSTEM_CURSOR "pelÄs žymeklis" + ROLE_SYSTEM_CARET "žymeklis" + ROLE_SYSTEM_ALERT "įspÄjimas" + ROLE_SYSTEM_WINDOW "langas" + ROLE_SYSTEM_CLIENT "klientas" + ROLE_SYSTEM_MENUPOPUP "iÅ¡kylantis meniu" + ROLE_SYSTEM_MENUITEM "meniu elementas" + ROLE_SYSTEM_TOOLTIP "paaiÅ¡kinimas" + ROLE_SYSTEM_APPLICATION "programa" + ROLE_SYSTEM_DOCUMENT "dokumentas" + ROLE_SYSTEM_PANE "polangis" + ROLE_SYSTEM_CHART "diagrama" + ROLE_SYSTEM_DIALOG "dialogo langas" + ROLE_SYSTEM_BORDER "rÄmelis" + ROLE_SYSTEM_GROUPING "grupavimas" + ROLE_SYSTEM_SEPARATOR "skirtukas" + ROLE_SYSTEM_TOOLBAR "įrankių juosta" + ROLE_SYSTEM_STATUSBAR "bÅ«senos juosta" + ROLE_SYSTEM_TABLE "lentelÄ" + ROLE_SYSTEM_COLUMNHEADER "stulpelio antraÅ¡tÄ" + ROLE_SYSTEM_ROWHEADER "eilutÄs antraÅ¡tÄ" + ROLE_SYSTEM_COLUMN "stulpelis" + ROLE_SYSTEM_ROW "eilutÄ" + ROLE_SYSTEM_CELL "langelis" + ROLE_SYSTEM_LINK "nuoroda" + ROLE_SYSTEM_HELPBALLOON "pagalbos balionas" + ROLE_SYSTEM_CHARACTER "personažas" + ROLE_SYSTEM_LIST "sÄ raÅ¡as" + ROLE_SYSTEM_LISTITEM "sÄ raÅ¡o elementas" + ROLE_SYSTEM_OUTLINE "planas" + ROLE_SYSTEM_OUTLINEITEM "plano elementas" + ROLE_SYSTEM_PAGETAB "kortelÄ" + ROLE_SYSTEM_PROPERTYPAGE "savybių lapas" + ROLE_SYSTEM_INDICATOR "indikatorius" + ROLE_SYSTEM_GRAPHIC "grafika" + ROLE_SYSTEM_STATICTEXT "statinis tekstas" + ROLE_SYSTEM_TEXT "tekstas" + ROLE_SYSTEM_PUSHBUTTON "mygtukas" + ROLE_SYSTEM_CHECKBUTTON "žymimasis langelis" + ROLE_SYSTEM_RADIOBUTTON "akutÄ" + ROLE_SYSTEM_COMBOBOX "jungtinis langelis" + ROLE_SYSTEM_DROPLIST "iÅ¡skleidžiamasis sÄ raÅ¡as" + ROLE_SYSTEM_PROGRESSBAR "eigos juosta" + ROLE_SYSTEM_DIAL "sukiojama rankenÄlÄ" + ROLE_SYSTEM_HOTKEYFIELD "sparÄiojo klaviÅ¡o laukas" + ROLE_SYSTEM_SLIDER "Å¡liaužiklis" + ROLE_SYSTEM_SPINBUTTON "suktukas" + ROLE_SYSTEM_DIAGRAM "schema" + ROLE_SYSTEM_ANIMATION "animacija" + ROLE_SYSTEM_EQUATION "lygtis" + ROLE_SYSTEM_BUTTONDROPDOWN "iÅ¡skleidžiamasis mygtukas" + ROLE_SYSTEM_BUTTONMENU "meniu mygtukas" + ROLE_SYSTEM_BUTTONDROPDOWNGRID "tinklelio iÅ¡skleidžiamasis mygtukas" + ROLE_SYSTEM_WHITESPACE "matomas tarpas" + ROLE_SYSTEM_PAGETABLIST "kortelių sÄ raÅ¡as" + ROLE_SYSTEM_CLOCK "laikrodis" + ROLE_SYSTEM_SPLITBUTTON "iÅ¡skleidimo mygtukas" + ROLE_SYSTEM_IPADDRESS "IP adresas" + ROLE_SYSTEM_OUTLINEBUTTON "plano mygtukas" +} Propchange: trunk/reactos/dll/win32/oleacc/oleacc_Lt.rc ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/reactos/dll/win32/oleacc/oleacc_Nl.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_Nl…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_Nl.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_Nl.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -17,6 +17,8 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ + +#include "oleacc.h" LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL @@ -76,8 +78,8 @@ ROLE_SYSTEM_SLIDER "schuifknop" ROLE_SYSTEM_SPINBUTTON "spin box" ROLE_SYSTEM_DIAGRAM "diagram" - ROLE_SYSTEM_ANIMATION "animation" - ROLE_SYSTEM_EQUATION "formula" + ROLE_SYSTEM_ANIMATION "animatie" + ROLE_SYSTEM_EQUATION "formule" ROLE_SYSTEM_BUTTONDROPDOWN "dropdown knop" ROLE_SYSTEM_BUTTONMENU "menu knop" ROLE_SYSTEM_BUTTONDROPDOWNGRID "dropdown grid knop" Added: trunk/reactos/dll/win32/oleacc/oleacc_No.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_No…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_No.rc (added) +++ trunk/reactos/dll/win32/oleacc/oleacc_No.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -1,0 +1,95 @@ +/* + * Norwegian Bokmål resources for oleacc + * + * Copyright 2009 Alexander N. Sørnes <alex(a)thehandofagony.com> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "oleacc.h" + +/* UTF-8 */ +#pragma code_page(65001) + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL + +STRINGTABLE DISCARDABLE +{ + 0 "unknown object" /* undocumented */ + ROLE_SYSTEM_TITLEBAR "tittellinje" + ROLE_SYSTEM_MENUBAR "menylinje" + ROLE_SYSTEM_SCROLLBAR "rullefelt" + ROLE_SYSTEM_GRIP "grip" + ROLE_SYSTEM_SOUND "lyd" + ROLE_SYSTEM_CURSOR "peker" + ROLE_SYSTEM_CARET "markør" + ROLE_SYSTEM_ALERT "varsel" + ROLE_SYSTEM_WINDOW "vindu" + ROLE_SYSTEM_CLIENT "klient" + ROLE_SYSTEM_MENUPOPUP "sprettoppmeny" + ROLE_SYSTEM_MENUITEM "menyelement" + ROLE_SYSTEM_TOOLTIP "verktøytips" + ROLE_SYSTEM_APPLICATION "program" + ROLE_SYSTEM_DOCUMENT "dokument" + ROLE_SYSTEM_PANE "panel" + ROLE_SYSTEM_CHART "diagram" + ROLE_SYSTEM_DIALOG "meldingsvindu" + ROLE_SYSTEM_BORDER "kant" + ROLE_SYSTEM_GROUPING "gruppering" + ROLE_SYSTEM_SEPARATOR "skille" + ROLE_SYSTEM_TOOLBAR "verktøylinje" + ROLE_SYSTEM_STATUSBAR "status bar" + ROLE_SYSTEM_TABLE "tabell" + ROLE_SYSTEM_COLUMNHEADER "kolonneoverskrift" + ROLE_SYSTEM_ROWHEADER "radoverskrift" + ROLE_SYSTEM_COLUMN "kolonne" + ROLE_SYSTEM_ROW "rad" + ROLE_SYSTEM_CELL "celle" + ROLE_SYSTEM_LINK "kobling" + ROLE_SYSTEM_HELPBALLOON "hjelpetekst" + ROLE_SYSTEM_CHARACTER "tegn" + ROLE_SYSTEM_LIST "liste" + ROLE_SYSTEM_LISTITEM "listeelement" + ROLE_SYSTEM_OUTLINE "utheving" + ROLE_SYSTEM_OUTLINEITEM "uthevet element" + ROLE_SYSTEM_PAGETAB "sidefane" + ROLE_SYSTEM_PROPERTYPAGE "fane" + ROLE_SYSTEM_INDICATOR "indikator" + ROLE_SYSTEM_GRAPHIC "grafikk" + ROLE_SYSTEM_STATICTEXT "statisk tekst" + ROLE_SYSTEM_TEXT "tekst" + ROLE_SYSTEM_PUSHBUTTON "knapp" + ROLE_SYSTEM_CHECKBUTTON "avkrysningsboks" + ROLE_SYSTEM_RADIOBUTTON "radioknapp" + ROLE_SYSTEM_COMBOBOX "komboboks" + ROLE_SYSTEM_DROPLIST "rullemeny" + ROLE_SYSTEM_PROGRESSBAR "framgangsindikator" + ROLE_SYSTEM_DIAL "hjul" + ROLE_SYSTEM_HOTKEYFIELD "felt for hurtigtaster" + ROLE_SYSTEM_SLIDER "rullefelt" + ROLE_SYSTEM_SPINBUTTON "rullemeny" + ROLE_SYSTEM_DIAGRAM "diagram" + ROLE_SYSTEM_ANIMATION "animasjon" + ROLE_SYSTEM_EQUATION "likning" + ROLE_SYSTEM_BUTTONDROPDOWN "knapp for rullemeny" + ROLE_SYSTEM_BUTTONMENU "menyknapp" + ROLE_SYSTEM_BUTTONDROPDOWNGRID "felt for rullemeny-knapp" + ROLE_SYSTEM_WHITESPACE "mellomrom" + ROLE_SYSTEM_PAGETABLIST "faneliste" + ROLE_SYSTEM_CLOCK "klokke" + ROLE_SYSTEM_SPLITBUTTON "oppdelt knapp" + ROLE_SYSTEM_IPADDRESS "IP-adresse" + ROLE_SYSTEM_OUTLINEBUTTON "utheving for knapp" +} Propchange: trunk/reactos/dll/win32/oleacc/oleacc_No.rc ------------------------------------------------------------------------------ svn:eol-style = native Modified: trunk/reactos/dll/win32/oleacc/oleacc_Pl.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_Pl…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_Pl.rc [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleacc/oleacc_Pl.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -17,6 +17,8 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ + +#include "oleacc.h" LANGUAGE LANG_POLISH, SUBLANG_NEUTRAL Added: trunk/reactos/dll/win32/oleacc/oleacc_Pt.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_Pt…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_Pt.rc (added) +++ trunk/reactos/dll/win32/oleacc/oleacc_Pt.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -1,0 +1,94 @@ +/* + * Portuguese resources for oleacc + * + * Copyright 2009 Ricardo Filipe + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "oleacc.h" + +#pragma code_page(65001) + +LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE + +STRINGTABLE DISCARDABLE +{ + 0 "objecto desconhecido" /* undocumented */ + ROLE_SYSTEM_TITLEBAR "barra de tÃtulo" + ROLE_SYSTEM_MENUBAR "barra de menu" + ROLE_SYSTEM_SCROLLBAR "barra de scroll" + ROLE_SYSTEM_GRIP "grip" + ROLE_SYSTEM_SOUND "som" + ROLE_SYSTEM_CURSOR "cursor" + ROLE_SYSTEM_CARET "caret" + ROLE_SYSTEM_ALERT "alerta" + ROLE_SYSTEM_WINDOW "janela" + ROLE_SYSTEM_CLIENT "cliente" + ROLE_SYSTEM_MENUPOPUP "popup menu" + ROLE_SYSTEM_MENUITEM "item do menu" + ROLE_SYSTEM_TOOLTIP "dica" + ROLE_SYSTEM_APPLICATION "aplicação" + ROLE_SYSTEM_DOCUMENT "documento" + ROLE_SYSTEM_PANE "painel" + ROLE_SYSTEM_CHART "gráfico" + ROLE_SYSTEM_DIALOG "diálogo" + ROLE_SYSTEM_BORDER "margem" + ROLE_SYSTEM_GROUPING "agrupamento" + ROLE_SYSTEM_SEPARATOR "separador" + ROLE_SYSTEM_TOOLBAR "barra de ferramentas" + ROLE_SYSTEM_STATUSBAR "barra de estado" + ROLE_SYSTEM_TABLE "tabela" + ROLE_SYSTEM_COLUMNHEADER "cabeçalho da coluna" + ROLE_SYSTEM_ROWHEADER "cabeçalho da linha" + ROLE_SYSTEM_COLUMN "coluna" + ROLE_SYSTEM_ROW "linha" + ROLE_SYSTEM_CELL "célula" + ROLE_SYSTEM_LINK "ligação" + ROLE_SYSTEM_HELPBALLOON "balão de ajuda" + ROLE_SYSTEM_CHARACTER "caracter" + ROLE_SYSTEM_LIST "lista" + ROLE_SYSTEM_LISTITEM "item da lista" + ROLE_SYSTEM_OUTLINE "delinear" + ROLE_SYSTEM_OUTLINEITEM "item delinear" + ROLE_SYSTEM_PAGETAB "tab de página" + ROLE_SYSTEM_PROPERTYPAGE "página de propriedades" + ROLE_SYSTEM_INDICATOR "indicador" + ROLE_SYSTEM_GRAPHIC "gráfico" + ROLE_SYSTEM_STATICTEXT "texto estático" + ROLE_SYSTEM_TEXT "texto" + ROLE_SYSTEM_PUSHBUTTON "push button" + ROLE_SYSTEM_CHECKBUTTON "check button" + ROLE_SYSTEM_RADIOBUTTON "radio button" + ROLE_SYSTEM_COMBOBOX "combo box" + ROLE_SYSTEM_DROPLIST "drop down" + ROLE_SYSTEM_PROGRESSBAR "barra de progresso" + ROLE_SYSTEM_DIAL "dial" + ROLE_SYSTEM_HOTKEYFIELD "hot key field" + ROLE_SYSTEM_SLIDER "slider" + ROLE_SYSTEM_SPINBUTTON "spin box" + ROLE_SYSTEM_DIAGRAM "diagrama" + ROLE_SYSTEM_ANIMATION "animação" + ROLE_SYSTEM_EQUATION "equação" + ROLE_SYSTEM_BUTTONDROPDOWN "drop down button" + ROLE_SYSTEM_BUTTONMENU "menu button" + ROLE_SYSTEM_BUTTONDROPDOWNGRID "grid drop down button" + ROLE_SYSTEM_WHITESPACE "espaço em branco" + ROLE_SYSTEM_PAGETABLIST "page tab list" + ROLE_SYSTEM_CLOCK "relógio" + ROLE_SYSTEM_SPLITBUTTON "split button" + ROLE_SYSTEM_IPADDRESS "endereço IP" + ROLE_SYSTEM_OUTLINEBUTTON "outline button" +} Propchange: trunk/reactos/dll/win32/oleacc/oleacc_Pt.rc ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/reactos/dll/win32/oleacc/oleacc_Ro.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleacc/oleacc_Ro…
============================================================================== --- trunk/reactos/dll/win32/oleacc/oleacc_Ro.rc (added) +++ trunk/reactos/dll/win32/oleacc/oleacc_Ro.rc [iso-8859-1] Sat Mar 6 14:26:12 2010 @@ -1,0 +1,93 @@ +/* + * Copyright 2008 Nikolay Sivov + * Copyright 2009 Michael Stefaniuc + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "oleacc.h" + +LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL + +#pragma code_page(65001) + +STRINGTABLE DISCARDABLE +{ + 0 "obiect necunoscut" /* undocumented */ + ROLE_SYSTEM_TITLEBAR "barÄ de titlu" + ROLE_SYSTEM_MENUBAR "barÄ de meniu" + ROLE_SYSTEM_SCROLLBAR "barÄ de defilare" + ROLE_SYSTEM_GRIP "ghidaj" + ROLE_SYSTEM_SOUND "sunet" + ROLE_SYSTEM_CURSOR "cursor" + ROLE_SYSTEM_CARET "circumflex" + ROLE_SYSTEM_ALERT "atenÈionare" + ROLE_SYSTEM_WINDOW "fereastrÄ" + ROLE_SYSTEM_CLIENT "client" + ROLE_SYSTEM_MENUPOPUP "meniu contextual" + ROLE_SYSTEM_MENUITEM "element de meniu" + ROLE_SYSTEM_TOOLTIP "indiciu" + ROLE_SYSTEM_APPLICATION "aplicaÈie" + ROLE_SYSTEM_DOCUMENT "document" + ROLE_SYSTEM_PANE "panou" + ROLE_SYSTEM_CHART "diagramÄ" + ROLE_SYSTEM_DIALOG "dialog" + ROLE_SYSTEM_BORDER "margine" + ROLE_SYSTEM_GROUPING "grupare" + ROLE_SYSTEM_SEPARATOR "separator" + ROLE_SYSTEM_TOOLBAR "barÄ de unelte" + ROLE_SYSTEM_STATUSBAR "barÄ de stare" + ROLE_SYSTEM_TABLE "tabel" + ROLE_SYSTEM_COLUMNHEADER "antet de coloanÄ" + ROLE_SYSTEM_ROWHEADER "antet de rând" + ROLE_SYSTEM_COLUMN "coloanÄ" + ROLE_SYSTEM_ROW "rând" + ROLE_SYSTEM_CELL "celulÄ" + ROLE_SYSTEM_LINK "legÄturÄ" + ROLE_SYSTEM_HELPBALLOON "balon de ajutor" + ROLE_SYSTEM_CHARACTER "caracter" + ROLE_SYSTEM_LIST "listÄ" + ROLE_SYSTEM_LISTITEM "element din listÄ" + ROLE_SYSTEM_OUTLINE "contur" + ROLE_SYSTEM_OUTLINEITEM "conturare element" + ROLE_SYSTEM_PAGETAB "filÄ" + ROLE_SYSTEM_PROPERTYPAGE "paginÄ de proprietÄÈi" + ROLE_SYSTEM_INDICATOR "indicator" + ROLE_SYSTEM_GRAPHIC "graficÄ" + ROLE_SYSTEM_STATICTEXT "text static" + ROLE_SYSTEM_TEXT "text" + ROLE_SYSTEM_PUSHBUTTON "buton de comandÄ" + ROLE_SYSTEM_CHECKBUTTON "buton de bifare" + ROLE_SYSTEM_RADIOBUTTON "buton radio" + ROLE_SYSTEM_COMBOBOX "cÄsuÈÄ combinatÄ" + ROLE_SYSTEM_DROPLIST "listÄ verticalÄ" + ROLE_SYSTEM_PROGRESSBAR "barÄ de progres" + ROLE_SYSTEM_DIAL "apelator" + ROLE_SYSTEM_HOTKEYFIELD "câmp de tastÄ rapidÄ" + ROLE_SYSTEM_SLIDER "glisor" + ROLE_SYSTEM_SPINBUTTON "cÄsuÈÄ incrementalÄ" + ROLE_SYSTEM_DIAGRAM "diagramÄ" + ROLE_SYSTEM_ANIMATION "animaÈie" + ROLE_SYSTEM_EQUATION "ecuaÈie" + ROLE_SYSTEM_BUTTONDROPDOWN "buton listÄ verticalÄ" + ROLE_SYSTEM_BUTTONMENU "buton meniu" + ROLE_SYSTEM_BUTTONDROPDOWNGRID "buton listÄ verticalÄ de grilÄ" + ROLE_SYSTEM_WHITESPACE "spaÈiu gol" + ROLE_SYSTEM_PAGETABLIST "listÄ de file" + ROLE_SYSTEM_CLOCK "ceas" + ROLE_SYSTEM_SPLITBUTTON "buton separare" + ROLE_SYSTEM_IPADDRESS "adresÄ IP" + ROLE_SYSTEM_OUTLINEBUTTON "buton contur" +} Propchange: trunk/reactos/dll/win32/oleacc/oleacc_Ro.rc ------------------------------------------------------------------------------ svn:eol-style = native
14 years, 9 months
1
0
0
0
[cwittich] 45934: [MSXML3_WINETEST] sync msxml3_winetest to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 14:22:03 2010 New Revision: 45934 URL:
http://svn.reactos.org/svn/reactos?rev=45934&view=rev
Log: [MSXML3_WINETEST] sync msxml3_winetest to wine 1.1.40 Modified: trunk/rostests/winetests/msxml3/domdoc.c Modified: trunk/rostests/winetests/msxml3/domdoc.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msxml3/domdoc.c…
============================================================================== --- trunk/rostests/winetests/msxml3/domdoc.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msxml3/domdoc.c [iso-8859-1] Sat Mar 6 14:22:03 2010 @@ -639,6 +639,9 @@ r = IXMLDOMElement_QueryInterface( element, &IID_IObjectIdentity, (LPVOID*)&ident ); ok( r == E_NOINTERFACE, "ret %08x\n", r); + r = IXMLDOMElement_get_tagName( element, NULL ); + ok( r == E_INVALIDARG, "ret %08x\n", r); + /* check if the tag is correct */ r = IXMLDOMElement_get_tagName( element, &tag ); ok( r == S_OK, "couldn't get tag name\n"); @@ -5289,6 +5292,41 @@ IXMLDOMDocument_Release(doc); } +static void test_IObjectSafety_set(IObjectSafety *safety, HRESULT result, HRESULT result2, DWORD set, DWORD mask, DWORD expected, DWORD expected2) +{ + HRESULT hr; + DWORD enabled, supported; + + trace("testing IObjectSafety: enable=%08x, mask=%08x\n", set, mask); + + hr = IObjectSafety_SetInterfaceSafetyOptions(safety, NULL, set, mask); + if (result == result2) + ok(hr == result, "SetInterfaceSafetyOptions: expected %08x, returned %08x\n", result, hr ); + else + ok(broken(hr == result) || hr == result2, + "SetInterfaceSafetyOptions: expected %08x, got %08x\n", result2, hr ); + + supported = enabled = 0xCAFECAFE; + hr = IObjectSafety_GetInterfaceSafetyOptions(safety, NULL, &supported, &enabled); + ok(hr == S_OK, "ret %08x\n", hr ); + if (expected == expected2) + ok(enabled == expected, "Expected %08x, got %08x\n", expected, enabled); + else + ok(broken(enabled == expected) || enabled == expected2, + "Expected %08x, got %08x\n", expected2, enabled); + + /* reset the safety options */ + + hr = IObjectSafety_SetInterfaceSafetyOptions(safety, NULL, + INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA|INTERFACE_USES_SECURITY_MANAGER, + 0); + ok(hr == S_OK, "ret %08x\n", hr ); + + hr = IObjectSafety_GetInterfaceSafetyOptions(safety, NULL, &supported, &enabled); + ok(hr == S_OK, "ret %08x\n", hr ); + ok(enabled == 0, "Expected 0, got %08x\n", enabled); +} + static void test_document_IObjectSafety(void) { IXMLDOMDocument *doc; @@ -5311,41 +5349,85 @@ hr = IObjectSafety_GetInterfaceSafetyOptions(safety, NULL, &supported, &enabled); ok(hr == S_OK, "ret %08x\n", hr ); - ok(supported == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA), - "Expected (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA)," + ok(broken(supported == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA)) || + supported == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER) /* msxml3 SP8+ */, + "Expected (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACE_USES_SECURITY_MANAGER), " "got %08x\n", supported); ok(enabled == 0, "Expected 0, got %08x\n", enabled); - /* set */ + + /* set -- individual flags */ + + test_IObjectSafety_set(safety, S_OK, S_OK, + INTERFACESAFE_FOR_UNTRUSTED_CALLER, INTERFACESAFE_FOR_UNTRUSTED_CALLER, + INTERFACESAFE_FOR_UNTRUSTED_CALLER, INTERFACESAFE_FOR_UNTRUSTED_CALLER); + + test_IObjectSafety_set(safety, S_OK, S_OK, + INTERFACESAFE_FOR_UNTRUSTED_DATA, INTERFACESAFE_FOR_UNTRUSTED_DATA, + INTERFACESAFE_FOR_UNTRUSTED_DATA, INTERFACESAFE_FOR_UNTRUSTED_DATA); + + test_IObjectSafety_set(safety, S_OK, S_OK, + INTERFACE_USES_SECURITY_MANAGER, INTERFACE_USES_SECURITY_MANAGER, + 0, INTERFACE_USES_SECURITY_MANAGER /* msxml3 SP8+ */); + + /* set INTERFACE_USES_DISPEX */ + + test_IObjectSafety_set(safety, S_OK, E_FAIL /* msxml3 SP8+ */, + INTERFACE_USES_DISPEX, INTERFACE_USES_DISPEX, + 0, 0); + + test_IObjectSafety_set(safety, S_OK, E_FAIL /* msxml3 SP8+ */, + INTERFACE_USES_DISPEX, 0, + 0, 0); + + test_IObjectSafety_set(safety, S_OK, S_OK /* msxml3 SP8+ */, + 0, INTERFACE_USES_DISPEX, + 0, 0); + + /* set option masking */ + + test_IObjectSafety_set(safety, S_OK, S_OK, + INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA, + INTERFACESAFE_FOR_UNTRUSTED_CALLER, + INTERFACESAFE_FOR_UNTRUSTED_CALLER, + INTERFACESAFE_FOR_UNTRUSTED_CALLER); + + test_IObjectSafety_set(safety, S_OK, S_OK, + INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA, + INTERFACESAFE_FOR_UNTRUSTED_DATA, + INTERFACESAFE_FOR_UNTRUSTED_DATA, + INTERFACESAFE_FOR_UNTRUSTED_DATA); + + test_IObjectSafety_set(safety, S_OK, S_OK, + INTERFACESAFE_FOR_UNTRUSTED_CALLER|INTERFACESAFE_FOR_UNTRUSTED_DATA, + INTERFACE_USES_SECURITY_MANAGER, + 0, + 0); + + /* set -- inheriting previous settings */ + hr = IObjectSafety_SetInterfaceSafetyOptions(safety, NULL, INTERFACESAFE_FOR_UNTRUSTED_CALLER, INTERFACESAFE_FOR_UNTRUSTED_CALLER); ok(hr == S_OK, "ret %08x\n", hr ); hr = IObjectSafety_GetInterfaceSafetyOptions(safety, NULL, &supported, &enabled); ok(hr == S_OK, "ret %08x\n", hr ); - ok(enabled == INTERFACESAFE_FOR_UNTRUSTED_CALLER, - "Expected INTERFACESAFE_FOR_UNTRUSTED_CALLER, got %08x\n", enabled); - /* set unsupported */ - hr = IObjectSafety_SetInterfaceSafetyOptions(safety, NULL, - INTERFACE_USES_SECURITY_MANAGER | - INTERFACESAFE_FOR_UNTRUSTED_CALLER, - INTERFACE_USES_SECURITY_MANAGER); - ok(hr == S_OK, "ret %08x\n", hr ); - hr = IObjectSafety_GetInterfaceSafetyOptions(safety, NULL, &supported, &enabled); - ok(hr == S_OK, "ret %08x\n", hr ); - ok(enabled == 0, "Expected 0, got %08x\n", enabled); - - hr = IObjectSafety_SetInterfaceSafetyOptions(safety, NULL, - INTERFACESAFE_FOR_UNTRUSTED_CALLER, - INTERFACESAFE_FOR_UNTRUSTED_CALLER); - ok(hr == S_OK, "ret %08x\n", hr ); + todo_wine + ok(broken(enabled == INTERFACESAFE_FOR_UNTRUSTED_CALLER) || + enabled == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACE_USES_SECURITY_MANAGER) /* msxml3 SP8+ */, + "Expected (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACE_USES_SECURITY_MANAGER), " + "got %08x\n", enabled); + hr = IObjectSafety_SetInterfaceSafetyOptions(safety, NULL, INTERFACESAFE_FOR_UNTRUSTED_DATA, INTERFACESAFE_FOR_UNTRUSTED_DATA); ok(hr == S_OK, "ret %08x\n", hr ); hr = IObjectSafety_GetInterfaceSafetyOptions(safety, NULL, &supported, &enabled); ok(hr == S_OK, "ret %08x\n", hr ); - ok(enabled == INTERFACESAFE_FOR_UNTRUSTED_DATA, - "Expected INTERFACESAFE_FOR_UNTRUSTED_DATA, got %08x\n", enabled); + todo_wine + ok(broken(enabled == INTERFACESAFE_FOR_UNTRUSTED_DATA) || + enabled == (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA) /* msxml3 SP8+ */, + "Expected (INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA), " + "got %08x\n", enabled); IObjectSafety_Release(safety);
14 years, 9 months
1
0
0
0
[cwittich] 45933: [MSVCRT_WINETEST] sync msvcrt_winetest to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 14:20:39 2010 New Revision: 45933 URL:
http://svn.reactos.org/svn/reactos?rev=45933&view=rev
Log: [MSVCRT_WINETEST] sync msvcrt_winetest to wine 1.1.40 Modified: trunk/rostests/winetests/msvcrt/string.c Modified: trunk/rostests/winetests/msvcrt/string.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/msvcrt/string.c…
============================================================================== --- trunk/rostests/winetests/msvcrt/string.c [iso-8859-1] (original) +++ trunk/rostests/winetests/msvcrt/string.c [iso-8859-1] Sat Mar 6 14:20:39 2010 @@ -345,6 +345,29 @@ else skip("Current locale has double-byte charset - could leave to false positives\n"); + _setmbcp(1361); + expect_eq(_ismbblead(0x80), 0, int, "%d"); + todo_wine { + expect_eq(_ismbblead(0x81), 1, int, "%d"); + expect_eq(_ismbblead(0x83), 1, int, "%d"); + } + expect_eq(_ismbblead(0x84), 1, int, "%d"); + expect_eq(_ismbblead(0xd3), 1, int, "%d"); + expect_eq(_ismbblead(0xd7), 0, int, "%d"); + todo_wine { + expect_eq(_ismbblead(0xd8), 1, int, "%d"); + } + expect_eq(_ismbblead(0xd9), 1, int, "%d"); + + expect_eq(_ismbbtrail(0x30), 0, int, "%d"); + expect_eq(_ismbbtrail(0x31), 1, int, "%d"); + expect_eq(_ismbbtrail(0x7e), 1, int, "%d"); + expect_eq(_ismbbtrail(0x7f), 0, int, "%d"); + expect_eq(_ismbbtrail(0x80), 0, int, "%d"); + expect_eq(_ismbbtrail(0x81), 1, int, "%d"); + expect_eq(_ismbbtrail(0xfe), 1, int, "%d"); + expect_eq(_ismbbtrail(0xff), 0, int, "%d"); + _setmbcp(curr_mbcp); } @@ -705,6 +728,103 @@ ok(ret == exp, "Expected 0x%x, got 0x%x\n", exp, ret); } while(jisjms[i++][0] != 0); +} + +static void test_mbctombb(void) +{ + static const unsigned int mbcmbb_932[][2] = { + {0x829e, 0x829e}, {0x829f, 0xa7}, {0x82f1, 0xdd}, {0x82f2, 0x82f2}, + {0x833f, 0x833f}, {0x8340, 0xa7}, {0x837e, 0xd0}, {0x837f, 0x837f}, + {0x8380, 0xd1}, {0x8396, 0xb9}, {0x8397, 0x8397}, {0x813f, 0x813f}, + {0x8140, 0x20}, {0x814c, 0x814c}, {0x814f, 0x5e}, {0x8197, 0x40}, + {0x8198, 0x8198}, {0x8258, 0x39}, {0x8259, 0x8259}, {0x825f, 0x825f}, + {0x8260, 0x41}, {0x82f1, 0xdd}, {0x82f2, 0x82f2}, {0,0}}; + unsigned int exp, ret, i; + unsigned int prev_cp = _getmbcp(); + + _setmbcp(932); + for (i = 0; mbcmbb_932[i][0] != 0; i++) + { + ret = _mbctombb(mbcmbb_932[i][0]); + exp = mbcmbb_932[i][1]; + ok(ret == exp, "Expected 0x%x, got 0x%x\n", exp, ret); + } + _setmbcp(prev_cp); +} + +static void test_ismbclegal(void) { + unsigned int prev_cp = _getmbcp(); + int ret, exp, err; + unsigned int i; + + _setmbcp(932); /* Japanese */ + err = 0; + for(i = 0; i < 0x10000; i++) { + ret = _ismbclegal(i); + exp = ((HIBYTE(i) >= 0x81 && HIBYTE(i) <= 0x9F) || + (HIBYTE(i) >= 0xE0 && HIBYTE(i) <= 0xFC)) && + ((LOBYTE(i) >= 0x40 && LOBYTE(i) <= 0x7E) || + (LOBYTE(i) >= 0x80 && LOBYTE(i) <= 0xFC)); + if(ret != exp) { + err = 1; + break; + } + } + ok(!err, "_ismbclegal (932) : Expected 0x%x, got 0x%x (0x%x)\n", exp, ret, i); + _setmbcp(936); /* Chinese (GBK) */ + err = 0; + for(i = 0; i < 0x10000; i++) { + ret = _ismbclegal(i); + exp = HIBYTE(i) >= 0x81 && HIBYTE(i) <= 0xFE && + LOBYTE(i) >= 0x40 && LOBYTE(i) <= 0xFE; + if(ret != exp) { + err = 1; + break; + } + } + ok(!err, "_ismbclegal (936) : Expected 0x%x, got 0x%x (0x%x)\n", exp, ret, i); + _setmbcp(949); /* Korean */ + err = 0; + for(i = 0; i < 0x10000; i++) { + ret = _ismbclegal(i); + exp = HIBYTE(i) >= 0x81 && HIBYTE(i) <= 0xFE && + LOBYTE(i) >= 0x41 && LOBYTE(i) <= 0xFE; + if(ret != exp) { + err = 1; + break; + } + } + ok(!err, "_ismbclegal (949) : Expected 0x%x, got 0x%x (0x%x)\n", exp, ret, i); + _setmbcp(950); /* Chinese (Big5) */ + err = 0; + for(i = 0; i < 0x10000; i++) { + ret = _ismbclegal(i); + exp = HIBYTE(i) >= 0x81 && HIBYTE(i) <= 0xFE && + ((LOBYTE(i) >= 0x40 && LOBYTE(i) <= 0x7E) || + (LOBYTE(i) >= 0xA1 && LOBYTE(i) <= 0xFE)); + if(ret != exp) { + err = 1; + break; + } + } + ok(!err, "_ismbclegal (950) : Expected 0x%x, got 0x%x (0x%x)\n", exp, ret, i); + _setmbcp(1361); /* Korean (Johab) */ + err = 0; + for(i = 0; i < 0x10000; i++) { + ret = _ismbclegal(i); + exp = ((HIBYTE(i) >= 0x81 && HIBYTE(i) <= 0xD3) || + (HIBYTE(i) >= 0xD8 && HIBYTE(i) <= 0xF9)) && + ((LOBYTE(i) >= 0x31 && LOBYTE(i) <= 0x7E) || + (LOBYTE(i) >= 0x81 && LOBYTE(i) <= 0xFE)) && + HIBYTE(i) != 0xDF; + if(ret != exp) { + err = 1; + break; + } + } + todo_wine ok(!err, "_ismbclegal (1361) : Expected 0x%x, got 0x%x (0x%x)\n", exp, ret, i); + + _setmbcp(prev_cp); } static const struct { @@ -833,6 +953,8 @@ test_strcat_s(); test__mbsnbcpy_s(); test_mbcjisjms(); + test_mbctombb(); + test_ismbclegal(); test_strtok(); test_wcscpy_s(); test__wcsupr_s();
14 years, 9 months
1
0
0
0
[cwittich] 45932: [UXTHEME] sync uxtheme to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 13:53:36 2010 New Revision: 45932 URL:
http://svn.reactos.org/svn/reactos?rev=45932&view=rev
Log: [UXTHEME] sync uxtheme to wine 1.1.40 Modified: trunk/reactos/dll/win32/uxtheme/draw.c trunk/reactos/dll/win32/uxtheme/msstyles.c trunk/reactos/dll/win32/uxtheme/system.c Modified: trunk/reactos/dll/win32/uxtheme/draw.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/uxtheme/draw.c?r…
============================================================================== --- trunk/reactos/dll/win32/uxtheme/draw.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/uxtheme/draw.c [iso-8859-1] Sat Mar 6 13:53:36 2010 @@ -56,7 +56,7 @@ TRACE("(%p,0x%08x\n", hwnd, dwFlags); res = SetPropW (hwnd, (LPCWSTR)MAKEINTATOM(atDialogThemeEnabled), - (HANDLE)(dwFlags|0x80000000)); + UlongToHandle(dwFlags|0x80000000)); /* 0x80000000 serves as a "flags set" flag */ if (!res) return HRESULT_FROM_WIN32(GetLastError()); @@ -74,8 +74,7 @@ DWORD dwDialogTextureFlags; TRACE("(%p)\n", hwnd); - dwDialogTextureFlags = (DWORD)GetPropW (hwnd, - (LPCWSTR)MAKEINTATOM(atDialogThemeEnabled)); + dwDialogTextureFlags = HandleToUlong( GetPropW( hwnd, (LPCWSTR)MAKEINTATOM(atDialogThemeEnabled) )); if (dwDialogTextureFlags == 0) /* Means EnableThemeDialogTexture wasn't called for this dialog */ return TRUE; Modified: trunk/reactos/dll/win32/uxtheme/msstyles.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/uxtheme/msstyles…
============================================================================== --- trunk/reactos/dll/win32/uxtheme/msstyles.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/uxtheme/msstyles.c [iso-8859-1] Sat Mar 6 13:53:36 2010 @@ -364,7 +364,10 @@ lstrcpynW(part, comp, sizeof(part)/sizeof(part[0])); comp = tmp; /* now get the state */ - *strchrW(comp, ')') = 0; + tmp = strchrW(comp, ')'); + if (!tmp) + return FALSE; + *tmp = 0; lstrcpynW(state, comp, sizeof(state)/sizeof(state[0])); } else { @@ -378,7 +381,10 @@ lstrcpynW(szClassName, comp, MAX_THEME_CLASS_NAME); comp = tmp; /* now get the state */ - *strchrW(comp, ')') = 0; + tmp = strchrW(comp, ')'); + if (!tmp) + return FALSE; + *tmp = 0; lstrcpynW(state, comp, sizeof(state)/sizeof(state[0])); } else { @@ -1087,7 +1093,7 @@ *hasAlpha = TRUE; p = dib.dsBm.bmBits; - n = abs(dib.dsBmih.biHeight) * dib.dsBmih.biWidth; + n = dib.dsBmih.biHeight * dib.dsBmih.biWidth; /* AlphaBlend() wants premultiplied alpha, so do that now */ while (n-- > 0) { Modified: trunk/reactos/dll/win32/uxtheme/system.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/uxtheme/system.c…
============================================================================== --- trunk/reactos/dll/win32/uxtheme/system.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/uxtheme/system.c [iso-8859-1] Sat Mar 6 13:53:36 2010 @@ -393,8 +393,7 @@ if (RegQueryValueExW (hKey, bsp->keyName, 0, &type, (LPBYTE)&value, &count) == ERROR_SUCCESS) { - SystemParametersInfoW (bsp->spiSet, 0, (LPVOID)value, - SPIF_UPDATEINIFILE); + SystemParametersInfoW (bsp->spiSet, 0, UlongToPtr(value), SPIF_UPDATEINIFILE); } bsp++; @@ -445,9 +444,7 @@ DWORD value; SystemParametersInfoW (bsp->spiGet, 0, &value, 0); - SystemParametersInfoW (bsp->spiSet, 0, (LPVOID)value, - SPIF_UPDATEINIFILE); - + SystemParametersInfoW (bsp->spiSet, 0, UlongToPtr(value), SPIF_UPDATEINIFILE); bsp++; }
14 years, 9 months
1
0
0
0
[cwittich] 45931: [WIDL] sync widl to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 13:53:26 2010 New Revision: 45931 URL:
http://svn.reactos.org/svn/reactos?rev=45931&view=rev
Log: [WIDL] sync widl to wine 1.1.40 Modified: trunk/reactos/tools/widl/parser.tab.c trunk/reactos/tools/widl/parser.y Modified: trunk/reactos/tools/widl/parser.tab.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/widl/parser.tab.c?re…
============================================================================== --- trunk/reactos/tools/widl/parser.tab.c [iso-8859-1] (original) +++ trunk/reactos/tools/widl/parser.tab.c [iso-8859-1] Sat Mar 6 13:53:26 2010 @@ -6510,6 +6510,7 @@ default: /* should be no other container types */ assert(0); + return; } if (is_attr(arg->attrs, ATTR_LENGTHIS) && Modified: trunk/reactos/tools/widl/parser.y URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/tools/widl/parser.y?rev=45…
============================================================================== --- trunk/reactos/tools/widl/parser.y [iso-8859-1] (original) +++ trunk/reactos/tools/widl/parser.y [iso-8859-1] Sat Mar 6 13:53:26 2010 @@ -2348,6 +2348,7 @@ default: /* should be no other container types */ assert(0); + return; } if (is_attr(arg->attrs, ATTR_LENGTHIS) &&
14 years, 9 months
1
0
0
0
[cwittich] 45930: [URLMON] sync urlmon to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 13:48:13 2010 New Revision: 45930 URL:
http://svn.reactos.org/svn/reactos?rev=45930&view=rev
Log: [URLMON] sync urlmon to wine 1.1.40 Modified: trunk/reactos/dll/win32/urlmon/umon.c trunk/reactos/dll/win32/urlmon/urlmon.spec Modified: trunk/reactos/dll/win32/urlmon/umon.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/umon.c?re…
============================================================================== --- trunk/reactos/dll/win32/urlmon/umon.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/umon.c [iso-8859-1] Sat Mar 6 13:48:13 2010 @@ -755,3 +755,14 @@ FIXME("%s %p\n", debugstr_w(szDistUnit), psdi ); return E_FAIL; } + +/*********************************************************************** + * AsyncInstallDistributionUnit (URLMON.@) + */ +HRESULT WINAPI AsyncInstallDistributionUnit( LPCWSTR szDistUnit, LPCWSTR szTYPE, + LPCWSTR szExt, DWORD dwFileVersionMS, DWORD dwFileVersionLS, + LPCWSTR szURL, IBindCtx *pbc, LPVOID pvReserved, DWORD flags ) +{ + FIXME(": stub\n"); + return E_NOTIMPL; +} Modified: trunk/reactos/dll/win32/urlmon/urlmon.spec URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/urlmon/urlmon.sp…
============================================================================== --- trunk/reactos/dll/win32/urlmon/urlmon.spec [iso-8859-1] (original) +++ trunk/reactos/dll/win32/urlmon/urlmon.spec [iso-8859-1] Sat Mar 6 13:48:13 2010 @@ -6,7 +6,7 @@ #3 stub IsJITInProgress @ stub AsyncGetClassBits -@ stub AsyncInstallDistributionUnit +@ stdcall AsyncInstallDistributionUnit(ptr ptr ptr long long ptr ptr ptr long) @ stdcall BindAsyncMoniker(ptr long ptr ptr ptr) @ stdcall CoGetClassObjectFromURL(ptr wstr long long wstr ptr long ptr ptr ptr) @ stub CoInstall
14 years, 9 months
1
0
0
0
[cwittich] 45929: [TAPI32] sync tapi32 to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 13:46:57 2010 New Revision: 45929 URL:
http://svn.reactos.org/svn/reactos?rev=45929&view=rev
Log: [TAPI32] sync tapi32 to wine 1.1.40 Modified: trunk/reactos/dll/win32/tapi32/line.c Modified: trunk/reactos/dll/win32/tapi32/line.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/tapi32/line.c?re…
============================================================================== --- trunk/reactos/dll/win32/tapi32/line.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/tapi32/line.c [iso-8859-1] Sat Mar 6 13:46:57 2010 @@ -53,12 +53,21 @@ } /*********************************************************************** - * lineAddProvider (TAPI32.@) + * lineAddProviderA (TAPI32.@) */ DWORD WINAPI lineAddProviderA(LPCSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID) { FIXME("(%s, %p, %p): stub.\n", lpszProviderName, hwndOwner, lpdwPermanentProviderID); - return 1; + return LINEERR_OPERATIONFAILED; +} + +/*********************************************************************** + * lineAddProviderW (TAPI32.@) + */ +DWORD WINAPI lineAddProviderW(LPCWSTR lpszProviderName, HWND hwndOwner, LPDWORD lpdwPermanentProviderID) +{ + FIXME("(%s, %p, %p): stub.\n", wine_dbgstr_w(lpszProviderName), hwndOwner, lpdwPermanentProviderID); + return LINEERR_OPERATIONFAILED; } /*********************************************************************** @@ -457,12 +466,25 @@ } /*********************************************************************** - * lineGetDevCaps (TAPI32.@) - */ -DWORD WINAPI lineGetDevCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps) -{ - FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, dwExtVersion, lpLineDevCaps); - return 0; + * lineGetDevCapsW (TAPI32.@) + */ +DWORD WINAPI lineGetDevCapsW(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, + DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps) +{ + FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, + dwExtVersion, lpLineDevCaps); + return LINEERR_OPERATIONFAILED; +} + +/*********************************************************************** + * lineGetDevCapsA (TAPI32.@) + */ +DWORD WINAPI lineGetDevCapsA(HLINEAPP hLineApp, DWORD dwDeviceID, DWORD dwAPIVersion, + DWORD dwExtVersion, LPLINEDEVCAPS lpLineDevCaps) +{ + FIXME("(%p, %08x, %08x, %08x, %p): stub.\n", hLineApp, dwDeviceID, dwAPIVersion, + dwExtVersion, lpLineDevCaps); + return LINEERR_OPERATIONFAILED; } /*********************************************************************** @@ -475,12 +497,26 @@ } /*********************************************************************** - * lineGetID (TAPI32.@) - */ -DWORD WINAPI lineGetIDA(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass) -{ - FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall, dwSelect, lpDeviceID, lpszDeviceClass); - return 0; + * lineGetIDW (TAPI32.@) + */ +DWORD WINAPI lineGetIDW(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, + LPVARSTRING lpDeviceID, LPCWSTR lpszDeviceClass) +{ + FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall, + dwSelect, lpDeviceID, + debugstr_w(lpszDeviceClass)); + return LINEERR_OPERATIONFAILED; +} + +/*********************************************************************** + * lineGetIDA (TAPI32.@) + */ +DWORD WINAPI lineGetIDA(HLINE hLine, DWORD dwAddressID, HCALL hCall, DWORD dwSelect, + LPVARSTRING lpDeviceID, LPCSTR lpszDeviceClass) +{ + FIXME("(%p, %08x, %p, %08x, %p, %s): stub.\n", hLine, dwAddressID, hCall, + dwSelect, lpDeviceID, lpszDeviceClass); + return LINEERR_OPERATIONFAILED; } /*********************************************************************** @@ -520,12 +556,21 @@ } /*********************************************************************** - * lineGetProviderList (TAPI32.@) + * lineGetProviderListA (TAPI32.@) */ DWORD WINAPI lineGetProviderListA(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList) { FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList); - return 0; + return LINEERR_OPERATIONFAILED; +} + +/*********************************************************************** + * lineGetProviderListW (TAPI32.@) + */ +DWORD WINAPI lineGetProviderListW(DWORD dwAPIVersion, LPLINEPROVIDERLIST lpProviderList) +{ + FIXME("(%08x, %p): stub.\n", dwAPIVersion, lpProviderList); + return LINEERR_OPERATIONFAILED; } /*********************************************************************** @@ -974,12 +1019,25 @@ } /*********************************************************************** - * lineMakeCall (TAPI32.@) - */ -DWORD WINAPI lineMakeCallA(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams) -{ - FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, lpszDestAddress, dwCountryCode, lpCallParams); - return 1; + * lineMakeCallW (TAPI32.@) + */ +DWORD WINAPI lineMakeCallW(HLINE hLine, LPHCALL lphCall, LPCWSTR lpszDestAddress, + DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams) +{ + FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, debugstr_w(lpszDestAddress), + dwCountryCode, lpCallParams); + return LINEERR_OPERATIONFAILED; +} + +/*********************************************************************** + * lineMakeCallA (TAPI32.@) + */ +DWORD WINAPI lineMakeCallA(HLINE hLine, LPHCALL lphCall, LPCSTR lpszDestAddress, + DWORD dwCountryCode, LPLINECALLPARAMS lpCallParams) +{ + FIXME("(%p, %p, %s, %08x, %p): stub.\n", hLine, lphCall, lpszDestAddress, + dwCountryCode, lpCallParams); + return LINEERR_OPERATIONFAILED; } /***********************************************************************
14 years, 9 months
1
0
0
0
[cwittich] 45928: [MCIWAVE] sync mciwave to wine 1.1.40
by cwittich@svn.reactos.org
Author: cwittich Date: Sat Mar 6 13:31:57 2010 New Revision: 45928 URL:
http://svn.reactos.org/svn/reactos?rev=45928&view=rev
Log: [MCIWAVE] sync mciwave to wine 1.1.40 Modified: trunk/reactos/dll/win32/mciwave/mciwave.c Modified: trunk/reactos/dll/win32/mciwave/mciwave.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/mciwave/mciwave.…
============================================================================== --- trunk/reactos/dll/win32/mciwave/mciwave.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/mciwave/mciwave.c [iso-8859-1] Sat Mar 6 13:31:57 2010 @@ -1,9 +1,10 @@ /* - * Sample Wine Driver for MCI wave forms + * Wine Driver for MCI wave forms * * Copyright 1994 Martin Ayotte * 1999,2000,2005 Eric Pouech * 2000 Francois Jacques + * 2009 Jörg Höhle * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -20,6 +21,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include <assert.h> #include <stdarg.h> #include "windef.h" @@ -38,11 +40,12 @@ UINT wDevID; HANDLE hWave; int nUseCount; /* Incremented for each shared open */ - BOOL fShareable; /* TRUE if first open was shareable */ HMMIO hFile; /* mmio file handle open as Element */ - MCI_WAVE_OPEN_PARMSW openParms; + MCIDEVICEID wNotifyDeviceID; /* MCI device ID with a pending notification */ + HANDLE hCallback; /* Callback handle for pending notification */ + LPWSTR lpFileName; /* Name of file (if any) */ WAVEFORMATEX wfxRef; - LPWAVEFORMATEX lpWaveFormat; + LPWAVEFORMATEX lpWaveFormat; /* Points to wfxRef until set by OPEN or RECORD */ BOOL fInput; /* FALSE = Output, TRUE = Input */ volatile WORD dwStatus; /* one from MCI_MODE_xxxx */ DWORD dwMciTimeFormat;/* One of the supported MCI_FORMAT_xxxx */ @@ -62,9 +65,12 @@ * =================================================================== * =================================================================== */ +typedef DWORD (*async_cmd)(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt, HANDLE evt); + struct SCA { + async_cmd cmd; + HANDLE evt; UINT wDevID; - UINT wMsg; DWORD_PTR dwParam1; DWORD_PTR dwParam2; }; @@ -77,32 +83,29 @@ struct SCA* sca = (struct SCA*)arg; DWORD ret; - TRACE("In thread before async command (%08x,%u,%08lx,%08lx)\n", - sca->wDevID, sca->wMsg, sca->dwParam1, sca->dwParam2); - ret = mciSendCommandA(sca->wDevID, sca->wMsg, sca->dwParam1 | MCI_WAIT, sca->dwParam2); - TRACE("In thread after async command (%08x,%u,%08lx,%08lx)\n", - sca->wDevID, sca->wMsg, sca->dwParam1, sca->dwParam2); + TRACE("In thread before async command (%08x,%08lx,%08lx)\n", + sca->wDevID, sca->dwParam1, sca->dwParam2); + ret = sca->cmd(sca->wDevID, sca->dwParam1 | MCI_WAIT, sca->dwParam2, sca->evt); + TRACE("In thread after async command (%08x,%08lx,%08lx)\n", + sca->wDevID, sca->dwParam1, sca->dwParam2); HeapFree(GetProcessHeap(), 0, sca); - ExitThread(ret); - WARN("Should not happen ? what's wrong\n"); - /* should not go after this point */ return ret; } /************************************************************************** * MCI_SendCommandAsync [internal] */ -static DWORD MCI_SendCommandAsync(UINT wDevID, UINT wMsg, DWORD_PTR dwParam1, +static DWORD MCI_SendCommandAsync(UINT wDevID, async_cmd cmd, DWORD_PTR dwParam1, DWORD_PTR dwParam2, UINT size) { - HANDLE handle; + HANDLE handles[2]; struct SCA* sca = HeapAlloc(GetProcessHeap(), 0, sizeof(struct SCA) + size); if (sca == 0) return MCIERR_OUT_OF_MEMORY; sca->wDevID = wDevID; - sca->wMsg = wMsg; + sca->cmd = cmd; sca->dwParam1 = dwParam1; if (size && dwParam2) { @@ -115,12 +118,22 @@ sca->dwParam2 = dwParam2; } - if ((handle = CreateThread(NULL, 0, MCI_SCAStarter, sca, 0, NULL)) == 0) { + if ((sca->evt = handles[1] = CreateEventW(NULL, FALSE, FALSE, NULL)) == NULL || + (handles[0] = CreateThread(NULL, 0, MCI_SCAStarter, sca, 0, NULL)) == 0) { WARN("Couldn't allocate thread for async command handling, sending synchronously\n"); + if (handles[1]) CloseHandle(handles[1]); + sca->evt = NULL; return MCI_SCAStarter(&sca); } - SetThreadPriority(handle, THREAD_PRIORITY_TIME_CRITICAL); - CloseHandle(handle); + + SetThreadPriority(handles[0], THREAD_PRIORITY_TIME_CRITICAL); + /* wait until either: + * - the thread has finished (handles[0], likely an error) + * - init phase of async command is done (handles[1]) + */ + WaitForMultipleObjects(2, handles, FALSE, INFINITE); + CloseHandle(handles[0]); + CloseHandle(handles[1]); return 0; } @@ -190,6 +203,24 @@ } /************************************************************************** + * WAVE_mciNotify [internal] + * + * Notifications in MCI work like a 1-element queue. + * Each new notification request supersedes the previous one. + * This affects Play and Record; other commands are immediate. + */ +static void WAVE_mciNotify(DWORD_PTR hWndCallBack, WINE_MCIWAVE* wmw, UINT wStatus) +{ + /* We simply save one parameter by not passing the wDevID local + * to the command. They are the same (via mciGetDriverData). + */ + MCIDEVICEID wDevID = wmw->wNotifyDeviceID; + HANDLE old = InterlockedExchangePointer(&wmw->hCallback, NULL); + if (old) mciDriverNotify(old, wDevID, MCI_NOTIFY_SUPERSEDED); + mciDriverNotify(HWND_32(LOWORD(hWndCallBack)), wDevID, wStatus); +} + +/************************************************************************** * WAVE_ConvertByteToTimeFormat [internal] */ static DWORD WAVE_ConvertByteToTimeFormat(WINE_MCIWAVE* wmw, DWORD val, LPDWORD lpRet) @@ -203,8 +234,8 @@ case MCI_FORMAT_BYTES: ret = val; break; - case MCI_FORMAT_SAMPLES: /* FIXME: is this correct ? */ - ret = (val * 8) / (wmw->lpWaveFormat->wBitsPerSample ? wmw->lpWaveFormat->wBitsPerSample : 1); + case MCI_FORMAT_SAMPLES: + ret = MulDiv(val,wmw->lpWaveFormat->nSamplesPerSec,wmw->lpWaveFormat->nAvgBytesPerSec); break; default: WARN("Bad time format %u!\n", wmw->dwMciTimeFormat); @@ -223,13 +254,13 @@ switch (wmw->dwMciTimeFormat) { case MCI_FORMAT_MILLISECONDS: - ret = (val * wmw->lpWaveFormat->nAvgBytesPerSec) / 1000; + ret = MulDiv(val,wmw->lpWaveFormat->nAvgBytesPerSec,1000); break; case MCI_FORMAT_BYTES: ret = val; break; - case MCI_FORMAT_SAMPLES: /* FIXME: is this correct ? */ - ret = (val * wmw->lpWaveFormat->wBitsPerSample) / 8; + case MCI_FORMAT_SAMPLES: + ret = MulDiv(val,wmw->lpWaveFormat->nAvgBytesPerSec,wmw->lpWaveFormat->nSamplesPerSec); break; default: WARN("Bad time format %u!\n", wmw->dwMciTimeFormat); @@ -245,6 +276,7 @@ { MMCKINFO mmckInfo; long r; + LPWAVEFORMATEX pwfx; mmckInfo.ckid = mmioFOURCC('f', 'm', 't', ' '); if (mmioDescend(wmw->hFile, &mmckInfo, pckMainRIFF, MMIO_FINDCHUNK) != 0) @@ -252,20 +284,28 @@ TRACE("Chunk Found ckid=%.4s fccType=%.4s cksize=%08X\n", (LPSTR)&mmckInfo.ckid, (LPSTR)&mmckInfo.fccType, mmckInfo.cksize); - wmw->lpWaveFormat = HeapAlloc(GetProcessHeap(), 0, mmckInfo.cksize); - if (!wmw->lpWaveFormat) return MMSYSERR_NOMEM; - r = mmioRead(wmw->hFile, (HPSTR)wmw->lpWaveFormat, mmckInfo.cksize); - if (r < sizeof(WAVEFORMAT)) + pwfx = HeapAlloc(GetProcessHeap(), 0, mmckInfo.cksize); + if (!pwfx) return MCIERR_OUT_OF_MEMORY; + + r = mmioRead(wmw->hFile, (HPSTR)pwfx, mmckInfo.cksize); + if (r < sizeof(PCMWAVEFORMAT)) { + HeapFree(GetProcessHeap(), 0, pwfx); return MCIERR_INVALID_FILE; - - TRACE("wFormatTag=%04X !\n", wmw->lpWaveFormat->wFormatTag); - TRACE("nChannels=%d\n", wmw->lpWaveFormat->nChannels); - TRACE("nSamplesPerSec=%d\n", wmw->lpWaveFormat->nSamplesPerSec); - TRACE("nAvgBytesPerSec=%d\n", wmw->lpWaveFormat->nAvgBytesPerSec); - TRACE("nBlockAlign=%d\n", wmw->lpWaveFormat->nBlockAlign); - TRACE("wBitsPerSample=%u !\n", wmw->lpWaveFormat->wBitsPerSample); + } + TRACE("wFormatTag=%04X !\n", pwfx->wFormatTag); + TRACE("nChannels=%d\n", pwfx->nChannels); + TRACE("nSamplesPerSec=%d\n", pwfx->nSamplesPerSec); + TRACE("nAvgBytesPerSec=%d\n", pwfx->nAvgBytesPerSec); + TRACE("nBlockAlign=%d\n", pwfx->nBlockAlign); + TRACE("wBitsPerSample=%u !\n", pwfx->wBitsPerSample); if (r >= (long)sizeof(WAVEFORMATEX)) - TRACE("cbSize=%u !\n", wmw->lpWaveFormat->cbSize); + TRACE("cbSize=%u !\n", pwfx->cbSize); + if ((pwfx->wFormatTag != WAVE_FORMAT_PCM) + && (r < sizeof(WAVEFORMATEX) || (r < sizeof(WAVEFORMATEX) + pwfx->cbSize))) { + HeapFree(GetProcessHeap(), 0, pwfx); + return MCIERR_INVALID_FILE; + } + wmw->lpWaveFormat = pwfx; mmioAscend(wmw->hFile, &mmckInfo, 0); wmw->ckWaveData.ckid = mmioFOURCC('d', 'a', 't', 'a'); @@ -275,28 +315,26 @@ } TRACE("Chunk Found ckid=%.4s fccType=%.4s cksize=%08X\n", (LPSTR)&wmw->ckWaveData.ckid, (LPSTR)&wmw->ckWaveData.fccType, wmw->ckWaveData.cksize); - TRACE("nChannels=%d nSamplesPerSec=%d\n", - wmw->lpWaveFormat->nChannels, wmw->lpWaveFormat->nSamplesPerSec); - return 0; } /************************************************************************** - * WAVE_mciDefaultFmt [internal] - */ -static DWORD WAVE_mciDefaultFmt(WINE_MCIWAVE* wmw) -{ - wmw->lpWaveFormat = HeapAlloc(GetProcessHeap(), 0, sizeof(*wmw->lpWaveFormat)); - if (!wmw->lpWaveFormat) return MMSYSERR_NOMEM; - + * WAVE_mciDefaultFmt [internal] + * + * wmw->lpWaveFormat points to the default wave format at wmw->wfxRef + * until either Open File or Record. It becomes immutable afterwards, + * i.e. Set wave format or channels etc. is subsequently refused. + */ +static void WAVE_mciDefaultFmt(WINE_MCIWAVE* wmw) +{ + wmw->lpWaveFormat = &wmw->wfxRef; wmw->lpWaveFormat->wFormatTag = WAVE_FORMAT_PCM; wmw->lpWaveFormat->nChannels = 1; - wmw->lpWaveFormat->nSamplesPerSec = 44000; - wmw->lpWaveFormat->nAvgBytesPerSec = 44000; + wmw->lpWaveFormat->nSamplesPerSec = 11025; + wmw->lpWaveFormat->nAvgBytesPerSec = 11025; wmw->lpWaveFormat->nBlockAlign = 1; wmw->lpWaveFormat->wBitsPerSample = 8; - - return 0; + wmw->lpWaveFormat->cbSize = 0; } /************************************************************************** @@ -319,24 +357,41 @@ ckWaveFormat.ckid = mmioFOURCC('f', 'm', 't', ' '); ckWaveFormat.cksize = sizeof(PCMWAVEFORMAT); - if (!wmw->lpWaveFormat) - { - wmw->lpWaveFormat = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wmw->lpWaveFormat)); - if (!wmw->lpWaveFormat) return MMSYSERR_NOMEM; - *wmw->lpWaveFormat = wmw->wfxRef; + /* Set wave format accepts PCM only, however open an + * existing ADPCM file, record into it and the MCI will + * happily save back in that format. */ + if (wmw->lpWaveFormat->wFormatTag == WAVE_FORMAT_PCM) { + if (wmw->lpWaveFormat->nBlockAlign != + wmw->lpWaveFormat->nChannels * wmw->lpWaveFormat->wBitsPerSample/8) { + WORD size = wmw->lpWaveFormat->nChannels * + wmw->lpWaveFormat->wBitsPerSample/8; + WARN("Incorrect nBlockAlign (%d), setting it to %d\n", + wmw->lpWaveFormat->nBlockAlign, size); + wmw->lpWaveFormat->nBlockAlign = size; + } + if (wmw->lpWaveFormat->nAvgBytesPerSec != + wmw->lpWaveFormat->nSamplesPerSec * wmw->lpWaveFormat->nBlockAlign) { + DWORD speed = wmw->lpWaveFormat->nSamplesPerSec * + wmw->lpWaveFormat->nBlockAlign; + WARN("Incorrect nAvgBytesPerSec (%d), setting it to %d\n", + wmw->lpWaveFormat->nAvgBytesPerSec, speed); + wmw->lpWaveFormat->nAvgBytesPerSec = speed; + } } - - /* we can only record PCM files... there is no way in the MCI API to specify - * the necessary data to initialize the extra bytes of the WAVEFORMATEX - * structure - */ - if (wmw->lpWaveFormat->wFormatTag != WAVE_FORMAT_PCM) - goto err; + if (wmw->lpWaveFormat == &wmw->wfxRef) { + LPWAVEFORMATEX pwfx = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WAVEFORMATEX)); + if (!pwfx) return MCIERR_OUT_OF_MEMORY; + /* Set wave format accepts PCM only so the size is known. */ + assert(wmw->wfxRef.wFormatTag == WAVE_FORMAT_PCM); + *pwfx = wmw->wfxRef; + wmw->lpWaveFormat = pwfx; + } if (MMSYSERR_NOERROR != mmioCreateChunk(wmw->hFile, &ckWaveFormat, 0)) goto err; - if (-1 == mmioWrite(wmw->hFile, (HPCSTR)wmw->lpWaveFormat, sizeof(PCMWAVEFORMAT))) + if (-1 == mmioWrite(wmw->hFile, (HPCSTR)wmw->lpWaveFormat, (WAVE_FORMAT_PCM==wmw->lpWaveFormat->wFormatTag) + ? sizeof(PCMWAVEFORMAT) : sizeof(WAVEFORMATEX)+wmw->lpWaveFormat->cbSize)) goto err; if (MMSYSERR_NOERROR != mmioAscend(wmw->hFile, &ckWaveFormat, 0)) @@ -353,8 +408,7 @@ return 0; err: - HeapFree(GetProcessHeap(), 0, wmw->lpWaveFormat); - wmw->lpWaveFormat = NULL; + /* mciClose takes care of wmw->lpWaveFormat. */ return MCIERR_INVALID_FILE; } @@ -371,6 +425,7 @@ if (!GetTempPathW(sizeof(szTmpPath)/sizeof(szTmpPath[0]), szTmpPath)) { WARN("can't retrieve temp path!\n"); + *pszTmpFileName = NULL; return MCIERR_FILE_NOT_FOUND; } @@ -400,16 +455,16 @@ return dwRet; } -static LRESULT WAVE_mciOpenFile(WINE_MCIWAVE* wmw, const WCHAR* filename) +static LRESULT WAVE_mciOpenFile(WINE_MCIWAVE* wmw, LPCWSTR filename) { LRESULT dwRet = MMSYSERR_NOERROR; - WCHAR* fn; + LPWSTR fn; fn = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(filename) + 1) * sizeof(WCHAR)); if (!fn) return MCIERR_OUT_OF_MEMORY; strcpyW(fn, filename); - HeapFree(GetProcessHeap(), 0, (void*)wmw->openParms.lpstrElementName); - wmw->openParms.lpstrElementName = fn; + HeapFree(GetProcessHeap(), 0, (void*)wmw->lpFileName); + wmw->lpFileName = fn; if (strlenW(filename) > 0) { /* FIXME : what should be done if wmw->hFile is already != 0, or the driver is playin' */ @@ -463,7 +518,7 @@ if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; if (dwFlags & MCI_OPEN_SHAREABLE) - return MCIERR_HARDWARE; + return MCIERR_UNSUPPORTED_FUNCTION; if (wmw->nUseCount > 0) { /* The driver is already opened on this channel @@ -478,11 +533,13 @@ wmw->hWave = 0; wmw->dwStatus = MCI_MODE_NOT_READY; wmw->hFile = 0; - memcpy(&wmw->openParms, lpOpenParms, sizeof(MCI_WAVE_OPEN_PARMSA)); - /* will be set by WAVE_mciOpenFile */ - wmw->openParms.lpstrElementName = NULL; + wmw->lpFileName = NULL; /* will be set by WAVE_mciOpenFile */ + wmw->hCallback = NULL; + WAVE_mciDefaultFmt(wmw); TRACE("wDevID=%04X (lpParams->wDeviceID=%08X)\n", wDevID, lpOpenParms->wDeviceID); + /* Logs show the native winmm calls us with 0 still in lpOpenParms.wDeviceID */ + wmw->wNotifyDeviceID = wDevID; if (dwFlags & MCI_OPEN_ELEMENT) { if (dwFlags & MCI_OPEN_ELEMENT_ID) { @@ -494,32 +551,15 @@ dwRet = WAVE_mciOpenFile(wmw, lpOpenParms->lpstrElementName); } } - TRACE("hFile=%p\n", wmw->hFile); - if (dwRet == 0 && !wmw->lpWaveFormat) - dwRet = WAVE_mciDefaultFmt(wmw); - if (dwRet == 0) { - if (wmw->lpWaveFormat) { - switch (wmw->lpWaveFormat->wFormatTag) { - case WAVE_FORMAT_PCM: - if (wmw->lpWaveFormat->nAvgBytesPerSec != - wmw->lpWaveFormat->nSamplesPerSec * wmw->lpWaveFormat->nBlockAlign) { - WARN("Incorrect nAvgBytesPerSec (%d), setting it to %d\n", - wmw->lpWaveFormat->nAvgBytesPerSec, - wmw->lpWaveFormat->nSamplesPerSec * - wmw->lpWaveFormat->nBlockAlign); - wmw->lpWaveFormat->nAvgBytesPerSec = - wmw->lpWaveFormat->nSamplesPerSec * - wmw->lpWaveFormat->nBlockAlign; - } - break; - } - } wmw->dwPosition = 0; wmw->dwStatus = MCI_MODE_STOP; + + if (dwFlags & MCI_NOTIFY) + WAVE_mciNotify(lpOpenParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); } else { wmw->nUseCount--; if (wmw->hFile != 0) @@ -532,46 +572,38 @@ /************************************************************************** * WAVE_mciCue [internal] */ -static DWORD WAVE_mciCue(MCIDEVICEID wDevID, LPARAM dwParam, LPMCI_GENERIC_PARMS lpParms) -{ - /* - FIXME - - This routine is far from complete. At the moment only a check is done on the - MCI_WAVE_INPUT flag. No explicit check on MCI_WAVE_OUTPUT is done since that - is the default. - - The flags MCI_NOTIFY (and the callback parameter in lpParms) and MCI_WAIT - are ignored - */ - - DWORD dwRet; +static DWORD WAVE_mciCue(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); - FIXME("(%u, %08lX, %p); likely to fail\n", wDevID, dwParam, lpParms); - - if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; - - /* FIXME */ - /* always close elements ? */ - if (wmw->hFile != 0) { - mmioClose(wmw->hFile, 0); - wmw->hFile = 0; - } - - dwRet = MMSYSERR_NOERROR; /* assume success */ - - if ((dwParam & MCI_WAVE_INPUT) && !wmw->fInput) { - dwRet = waveOutClose(wmw->hWave); - if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL; - wmw->fInput = TRUE; - } else if (wmw->fInput) { - dwRet = waveInClose(wmw->hWave); - if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL; - wmw->fInput = FALSE; - } - wmw->hWave = 0; - return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL; + TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms); + + /* Tests on systems without sound drivers show that Cue, like + * Record and Play, opens winmm, returning MCIERR_WAVE_xyPUTSUNSUITABLE. + * The first Cue Notify does not immediately return the + * notification, as if a player or recorder thread is started. + * PAUSE mode is reported when successful, but this mode is + * different from the normal Pause, because a) Pause then returns + * NONAPPLICABLE_FUNCTION instead of 0 and b) Set Channels etc. is + * still accepted, returning the original notification as ABORTED. + * I.e. Cue allows subsequent format changes, unlike Record or + * Open file, closes winmm if the format changes and stops this + * thread. + * Wine creates one player or recorder thread per async. Play or + * Record command. Notification behaviour suggests that MS-W* + * reuses a single thread to improve response times. Having Cue + * start this thread early helps to improve Play/Record's initial + * response time. In effect, Cue is a performance hint, which + * justifies our almost no-op implementation. + */ + + if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; + if (wmw->dwStatus != MCI_MODE_STOP) return MCIERR_NONAPPLICABLE_FUNCTION; + + if ((dwFlags & MCI_NOTIFY) && lpParms) + WAVE_mciNotify(lpParms->dwCallback,wmw,MCI_NOTIFY_SUCCESSFUL); + + return MMSYSERR_NOERROR; } /************************************************************************** @@ -585,6 +617,11 @@ TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms); if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; + + if (wmw->dwStatus != MCI_MODE_STOP) { + HANDLE old = InterlockedExchangePointer(&wmw->hCallback, NULL); + if (old) mciDriverNotify(old, wDevID, MCI_NOTIFY_ABORTED); + } /* wait for playback thread (if any) to exit before processing further */ switch (wmw->dwStatus) { @@ -602,15 +639,11 @@ break; } - wmw->dwPosition = 0; - /* sanity resets */ wmw->dwStatus = MCI_MODE_STOP; - if ((dwFlags & MCI_NOTIFY) && lpParms) { - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), - wmw->openParms.wDeviceID, MCI_NOTIFY_SUCCESSFUL); - } + if ((dwFlags & MCI_NOTIFY) && lpParms && MMSYSERR_NOERROR==dwRet) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); return dwRet; } @@ -628,6 +661,7 @@ if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; if (wmw->dwStatus != MCI_MODE_STOP) { + /* mciStop handles MCI_NOTIFY_ABORTED */ dwRet = WAVE_mciStop(wDevID, MCI_WAIT, lpParms); } @@ -640,15 +674,15 @@ } } - HeapFree(GetProcessHeap(), 0, wmw->lpWaveFormat); - wmw->lpWaveFormat = NULL; - HeapFree(GetProcessHeap(), 0, (void*)wmw->openParms.lpstrElementName); - wmw->openParms.lpstrElementName = NULL; + if (wmw->lpWaveFormat != &wmw->wfxRef) + HeapFree(GetProcessHeap(), 0, wmw->lpWaveFormat); + wmw->lpWaveFormat = &wmw->wfxRef; + HeapFree(GetProcessHeap(), 0, (void*)wmw->lpFileName); + wmw->lpFileName = NULL; if ((dwFlags & MCI_NOTIFY) && lpParms) { - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), - wmw->openParms.wDeviceID, - (dwRet == 0) ? MCI_NOTIFY_SUCCESSFUL : MCI_NOTIFY_FAILURE); + WAVE_mciNotify(lpParms->dwCallback, wmw, + (dwRet == 0) ? MCI_NOTIFY_SUCCESSFUL : MCI_NOTIFY_FAILURE); } return 0; @@ -678,9 +712,7 @@ } /****************************************************************** - * WAVE_mciPlayWaitDone - * - * + * WAVE_mciPlayWaitDone [internal] */ static void WAVE_mciPlayWaitDone(WINE_MCIWAVE* wmw) { @@ -698,28 +730,28 @@ /************************************************************************** * WAVE_mciPlay [internal] */ -static DWORD WAVE_mciPlay(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms) -{ +static DWORD WAVE_mciPlay(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt, HANDLE hEvent) +{ + LPMCI_PLAY_PARMS lpParms = (void*)pmt; DWORD end; LONG bufsize, count, left; - DWORD dwRet = 0; + DWORD dwRet; LPWAVEHDR waveHdr = NULL; WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); + HANDLE oldcb; int whidx; - TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms); + TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; - wmw->fInput = FALSE; - if (wmw->hFile == 0) { - WARN("Can't play: no file=%s!\n", debugstr_w(wmw->openParms.lpstrElementName)); + WARN("Can't play: no file=%s!\n", debugstr_w(wmw->lpFileName)); return MCIERR_FILE_NOT_FOUND; } - if (wmw->dwStatus == MCI_MODE_PAUSE) { + if (wmw->dwStatus == MCI_MODE_PAUSE && !wmw->fInput) { /* FIXME: parameters (start/end) in lpParams may not be used */ return WAVE_mciResume(wDevID, dwFlags, (LPMCI_GENERIC_PARMS)lpParms); } @@ -732,55 +764,64 @@ return MCIERR_INTERNAL; } + if (wmw->lpWaveFormat->wFormatTag == WAVE_FORMAT_PCM) { + if (wmw->lpWaveFormat->nBlockAlign != + wmw->lpWaveFormat->nChannels * wmw->lpWaveFormat->wBitsPerSample/8) { + WARN("Incorrect nBlockAlign (%d), setting it to %d\n", + wmw->lpWaveFormat->nBlockAlign, + wmw->lpWaveFormat->nChannels * + wmw->lpWaveFormat->wBitsPerSample/8); + wmw->lpWaveFormat->nBlockAlign = + wmw->lpWaveFormat->nChannels * + wmw->lpWaveFormat->wBitsPerSample/8; + } + if (wmw->lpWaveFormat->nAvgBytesPerSec != + wmw->lpWaveFormat->nSamplesPerSec * wmw->lpWaveFormat->nBlockAlign) { + WARN("Incorrect nAvgBytesPerSec (%d), setting it to %d\n", + wmw->lpWaveFormat->nAvgBytesPerSec, + wmw->lpWaveFormat->nSamplesPerSec * + wmw->lpWaveFormat->nBlockAlign); + wmw->lpWaveFormat->nAvgBytesPerSec = + wmw->lpWaveFormat->nSamplesPerSec * + wmw->lpWaveFormat->nBlockAlign; + } + } + + end = wmw->ckWaveData.cksize; + if (lpParms && (dwFlags & MCI_TO)) { + DWORD position = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwTo); + if (position > end) return MCIERR_OUTOFRANGE; + end = position; + } + if (lpParms && (dwFlags & MCI_FROM)) { + DWORD position = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwFrom); + if (position > end) return MCIERR_OUTOFRANGE; + /* Seek rounds down, so do we. */ + position /= wmw->lpWaveFormat->nBlockAlign; + position *= wmw->lpWaveFormat->nBlockAlign; + wmw->dwPosition = position; + } + if (end < wmw->dwPosition) return MCIERR_OUTOFRANGE; + left = end - wmw->dwPosition; + if (0==left) return MMSYSERR_NOERROR; /* FIXME: NOTIFY */ + + wmw->fInput = FALSE; /* FIXME: waveInOpen may have been called. */ wmw->dwStatus = MCI_MODE_PLAY; if (!(dwFlags & MCI_WAIT)) { - return MCI_SendCommandAsync(wmw->openParms.wDeviceID, MCI_PLAY, dwFlags, + return MCI_SendCommandAsync(wDevID, WAVE_mciPlay, dwFlags, (DWORD_PTR)lpParms, sizeof(MCI_PLAY_PARMS)); } - end = 0xFFFFFFFF; - if (lpParms && (dwFlags & MCI_FROM)) { - wmw->dwPosition = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwFrom); - } - if (lpParms && (dwFlags & MCI_TO)) { - end = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwTo); - } - TRACE("Playing from byte=%u to byte=%u\n", wmw->dwPosition, end); - if (end <= wmw->dwPosition) - return TRUE; - + oldcb = InterlockedExchangePointer(&wmw->hCallback, + (dwFlags & MCI_NOTIFY) ? HWND_32(LOWORD(lpParms->dwCallback)) : NULL); + if (oldcb) mciDriverNotify(oldcb, wDevID, MCI_NOTIFY_ABORTED); + oldcb = NULL; #define WAVE_ALIGN_ON_BLOCK(wmw,v) \ ((((v) + (wmw)->lpWaveFormat->nBlockAlign - 1) / (wmw)->lpWaveFormat->nBlockAlign) * (wmw)->lpWaveFormat->nBlockAlign) - - wmw->dwPosition = WAVE_ALIGN_ON_BLOCK(wmw, wmw->dwPosition); - wmw->ckWaveData.cksize = WAVE_ALIGN_ON_BLOCK(wmw, wmw->ckWaveData.cksize); - - if (dwRet == 0) { - if (wmw->lpWaveFormat) { - switch (wmw->lpWaveFormat->wFormatTag) { - case WAVE_FORMAT_PCM: - if (wmw->lpWaveFormat->nAvgBytesPerSec != - wmw->lpWaveFormat->nSamplesPerSec * wmw->lpWaveFormat->nBlockAlign) { - WARN("Incorrect nAvgBytesPerSec (%d), setting it to %d\n", - wmw->lpWaveFormat->nAvgBytesPerSec, - wmw->lpWaveFormat->nSamplesPerSec * - wmw->lpWaveFormat->nBlockAlign); - wmw->lpWaveFormat->nAvgBytesPerSec = - wmw->lpWaveFormat->nSamplesPerSec * - wmw->lpWaveFormat->nBlockAlign; - } - break; - } - } - } else { - TRACE("can't retrieve wave format %d\n", dwRet); - goto cleanUp; - } - /* go back to beginning of chunk plus the requested position */ /* FIXME: I'm not sure this is correct, notably because some data linked to @@ -790,9 +831,6 @@ */ mmioSeek(wmw->hFile, wmw->ckWaveData.dwDataOffset + wmw->dwPosition, SEEK_SET); /* >= 0 */ - /* By default the device will be opened for output, the MCI_CUE function is there to - * change from output to input and back - */ /* FIXME: how to choose between several output channels ? here mapper is forced */ dwRet = waveOutOpen((HWAVEOUT *)&wmw->hWave, WAVE_MAPPER, wmw->lpWaveFormat, (DWORD_PTR)WAVE_mciPlayCallback, (DWORD_PTR)wmw, CALLBACK_FUNCTION); @@ -821,11 +859,11 @@ } whidx = 0; - left = min(wmw->ckWaveData.cksize, end - wmw->dwPosition); wmw->hEvent = CreateEventW(NULL, FALSE, FALSE, NULL); wmw->dwEventCount = 1L; /* for first buffer */ TRACE("Playing (normalized) from byte=%u for %u bytes\n", wmw->dwPosition, left); + if (hEvent) SetEvent(hEvent); /* FIXME: this doesn't work if wmw->dwPosition != 0 */ while (left > 0 && wmw->dwStatus != MCI_MODE_STOP && wmw->dwStatus != MCI_MODE_NOT_READY) { @@ -838,14 +876,18 @@ */ waveHdr[whidx].dwBufferLength = count; waveHdr[whidx].dwFlags &= ~WHDR_DONE; - TRACE("before WODM_WRITE lpWaveHdr=%p dwBufferLength=%u dwBytesRecorded=%u\n", - &waveHdr[whidx], waveHdr[whidx].dwBufferLength, - waveHdr[whidx].dwBytesRecorded); + TRACE("before WODM_WRITE lpWaveHdr=%p dwBufferLength=%u\n", + &waveHdr[whidx], waveHdr[whidx].dwBufferLength); dwRet = waveOutWrite(wmw->hWave, &waveHdr[whidx], sizeof(WAVEHDR)); + if (dwRet) { + ERR("Aborting play loop, WODM_WRITE error %d\n", dwRet); + dwRet = MCIERR_HARDWARE; + break; + } left -= count; wmw->dwPosition += count; TRACE("after WODM_WRITE dwPosition=%u\n", wmw->dwPosition); - + /* InterlockedDecrement if and only if waveOutWrite is successful */ WAVE_mciPlayWaitDone(wmw); whidx ^= 1; } @@ -858,9 +900,10 @@ waveOutUnprepareHeader(wmw->hWave, &waveHdr[0], sizeof(WAVEHDR)); waveOutUnprepareHeader(wmw->hWave, &waveHdr[1], sizeof(WAVEHDR)); - dwRet = 0; - cleanUp: + if (dwFlags & MCI_NOTIFY) + oldcb = InterlockedExchangePointer(&wmw->hCallback, NULL); + HeapFree(GetProcessHeap(), 0, waveHdr); if (wmw->hWave) { @@ -869,19 +912,17 @@ } CloseHandle(wmw->hEvent); - if (lpParms && (dwFlags & MCI_NOTIFY)) { - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), - wmw->openParms.wDeviceID, - dwRet ? MCI_NOTIFY_FAILURE : MCI_NOTIFY_SUCCESSFUL); - } - wmw->dwStatus = MCI_MODE_STOP; + /* Let the potentically asynchronous commands support FAILURE notification. */ + if (oldcb) mciDriverNotify(oldcb, wDevID, + dwRet ? MCI_NOTIFY_FAILURE : MCI_NOTIFY_SUCCESSFUL); + return dwRet; } /************************************************************************** - * WAVE_mciPlayCallback [internal] + * WAVE_mciRecordCallback [internal] */ static void CALLBACK WAVE_mciRecordCallback(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, @@ -924,8 +965,7 @@ } /****************************************************************** - * bWAVE_mciRecordWaitDone - * + * WAVE_mciRecordWaitDone [internal] */ static void WAVE_mciRecordWaitDone(WINE_MCIWAVE* wmw) { @@ -943,41 +983,39 @@ /************************************************************************** * WAVE_mciRecord [internal] */ -static DWORD WAVE_mciRecord(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms) -{ +static DWORD WAVE_mciRecord(MCIDEVICEID wDevID, DWORD_PTR dwFlags, DWORD_PTR pmt, HANDLE hEvent) +{ + LPMCI_RECORD_PARMS lpParms = (void*)pmt; DWORD end; DWORD dwRet = MMSYSERR_NOERROR; LONG bufsize; LPWAVEHDR waveHdr = NULL; WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); - - TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms); + HANDLE oldcb; + + TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms); if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; - /* FIXME : since there is no way to determine in which mode the device is - * open (recording/playback) automatically switch from a mode to another - */ - wmw->fInput = TRUE; - - if (wmw->dwStatus == MCI_MODE_PAUSE) { + if (wmw->dwStatus == MCI_MODE_PAUSE && wmw->fInput) { /* FIXME: parameters (start/end) in lpParams may not be used */ return WAVE_mciResume(wDevID, dwFlags, (LPMCI_GENERIC_PARMS)lpParms); } /** This function will be called again by a thread when async is used. - * We have to set MCI_MODE_PLAY before we do this so that the app can spin + * We have to set MCI_MODE_RECORD before we do this so that the app can spin * on MCI_STATUS, so we have to allow it here if we're not going to start this thread. */ if ((wmw->dwStatus != MCI_MODE_STOP) && ((wmw->dwStatus != MCI_MODE_RECORD) && (dwFlags & MCI_WAIT))) { return MCIERR_INTERNAL; } + wmw->fInput = TRUE; /* FIXME: waveOutOpen may have been called. */ wmw->dwStatus = MCI_MODE_RECORD; if (!(dwFlags & MCI_WAIT)) { - return MCI_SendCommandAsync(wmw->openParms.wDeviceID, MCI_RECORD, dwFlags, + return MCI_SendCommandAsync(wDevID, WAVE_mciRecord, dwFlags, (DWORD_PTR)lpParms, sizeof(MCI_RECORD_PARMS)); } @@ -985,34 +1023,37 @@ * we don't modify the wave part of an existing file (ie. we always erase an * existing content, we don't overwrite) */ - HeapFree(GetProcessHeap(), 0, (void*)wmw->openParms.lpstrElementName); - dwRet = create_tmp_file(&wmw->hFile, (WCHAR**)&wmw->openParms.lpstrElementName); + HeapFree(GetProcessHeap(), 0, (void*)wmw->lpFileName); + dwRet = create_tmp_file(&wmw->hFile, (WCHAR**)&wmw->lpFileName); if (dwRet != 0) return dwRet; - /* new RIFF file */ + /* new RIFF file, lpWaveFormat now valid */ dwRet = WAVE_mciCreateRIFFSkeleton(wmw); - if (dwRet != 0) return dwRet; /* FIXME: we leak resources */ - - end = 0xFFFFFFFF; - if (lpParms && (dwFlags & MCI_FROM)) { - wmw->dwPosition = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwFrom); - } + if (dwRet != 0) return dwRet; if (lpParms && (dwFlags & MCI_TO)) { end = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwTo); - } + } else end = 0xFFFFFFFF; + if (lpParms && (dwFlags & MCI_FROM)) { + DWORD position = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwFrom); + if (wmw->ckWaveData.cksize < position) return MCIERR_OUTOFRANGE; + /* Seek rounds down, so do we. */ + position /= wmw->lpWaveFormat->nBlockAlign; + position *= wmw->lpWaveFormat->nBlockAlign; + wmw->dwPosition = position; + } + if (end==wmw->dwPosition) return MMSYSERR_NOERROR; /* FIXME: NOTIFY */ TRACE("Recording from byte=%u to byte=%u\n", wmw->dwPosition, end); - if (end <= wmw->dwPosition) - { - return TRUE; - } + oldcb = InterlockedExchangePointer(&wmw->hCallback, + (dwFlags & MCI_NOTIFY) ? HWND_32(LOWORD(lpParms->dwCallback)) : NULL); + if (oldcb) mciDriverNotify(oldcb, wDevID, MCI_NOTIFY_ABORTED); + oldcb = NULL; #define WAVE_ALIGN_ON_BLOCK(wmw,v) \ ((((v) + (wmw)->lpWaveFormat->nBlockAlign - 1) / (wmw)->lpWaveFormat->nBlockAlign) * (wmw)->lpWaveFormat->nBlockAlign) - wmw->dwPosition = WAVE_ALIGN_ON_BLOCK(wmw, wmw->dwPosition); wmw->ckWaveData.cksize = WAVE_ALIGN_ON_BLOCK(wmw, wmw->ckWaveData.cksize); /* Go back to the beginning of the chunk plus the requested position */ @@ -1067,10 +1108,16 @@ dwRet = waveInStart(wmw->hWave); + if (hEvent) SetEvent(hEvent); + while (wmw->dwPosition < end && wmw->dwStatus != MCI_MODE_STOP && wmw->dwStatus != MCI_MODE_NOT_READY) { WAVE_mciRecordWaitDone(wmw); } - + /* Grab callback before another thread kicks in after we change dwStatus. */ + if (dwFlags & MCI_NOTIFY) { + oldcb = InterlockedExchangePointer(&wmw->hCallback, NULL); + dwFlags &= ~MCI_NOTIFY; + } /* needed so that the callback above won't add again the buffers returned by the reset */ wmw->dwStatus = MCI_MODE_STOP; @@ -1082,6 +1129,9 @@ dwRet = 0; cleanUp: + if (dwFlags & MCI_NOTIFY) + oldcb = InterlockedExchangePointer(&wmw->hCallback, NULL); + HeapFree(GetProcessHeap(), 0, waveHdr); if (wmw->hWave) { @@ -1090,13 +1140,10 @@ } CloseHandle(wmw->hEvent); - if (lpParms && (dwFlags & MCI_NOTIFY)) { - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), - wmw->openParms.wDeviceID, - dwRet ? MCI_NOTIFY_FAILURE : MCI_NOTIFY_SUCCESSFUL); - } - wmw->dwStatus = MCI_MODE_STOP; + + if (oldcb) mciDriverNotify(oldcb, wDevID, + dwRet ? MCI_NOTIFY_FAILURE : MCI_NOTIFY_SUCCESSFUL); return dwRet; @@ -1112,76 +1159,121 @@ TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms); + if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; + + switch (wmw->dwStatus) { + case MCI_MODE_PLAY: + dwRet = waveOutPause(wmw->hWave); + if (dwRet==MMSYSERR_NOERROR) wmw->dwStatus = MCI_MODE_PAUSE; + else { /* When playthread was not started yet, winmm not opened, error 5 MMSYSERR_INVALHANDLE */ + ERR("waveOutPause error %d\n",dwRet); + dwRet = MCIERR_INTERNAL; + } + break; + case MCI_MODE_RECORD: + dwRet = waveInStop(wmw->hWave); + if (dwRet==MMSYSERR_NOERROR) wmw->dwStatus = MCI_MODE_PAUSE; + else { + ERR("waveInStop error %d\n",dwRet); + dwRet = MCIERR_INTERNAL; + } + break; + case MCI_MODE_PAUSE: + dwRet = MMSYSERR_NOERROR; + break; + default: + dwRet = MCIERR_NONAPPLICABLE_FUNCTION; + } + if (MMSYSERR_NOERROR==dwRet && (dwFlags & MCI_NOTIFY) && lpParms) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); + return dwRet; +} + +/************************************************************************** + * WAVE_mciResume [internal] + */ +static DWORD WAVE_mciResume(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) +{ + WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); + DWORD dwRet; + + TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms); + + if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; + + switch (wmw->dwStatus) { + case MCI_MODE_PAUSE: + /* Only update dwStatus if wave* succeeds and will exchange buffers buffers. */ + if (wmw->fInput) { + dwRet = waveInStart(wmw->hWave); + if (dwRet==MMSYSERR_NOERROR) wmw->dwStatus = MCI_MODE_RECORD; + else { + ERR("waveInStart error %d\n",dwRet); + dwRet = MCIERR_INTERNAL; + } + } else { + dwRet = waveOutRestart(wmw->hWave); + if (dwRet==MMSYSERR_NOERROR) wmw->dwStatus = MCI_MODE_PLAY; + else { + ERR("waveOutRestart error %d\n",dwRet); + dwRet = MCIERR_INTERNAL; + } + } + break; + case MCI_MODE_PLAY: + case MCI_MODE_RECORD: + dwRet = MMSYSERR_NOERROR; + break; + default: + dwRet = MCIERR_NONAPPLICABLE_FUNCTION; + } + if (MMSYSERR_NOERROR==dwRet && (dwFlags & MCI_NOTIFY) && lpParms) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); + return dwRet; +} + +/************************************************************************** + * WAVE_mciSeek [internal] + */ +static DWORD WAVE_mciSeek(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) +{ + WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); + DWORD position, dwRet; + + TRACE("(%04X, %08X, %p);\n", wDevID, dwFlags, lpParms); + if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; - if (wmw->dwStatus == MCI_MODE_PLAY) { - wmw->dwStatus = MCI_MODE_PAUSE; - } - - if (wmw->fInput) dwRet = waveInStop(wmw->hWave); - else dwRet = waveOutPause(wmw->hWave); - - return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL; -} - -/************************************************************************** - * WAVE_mciResume [internal] - */ -static DWORD WAVE_mciResume(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) -{ - WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); - DWORD dwRet = 0; - - TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms); - - if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID; - - if (wmw->dwStatus == MCI_MODE_PAUSE) { - wmw->dwStatus = MCI_MODE_PLAY; - } - - if (wmw->fInput) dwRet = waveInStart(wmw->hWave); - else dwRet = waveOutRestart(wmw->hWave); - return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL; -} - -/************************************************************************** - * WAVE_mciSeek [internal] - */ -static DWORD WAVE_mciSeek(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms) -{ - DWORD ret = 0; - WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); - - TRACE("(%04X, %08X, %p);\n", wDevID, dwFlags, lpParms); - - if (lpParms == NULL) { - ret = MCIERR_NULL_PARAMETER_BLOCK; - } else if (wmw == NULL) { - ret = MCIERR_INVALID_DEVICE_ID; + position = dwFlags & (MCI_SEEK_TO_START|MCI_SEEK_TO_END|MCI_TO); + if (!position) return MCIERR_MISSING_PARAMETER; + if (position&(position-1)) return MCIERR_FLAGS_NOT_COMPATIBLE; + + /* Stop sends MCI_NOTIFY_ABORTED when needed */ + dwRet = WAVE_mciStop(wDevID, MCI_WAIT, 0); + if (dwRet != MMSYSERR_NOERROR) return dwRet; + + if (dwFlags & MCI_TO) { + position = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwTo); + if (position > wmw->ckWaveData.cksize) + return MCIERR_OUTOFRANGE; + } else if (dwFlags & MCI_SEEK_TO_START) { + position = 0; } else { - WAVE_mciStop(wDevID, MCI_WAIT, 0); - - if (dwFlags & MCI_SEEK_TO_START) { - wmw->dwPosition = 0; - } else if (dwFlags & MCI_SEEK_TO_END) { - wmw->dwPosition = wmw->ckWaveData.cksize; - } else if (dwFlags & MCI_TO) { - wmw->dwPosition = WAVE_ConvertTimeFormatToByte(wmw, lpParms->dwTo); - } else { - WARN("dwFlag doesn't tell where to seek to...\n"); - return MCIERR_MISSING_PARAMETER; - } - - TRACE("Seeking to position=%u bytes\n", wmw->dwPosition); - - if (dwFlags & MCI_NOTIFY) { - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), - wmw->openParms.wDeviceID, MCI_NOTIFY_SUCCESSFUL); - } - } - return ret; + position = wmw->ckWaveData.cksize; + } + /* Seek rounds down, unless at end */ + if (position != wmw->ckWaveData.cksize) { + position /= wmw->lpWaveFormat->nBlockAlign; + position *= wmw->lpWaveFormat->nBlockAlign; + } + wmw->dwPosition = position; + TRACE("Seeking to position=%u bytes\n", position); + + if (dwFlags & MCI_NOTIFY) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); + + return MMSYSERR_NOERROR; } /************************************************************************** @@ -1253,30 +1345,40 @@ TRACE("MCI_WAVE_SET_ANYINPUT !\n"); if (dwFlags & MCI_WAVE_SET_ANYOUTPUT) TRACE("MCI_WAVE_SET_ANYOUTPUT !\n"); + /* Set wave format parameters is refused after Open or Record.*/ + if (dwFlags & MCI_WAVE_SET_FORMATTAG) { + TRACE("MCI_WAVE_SET_FORMATTAG = %d\n", ((LPMCI_WAVE_SET_PARMS)lpParms)->wFormatTag); + if (wmw->lpWaveFormat != &wmw->wfxRef) return MCIERR_NONAPPLICABLE_FUNCTION; + if (((LPMCI_WAVE_SET_PARMS)lpParms)->wFormatTag != WAVE_FORMAT_PCM) + return MCIERR_OUTOFRANGE; + } if (dwFlags & MCI_WAVE_SET_AVGBYTESPERSEC) { + if (wmw->lpWaveFormat != &wmw->wfxRef) return MCIERR_NONAPPLICABLE_FUNCTION; wmw->wfxRef.nAvgBytesPerSec = ((LPMCI_WAVE_SET_PARMS)lpParms)->nAvgBytesPerSec; TRACE("MCI_WAVE_SET_AVGBYTESPERSEC = %d\n", wmw->wfxRef.nAvgBytesPerSec); } if (dwFlags & MCI_WAVE_SET_BITSPERSAMPLE) { + if (wmw->lpWaveFormat != &wmw->wfxRef) return MCIERR_NONAPPLICABLE_FUNCTION; wmw->wfxRef.wBitsPerSample = ((LPMCI_WAVE_SET_PARMS)lpParms)->wBitsPerSample; TRACE("MCI_WAVE_SET_BITSPERSAMPLE = %d\n", wmw->wfxRef.wBitsPerSample); } if (dwFlags & MCI_WAVE_SET_BLOCKALIGN) { + if (wmw->lpWaveFormat != &wmw->wfxRef) return MCIERR_NONAPPLICABLE_FUNCTION; wmw->wfxRef.nBlockAlign = ((LPMCI_WAVE_SET_PARMS)lpParms)->nBlockAlign; TRACE("MCI_WAVE_SET_BLOCKALIGN = %d\n", wmw->wfxRef.nBlockAlign); } if (dwFlags & MCI_WAVE_SET_CHANNELS) { + if (wmw->lpWaveFormat != &wmw->wfxRef) return MCIERR_NONAPPLICABLE_FUNCTION; wmw->wfxRef.nChannels = ((LPMCI_WAVE_SET_PARMS)lpParms)->nChannels; TRACE("MCI_WAVE_SET_CHANNELS = %d\n", wmw->wfxRef.nChannels); } - if (dwFlags & MCI_WAVE_SET_FORMATTAG) { - wmw->wfxRef.wFormatTag = ((LPMCI_WAVE_SET_PARMS)lpParms)->wFormatTag; - TRACE("MCI_WAVE_SET_FORMATTAG = %d\n", wmw->wfxRef.wFormatTag); - } if (dwFlags & MCI_WAVE_SET_SAMPLESPERSEC) { + if (wmw->lpWaveFormat != &wmw->wfxRef) return MCIERR_NONAPPLICABLE_FUNCTION; wmw->wfxRef.nSamplesPerSec = ((LPMCI_WAVE_SET_PARMS)lpParms)->nSamplesPerSec; TRACE("MCI_WAVE_SET_SAMPLESPERSEC = %d\n", wmw->wfxRef.nSamplesPerSec); } + if (dwFlags & MCI_NOTIFY) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); return 0; } @@ -1287,7 +1389,6 @@ { WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); DWORD ret = MCIERR_FILE_NOT_SAVED, tmpRet; - WPARAM wparam = MCI_NOTIFY_FAILURE; TRACE("%d, %08X, %p);\n", wDevID, dwFlags, lpParms); if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; @@ -1318,16 +1419,14 @@ DeleteFileW (lpParms->lpfilename); SetLastError(tmpRet); - if (0 == mmioRenameW(wmw->openParms.lpstrElementName, lpParms->lpfilename, 0, 0 )) { + /* FIXME: Open file.wav; Save; must not rename the original file. + * Nor must Save a.wav; Save b.wav rename a. */ + if (0 == mmioRenameW(wmw->lpFileName, lpParms->lpfilename, 0, 0 )) { ret = MMSYSERR_NOERROR; } - if (dwFlags & MCI_NOTIFY) { - if (ret == MMSYSERR_NOERROR) wparam = MCI_NOTIFY_SUCCESSFUL; - - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), - wmw->openParms.wDeviceID, wparam); - } + if (MMSYSERR_NOERROR==ret && (dwFlags & MCI_NOTIFY)) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); if (ret == MMSYSERR_NOERROR) ret = WAVE_mciOpenFile(wmw, lpParms->lpfilename); @@ -1413,71 +1512,47 @@ lpParms->dwReturn = id; } else { lpParms->dwReturn = 0; - ret = MCIERR_WAVE_INPUTUNSPECIFIED; + ret = MCIERR_WAVE_OUTPUTUNSPECIFIED; } } break; + /* It is always ok to query wave format parameters, + * except on auto-open yield MCIERR_UNSUPPORTED_FUNCTION. */ case MCI_WAVE_STATUS_AVGBYTESPERSEC: - if (!wmw->hFile) { - lpParms->dwReturn = 0; - return MCIERR_UNSUPPORTED_FUNCTION; - } lpParms->dwReturn = wmw->lpWaveFormat->nAvgBytesPerSec; - TRACE("MCI_WAVE_STATUS_AVGBYTESPERSEC => %lu\n", lpParms->dwReturn); + TRACE("MCI_WAVE_STATUS_AVGBYTESPERSEC => %lu\n", lpParms->dwReturn); break; case MCI_WAVE_STATUS_BITSPERSAMPLE: - if (!wmw->hFile) { - lpParms->dwReturn = 0; - return MCIERR_UNSUPPORTED_FUNCTION; - } lpParms->dwReturn = wmw->lpWaveFormat->wBitsPerSample; - TRACE("MCI_WAVE_STATUS_BITSPERSAMPLE => %lu\n", lpParms->dwReturn); + TRACE("MCI_WAVE_STATUS_BITSPERSAMPLE => %lu\n", lpParms->dwReturn); break; case MCI_WAVE_STATUS_BLOCKALIGN: - if (!wmw->hFile) { - lpParms->dwReturn = 0; - return MCIERR_UNSUPPORTED_FUNCTION; - } lpParms->dwReturn = wmw->lpWaveFormat->nBlockAlign; - TRACE("MCI_WAVE_STATUS_BLOCKALIGN => %lu\n", lpParms->dwReturn); + TRACE("MCI_WAVE_STATUS_BLOCKALIGN => %lu\n", lpParms->dwReturn); break; case MCI_WAVE_STATUS_CHANNELS: - if (!wmw->hFile) { - lpParms->dwReturn = 0; - return MCIERR_UNSUPPORTED_FUNCTION; - } lpParms->dwReturn = wmw->lpWaveFormat->nChannels; - TRACE("MCI_WAVE_STATUS_CHANNELS => %lu\n", lpParms->dwReturn); + TRACE("MCI_WAVE_STATUS_CHANNELS => %lu\n", lpParms->dwReturn); break; case MCI_WAVE_STATUS_FORMATTAG: - if (!wmw->hFile) { - lpParms->dwReturn = 0; - return MCIERR_UNSUPPORTED_FUNCTION; - } lpParms->dwReturn = wmw->lpWaveFormat->wFormatTag; - TRACE("MCI_WAVE_FORMATTAG => %lu\n", lpParms->dwReturn); + TRACE("MCI_WAVE_FORMATTAG => %lu\n", lpParms->dwReturn); + break; + case MCI_WAVE_STATUS_SAMPLESPERSEC: + lpParms->dwReturn = wmw->lpWaveFormat->nSamplesPerSec; + TRACE("MCI_WAVE_STATUS_SAMPLESPERSEC => %lu\n", lpParms->dwReturn); break; case MCI_WAVE_STATUS_LEVEL: TRACE("MCI_WAVE_STATUS_LEVEL !\n"); lpParms->dwReturn = 0xAAAA5555; - break; - case MCI_WAVE_STATUS_SAMPLESPERSEC: - if (!wmw->hFile) { - lpParms->dwReturn = 0; - return MCIERR_UNSUPPORTED_FUNCTION; - } - lpParms->dwReturn = wmw->lpWaveFormat->nSamplesPerSec; - TRACE("MCI_WAVE_STATUS_SAMPLESPERSEC => %lu\n", lpParms->dwReturn); break; default: WARN("unknown command %08X !\n", lpParms->dwItem); return MCIERR_UNRECOGNIZED_COMMAND; } } - if (dwFlags & MCI_NOTIFY) { - mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)), - wmw->openParms.wDeviceID, MCI_NOTIFY_SUCCESSFUL); - } + if ((dwFlags & MCI_NOTIFY) && HRESULT_CODE(ret)==0) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); return ret; } @@ -1534,10 +1609,10 @@ ret = MCI_RESOURCE_RETURNED; break; case MCI_WAVE_GETDEVCAPS_INPUTS: - lpParms->dwReturn = 1; + lpParms->dwReturn = waveInGetNumDevs(); break; case MCI_WAVE_GETDEVCAPS_OUTPUTS: - lpParms->dwReturn = 1; + lpParms->dwReturn = waveOutGetNumDevs(); break; default: FIXME("Unknown capability (%08x) !\n", lpParms->dwItem); @@ -1547,6 +1622,8 @@ WARN("No GetDevCaps-Item !\n"); return MCIERR_UNRECOGNIZED_COMMAND; } + if ((dwFlags & MCI_NOTIFY) && HRESULT_CODE(ret)==0) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); return ret; } @@ -1561,9 +1638,10 @@ TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms); - if (lpParms == NULL || lpParms->lpstrReturn == NULL) { - ret = MCIERR_NULL_PARAMETER_BLOCK; - } else if (wmw == NULL) { + if (!lpParms || !lpParms->lpstrReturn) + return MCIERR_NULL_PARAMETER_BLOCK; + + if (wmw == NULL) { ret = MCIERR_INVALID_DEVICE_ID; } else { static const WCHAR wszAudio [] = {'W','i','n','e','\'','s',' ','a','u','d','i','o',' ','p','l','a','y','e','r',0}; @@ -1574,7 +1652,7 @@ switch (dwFlags & ~(MCI_WAIT|MCI_NOTIFY)) { case MCI_INFO_PRODUCT: str = wszAudio; break; - case MCI_INFO_FILE: str = wmw->openParms.lpstrElementName; break; + case MCI_INFO_FILE: str = wmw->lpFileName; break; case MCI_WAVE_INPUT: str = wszWaveIn; break; case MCI_WAVE_OUTPUT: str = wszWaveOut; break; default: @@ -1591,7 +1669,8 @@ } else { lpParms->lpstrReturn[0] = 0; } - + if (MMSYSERR_NOERROR==ret && (dwFlags & MCI_NOTIFY)) + WAVE_mciNotify(lpParms->dwCallback, wmw, MCI_NOTIFY_SUCCESSFUL); return ret; } @@ -1612,7 +1691,7 @@ case DRV_ENABLE: return 1; case DRV_DISABLE: return 1; case DRV_QUERYCONFIGURE: return 1; - case DRV_CONFIGURE: MessageBoxA(0, "Sample MultiMedia Driver !", "OSS Driver", MB_OK); return 1; + case DRV_CONFIGURE: MessageBoxA(0, "MCI waveaudio Driver !", "Wine Driver", MB_OK); return 1; case DRV_INSTALL: return DRVCNF_RESTART; case DRV_REMOVE: return DRVCNF_RESTART; } @@ -1623,8 +1702,8 @@ case MCI_OPEN_DRIVER: return WAVE_mciOpen (dwDevID, dwParam1, (LPMCI_WAVE_OPEN_PARMSW) dwParam2); case MCI_CLOSE_DRIVER: return WAVE_mciClose (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); case MCI_CUE: return WAVE_mciCue (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); - case MCI_PLAY: return WAVE_mciPlay (dwDevID, dwParam1, (LPMCI_PLAY_PARMS) dwParam2); - case MCI_RECORD: return WAVE_mciRecord (dwDevID, dwParam1, (LPMCI_RECORD_PARMS) dwParam2); + case MCI_PLAY: return WAVE_mciPlay (dwDevID, dwParam1, dwParam2, NULL); + case MCI_RECORD: return WAVE_mciRecord (dwDevID, dwParam1, dwParam2, NULL); case MCI_STOP: return WAVE_mciStop (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2); case MCI_SET: return WAVE_mciSet (dwDevID, dwParam1, (LPMCI_SET_PARMS) dwParam2); case MCI_PAUSE: return WAVE_mciPause (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
14 years, 9 months
1
0
0
0
← Newer
1
...
67
68
69
70
71
72
73
...
90
Older →
Jump to page:
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
Results per page:
10
25
50
100
200