diff --git a/reactos/Makefile b/reactos/Makefile
index 17f8a54e79a..afe3fd49962 100644
--- a/reactos/Makefile
+++ b/reactos/Makefile
@@ -169,11 +169,7 @@ else
endif
ifeq ($(ROS_AUTOMAKE),)
- ifeq ($(ARCH),i386)
- ROS_AUTOMAKE=makefile.auto
- else
- ROS_AUTOMAKE=makefile-$(ARCH).auto
- endif
+ ROS_AUTOMAKE=makefile-$(ARCH).auto
endif
all: $(ROS_AUTOMAKE)
diff --git a/reactos/ReactOS-generic.rbuild b/reactos/ReactOS-generic.rbuild
index c26a318771c..9258f28d842 100644
--- a/reactos/ReactOS-generic.rbuild
+++ b/reactos/ReactOS-generic.rbuild
@@ -88,6 +88,7 @@
-Wall
+ -Wno-char-subscripts
-Wno-non-virtual-dtor
@@ -117,10 +118,9 @@
-fno-strict-aliasing
- -Wno-strict-aliasing
-Wpointer-arith
-Wno-multichar
-
+ -Wno-error=uninitialized
diff --git a/reactos/ReactOS-i386.rbuild b/reactos/ReactOS-i386.rbuild
index 59f428471f4..c2a720a640e 100644
--- a/reactos/ReactOS-i386.rbuild
+++ b/reactos/ReactOS-i386.rbuild
@@ -1,6 +1,6 @@
-
+
@@ -24,6 +24,7 @@
-ftracer
-momit-leaf-frame-pointer
+ -fms-extensions
-mpreferred-stack-boundary=2
-m32 --win32
-gstabs+
diff --git a/reactos/base/applications/applications.rbuild b/reactos/base/applications/applications.rbuild
index f4adbe4bd5a..d3c202051fb 100644
--- a/reactos/base/applications/applications.rbuild
+++ b/reactos/base/applications/applications.rbuild
@@ -22,6 +22,9 @@
+
+
+
diff --git a/reactos/base/applications/cacls/resource.h b/reactos/base/applications/cacls/resource.h
index 71778353f10..1f195b9de2c 100644
--- a/reactos/base/applications/cacls/resource.h
+++ b/reactos/base/applications/cacls/resource.h
@@ -1,5 +1,4 @@
-#ifndef _CACLS_RESOURCE_H
-#define _CACLS_RESOURCE_H
+#pragma once
#define IDS_HELP 101
#define IDS_ABBR_CI 102
@@ -40,5 +39,3 @@
#define IDS_READ_CONTROL 137
#define IDS_DELETE 138
#define IDS_STANDARD_RIGHTS_ALL 139
-
-#endif /* _CACLS_RESOURCE_H */
diff --git a/reactos/base/applications/calc/calc.h b/reactos/base/applications/calc/calc.h
index 72c8edf796a..1e645e75e84 100644
--- a/reactos/base/applications/calc/calc.h
+++ b/reactos/base/applications/calc/calc.h
@@ -1,5 +1,4 @@
-#ifndef __CALC_H__
-#define __CALC_H__
+#pragma once
#include
#include
@@ -236,5 +235,3 @@ INT_PTR CALLBACK AboutDlgProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
void ConvExecute(HWND hWnd);
void ConvAdjust(HWND hWnd, int n_cat);
void ConvInit(HWND hWnd);
-
-#endif
diff --git a/reactos/base/applications/calc/lang/de-DE.rc b/reactos/base/applications/calc/lang/de-DE.rc
index ba28b004ccb..f6513aa6dfe 100644
--- a/reactos/base/applications/calc/lang/de-DE.rc
+++ b/reactos/base/applications/calc/lang/de-DE.rc
@@ -324,7 +324,7 @@ END
IDD_DIALOG_STAT DIALOGEX DISCARDABLE 0, 0, 163, 85
STYLE DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Statistik Box"
+CAPTION "Statistikbox"
FONT 8, "MS Shell Dlg"
BEGIN
LISTBOX IDC_LIST_STAT,4,4,156,40,LBS_NOINTEGRALHEIGHT |
@@ -465,11 +465,11 @@ END
// FLCHENTYPEN
STRINGTABLE DISCARDABLE
BEGIN
- IDS_AREA_ACRES "Acres"
- IDS_AREA_ACRES_BRAZIL "Acres (Brasilien)"
- IDS_AREA_ACRES_FRANCE "Acres (Frankreich)"
- IDS_AREA_ACRES_SCOTS "Acres (Schottland)"
- IDS_AREA_ACRES_US "Acres (USA)"
+ IDS_AREA_ACRES "Acre"
+ IDS_AREA_ACRES_BRAZIL "Acre (Brasilien)"
+ IDS_AREA_ACRES_FRANCE "Acre (Frankreich)"
+ IDS_AREA_ACRES_SCOTS "Acre (Schottland)"
+ IDS_AREA_ACRES_US "Acre (USA)"
IDS_AREA_ARES "Ar"
IDS_AREA_CHOU "Chou"
IDS_AREA_DANBO "Danbo"
@@ -482,21 +482,21 @@ BEGIN
IDS_AREA_PYEONGBANGJA "Pyeongbangja"
IDS_AREA_RAI "Rai"
IDS_AREA_SE "Se"
- IDS_AREA_SQUARE_CHR "Qaudratchr"
- IDS_AREA_SQUARE_FATHOMS "Qaudratfathom"
- IDS_AREA_SQUARE_FATHOMS_HUNGARY "Qaudratfathom (Ungarn)"
- IDS_AREA_SQUARE_FEET "Qaudratfu"
- IDS_AREA_SQUARE_KILOMETERS "Qaudratkilometer"
- IDS_AREA_SQUARE_LAR "Qaudratlar"
- IDS_AREA_SQUARE_METER "Qaudratmeter"
- IDS_AREA_SQUARE_MILES "Qaudratmeilen"
- IDS_AREA_SQUARE_MILLIMETERS "Qaudratmillimeter"
- IDS_AREA_SQUARE_SHAKU "Qaudratshaku"
- IDS_AREA_SQUARE_TSUEN "Qaudrattsuen"
- IDS_AREA_SQUARE_VA "Qaudratva"
- IDS_AREA_SQUARE_YARD "Qaudratyard"
+ IDS_AREA_SQUARE_CHR "Quadratchr"
+ IDS_AREA_SQUARE_FATHOMS "Quadratfathom"
+ IDS_AREA_SQUARE_FATHOMS_HUNGARY "Quadratfathom (Ungarn)"
+ IDS_AREA_SQUARE_FEET "Quadratfu"
+ IDS_AREA_SQUARE_KILOMETERS "Quadratkilometer"
+ IDS_AREA_SQUARE_LAR "Quadratlar"
+ IDS_AREA_SQUARE_METER "Quadratmeter"
+ IDS_AREA_SQUARE_MILES "Quadratmeilen"
+ IDS_AREA_SQUARE_MILLIMETERS "Quadratmillimeter"
+ IDS_AREA_SQUARE_SHAKU "Quadratshaku"
+ IDS_AREA_SQUARE_TSUEN "Quadrattsuen"
+ IDS_AREA_SQUARE_VA "Quadratva"
+ IDS_AREA_SQUARE_YARD "Quadratyard"
IDS_AREA_SQUARE_CENTIMETERS "Quadratzentimeter"
- IDS_AREA_SQUARE_INCHES "Qaudratzoll"
+ IDS_AREA_SQUARE_INCHES "Quadratzoll"
IDS_AREA_TAN "Tan"
IDS_AREA_TSUBO "Tsubo"
END
@@ -517,7 +517,7 @@ BEGIN
IDS_CURRENCY_DEUTSCHE_MARK "Deutsche Mark"
IDS_CURRENCY_EURO "Euro"
IDS_CURRENCY_FINNISH_MARKKA "Finnische Mark"
- IDS_CURRENCY_FRENCH_FRANC "Franzschishe Franc"
+ IDS_CURRENCY_FRENCH_FRANC "Franzschische Franc"
IDS_CURRENCY_GREEK_DRACHMA "Griechische Drachme"
IDS_CURRENCY_IRISH_POUND "Irische Pfund"
IDS_CURRENCY_ITALIAN_LIRA "Italienische Lire"
diff --git a/reactos/base/applications/cmdutils/doskey/doskey.rc b/reactos/base/applications/cmdutils/doskey/doskey.rc
index 780ea6ebee2..53772107152 100644
--- a/reactos/base/applications/cmdutils/doskey/doskey.rc
+++ b/reactos/base/applications/cmdutils/doskey/doskey.rc
@@ -7,5 +7,6 @@
#include "doskey.h"
#include "lang/bg-BG.rc"
+#include "lang/de-DE.rc"
#include "lang/en-US.rc"
#include "lang/uk-UA.rc"
diff --git a/reactos/base/applications/cmdutils/doskey/lang/de-DE.rc b/reactos/base/applications/cmdutils/doskey/lang/de-DE.rc
new file mode 100644
index 00000000000..fc73d5dc365
--- /dev/null
+++ b/reactos/base/applications/cmdutils/doskey/lang/de-DE.rc
@@ -0,0 +1,28 @@
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+BEGIN
+
+IDS_HELP, "Verwaltet Einstellungen, Verlauf und Makros der Kommandozeile.\n\
+\n\
+DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
+ [/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=file] [macroname=[text]]\n\
+\n\
+ /INSERT Aktiviert den Einfügemodus.\n\
+ /OVERSTRIKE Deaktiviert den Einfügemodus.\n\
+ /EXENAME=exename Legt den Namen der Anwendung, auf die die Einstel-\n\
+ lungen angewendet werden sollen, fest. Der Standard-\n\
+ wert ist cmd.exe.\n\
+ /HISTORY Zeigt den Befehlsverlauf an.\n\
+ /LISTSIZE=size Legt die Anzahl der Befehle per Verlaufspuffer fest.\n\
+ /REINSTALL Leert den Befehlsverlauf.\n\
+ /MACROS Zeigt Makrodefinitionen an.\n\
+ /MACROS:exename Zeigt Makrodefinitionen für eine Anwendung an.\n\
+ /MACROS:ALL Zeigt Makrodefinitionen für alle Anwendungen an.\n\
+ /MACROFILE=file Lädt Makrodefinitionen aus einer Datei.\n\
+ macroname Legt den Namen eines zu erstellenden Makros fest.\n\
+ text Legt den ersetzenden Text des Makros fest.\n"
+
+IDS_INVALID_MACRO_DEF, "Ungültige Makrodefinition: %s\n"
+
+END
diff --git a/reactos/base/applications/cmdutils/doskey/lang/en-US.rc b/reactos/base/applications/cmdutils/doskey/lang/en-US.rc
index 1b7028681c6..7adc23750d0 100644
--- a/reactos/base/applications/cmdutils/doskey/lang/en-US.rc
+++ b/reactos/base/applications/cmdutils/doskey/lang/en-US.rc
@@ -18,7 +18,7 @@ DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=size]\n\
/MACROS Displays macro definitions.\n\
/MACROS:exename Displays macro definitions for a specific program.\n\
/MACROS:ALL Displays macro definitions for all programs.\n\
- /MACROFILE=filename Loads macro definitions from a file.\n\
+ /MACROFILE=file Loads macro definitions from a file.\n\
macroname Specifies the name of a macro to create.\n\
text Specifies the replacement text for the macro.\n"
diff --git a/reactos/base/applications/cmdutils/hostname/hostname.rbuild b/reactos/base/applications/cmdutils/hostname/hostname.rbuild
index ed747aac6f7..76a3f4084d7 100644
--- a/reactos/base/applications/cmdutils/hostname/hostname.rbuild
+++ b/reactos/base/applications/cmdutils/hostname/hostname.rbuild
@@ -1,5 +1,5 @@
-
+
hostname.c
hostname.rc
diff --git a/reactos/base/applications/cmdutils/more/resource.h b/reactos/base/applications/cmdutils/more/resource.h
index eb430d80b81..08fc79b333b 100644
--- a/reactos/base/applications/cmdutils/more/resource.h
+++ b/reactos/base/applications/cmdutils/more/resource.h
@@ -1,20 +1,5 @@
-#ifndef RESOURCE_H__ /* resource.h */
-#define RESOURCE_H__
+#pragma once
#define IDS_USAGE 100
#define IDS_CONTINUE 101
#define IDS_FILE_ACCESS 102
-
-
-
-
-
-
-
-
-
-
-
-
-
-#endif /* EOF of resource.h */
diff --git a/reactos/base/applications/cmdutils/reg/It.rc b/reactos/base/applications/cmdutils/reg/It.rc
new file mode 100644
index 00000000000..09d38fd4025
--- /dev/null
+++ b/reactos/base/applications/cmdutils/reg/It.rc
@@ -0,0 +1,40 @@
+/*
+ * REG.EXE - Wine-compatible reg program.
+ * Italian language support
+ *
+ * Copyright 2010 Luca Bennati
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "reg.h"
+
+/*UTF-8*/
+#pragma code_page(65001)
+
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+{
+ STRING_USAGE, "La sintassi di questo comando è:\n\nREG [ ADD | DELETE | QUERY ]\nREG comando /?\n"
+ STRING_ADD_USAGE, "REG ADD nome_della_chiave [/v nome_del_valore | /ve] [/t tipo] [/s separatore] [/d dati] [/f]\n"
+ STRING_DELETE_USAGE, "REG DELETE nome_della_chiave [/v nome_del_valore | /ve | /va] [/f]\n"
+ STRING_QUERY_USAGE, "REG QUERY nome_della_chiave [/v nome_del_valore | /ve] [/s]\n"
+ STRING_SUCCESS, "Operazione completata con successo\n"
+ STRING_INVALID_KEY, "Errore: nome della chiave non valido\n"
+ STRING_INVALID_CMDLINE, "Errore: parametri della linea di comando non validi\n"
+ STRING_NO_REMOTE, "Errore: Impossibile aggiungere chiavi alla macchina remota\n"
+ STRING_CANNOT_FIND, "Errore: Il sistema non è riuscito a trovare la chiave di registro o il valore specificati\n"
+}
diff --git a/reactos/base/applications/cmdutils/reg/Uk.rc b/reactos/base/applications/cmdutils/reg/Uk.rc
new file mode 100644
index 00000000000..70c86f70cb9
--- /dev/null
+++ b/reactos/base/applications/cmdutils/reg/Uk.rc
@@ -0,0 +1,43 @@
+/*
+ * REG.EXE - Wine-compatible reg program.
+ *
+ * Copyright 2008 Andrew Riedi
+ *
+ * Ukrainian language support
+ *
+ * Copyright 2010 Igor Paliychuk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "reg.h"
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+{
+ STRING_USAGE, "Синтаксис цієї команди наступний:\n\nREG [ ADD | DELETE | QUERY ]\nREG command /?\n"
+ STRING_ADD_USAGE, "REG ADD key_name [/v value_name | /ve] [/t type] [/s separator] [/d data] [/f]\n"
+ STRING_DELETE_USAGE, "REG DELETE key_name [/v value_name | /ve | /va] [/f]\n"
+ STRING_QUERY_USAGE, "REG QUERY key_name [/v value_name | /ve] [/s]\n"
+ STRING_SUCCESS, "Операція успішно завершена\n"
+ STRING_INVALID_KEY, "Помилка: неправильне ім'я ключа\n"
+ STRING_INVALID_CMDLINE, "Помилка: неправильні параметри командного рядка\n"
+ STRING_NO_REMOTE, "Помилка: неможливо додати ключі на віддаленій машині\n"
+ STRING_CANNOT_FIND, "Помилка: не вдалось знайти вказаний ключ реєстру чи значення\n"
+}
diff --git a/reactos/base/applications/cmdutils/reg/reg.c b/reactos/base/applications/cmdutils/reg/reg.c
index 07dbdbff367..f65a3c8bc93 100644
--- a/reactos/base/applications/cmdutils/reg/reg.c
+++ b/reactos/base/applications/cmdutils/reg/reg.c
@@ -124,6 +124,21 @@ static LPBYTE get_regdata(LPWSTR data, DWORD reg_type, WCHAR separator, DWORD *r
lstrcpyW((LPWSTR)out_data,data);
break;
}
+ case REG_DWORD:
+ {
+ LPWSTR rest;
+ DWORD val;
+ val = strtolW(data, &rest, 0);
+ if (rest == data) {
+ static const WCHAR nonnumber[] = {'E','r','r','o','r',':',' ','/','d',' ','r','e','q','u','i','r','e','s',' ','n','u','m','b','e','r','.','\n',0};
+ reg_printfW(nonnumber);
+ break;
+ }
+ *reg_count = sizeof(DWORD);
+ out_data = HeapAlloc(GetProcessHeap(),0,*reg_count);
+ ((LPDWORD)out_data)[0] = val;
+ break;
+ }
default:
{
static const WCHAR unhandled[] = {'U','n','h','a','n','d','l','e','d',' ','T','y','p','e',' ','0','x','%','x',' ',' ','d','a','t','a',' ','%','s','\n',0};
diff --git a/reactos/base/applications/cmdutils/reg/rsrc.rc b/reactos/base/applications/cmdutils/reg/rsrc.rc
index 1ab7f7f3b97..c145fe91a21 100644
--- a/reactos/base/applications/cmdutils/reg/rsrc.rc
+++ b/reactos/base/applications/cmdutils/reg/rsrc.rc
@@ -1,13 +1,17 @@
#include "Da.rc"
-#include "De.rc"
#include "En.rc"
-#include "Fr.rc"
-#include "Ja.rc"
-//#include "Ko.rc"
-#include "Lt.rc"
+#include "Ko.rc"
#include "Nl.rc"
+#include "Pl.rc"
+
+/* UTF-8 */
+#include "De.rc"
+#include "Fr.rc"
+#include "It.rc"
+#include "Ja.rc"
+#include "Lt.rc"
#include "No.rc"
-//#include "Pl.rc"
#include "Pt.rc"
#include "Ru.rc"
#include "Si.rc"
+#include "Uk.rc"
diff --git a/reactos/base/applications/cmdutils/xcopy/De.rc b/reactos/base/applications/cmdutils/xcopy/De.rc
index 3d15e780f6e..cd6e1b91384 100644
--- a/reactos/base/applications/cmdutils/xcopy/De.rc
+++ b/reactos/base/applications/cmdutils/xcopy/De.rc
@@ -80,4 +80,3 @@ Mit:\n\
\t\tQuelldateien kopiert, die neuer sind als die Zieldatei\n\n"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/cmdutils/xcopy/Fr.rc b/reactos/base/applications/cmdutils/xcopy/Fr.rc
index b4e387eb17c..047b4b3f739 100644
--- a/reactos/base/applications/cmdutils/xcopy/Fr.rc
+++ b/reactos/base/applications/cmdutils/xcopy/Fr.rc
@@ -81,4 +81,3 @@ où :\n\
\t\tque le fichier source\n\n"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/cmdutils/xcopy/It.rc b/reactos/base/applications/cmdutils/xcopy/It.rc
new file mode 100644
index 00000000000..258cb3f4a7b
--- /dev/null
+++ b/reactos/base/applications/cmdutils/xcopy/It.rc
@@ -0,0 +1,83 @@
+/*
+ * XCOPY - Wine-compatible xcopy program
+ * Italian language support
+ *
+ * Copyright (C) 2010 Luca Bennati
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "xcopy.h"
+
+/*UTF-8*/
+#pragma code_page(65001)
+
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+{
+ STRING_INVPARMS, "Numero non valido di parametri - Digita xcopy /? per l'aiuto\n"
+ STRING_INVPARM, "Parametro '%s' non valido - Digita xcopy /? per l'aiuto\n"
+ STRING_PAUSE, "Premi Invio per iniziare a copiare\n"
+ STRING_SIMCOPY, "%d file(s) sarebbero copiati\n"
+ STRING_COPY, "%d file(s) copiati\n"
+ STRING_QISDIR, "'%s' è il nome di un file o una cartella\n" \
+ "sull'obiettivo?\n" \
+ "(F - File, C - Cartella)\n"
+ STRING_SRCPROMPT,"%s? (Sì|No)\n"
+ STRING_OVERWRITE,"Sovrascrivere %s? (Sì|No|Tutti)\n"
+ STRING_COPYFAIL, "La copia di '%s' in '%s' è fallita con r/c %d\n"
+ STRING_OPENFAIL, "Impossibile aprire '%s'\n"
+ STRING_READFAIL, "Errore durante la lettura di '%s'\n"
+ STRING_YES_CHAR, "S"
+ STRING_NO_CHAR, "N"
+ STRING_ALL_CHAR, "T"
+ STRING_FILE_CHAR,"F"
+ STRING_DIR_CHAR, "C"
+
+ STRING_HELP,
+"XCOPY - Copia file(s) e alberi di cartelle sorgenti in una destinazione\n\
+\n\
+Sintassi:\n\
+XCOPY sorgente [destinazione] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
+\t [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
+\n\
+Dove:\n\
+\n\
+[/I] Assumi una cartella se la destinazione non esiste e sono copiati 2 o\n\
+\tpiù files\n\
+[/S] Copia le cartelle e le sottocartelle\n\
+[/E] Copia le cartelle e le sottocartelle, includendo quelle vuote\n\
+[/Q] Non mostrare i nomi durante la copia, modalità silenziosa.\n\
+[/F] Mostra i nomi completi della sorgente e della destinazione durante la copia\n\
+[/L] Simula l'operazione, mostrando i nome che sarebbero copiati\n\
+[/W] Prompts before beginning the copy operation\n\
+[/T] Crea la struttura di cartelle vuote ma non copia i files\n\
+[/Y] Disabilita le conferme quando sono sovrascritti files\n\
+[/-Y] Abilita le conferme quando sono sovrascritti files\n\
+[/P] Chiede conferma per ogni file sorgente prima di copiare\n\
+[/N] Copia usando gli short names\n\
+[/U] Copia solo files che sono già presenti nella destinazione\n\
+[/R] Sovrascrivi ogni file che abbia l'attributo Sola Lettura\n\
+[/H] Includi files nascosti e di sistema nella copia\n\
+[/C] Continua anche se accade un errore durante la copia\n\
+[/A] Copia solo files che abbiano l'attributo Archivio\n\
+[/M] Copia solo files che abbiano l'attributo Archivio, rimuovendo\n\
+\tl'attributo\n\
+[/D | /D:m-g-a] Copia i nuovi files o quelli modificati dopo la data fornita.\n\
+\t\tSe nessuna data è stata fornita, copia solo se la destinazione è più vecchia\n\
+\t\tdella sorgente\n\n"
+
+}
diff --git a/reactos/base/applications/cmdutils/xcopy/Ja.rc b/reactos/base/applications/cmdutils/xcopy/Ja.rc
index 1c4fe12b406..38487af8256 100644
--- a/reactos/base/applications/cmdutils/xcopy/Ja.rc
+++ b/reactos/base/applications/cmdutils/xcopy/Ja.rc
@@ -81,4 +81,3 @@ XCOPY 送り元 [送り先] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
\t\tコピー先がコピー元より古いファイルだけコピーします。\n\n"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/cmdutils/xcopy/Lt.rc b/reactos/base/applications/cmdutils/xcopy/Lt.rc
index f1254b61921..9d431de08fa 100644
--- a/reactos/base/applications/cmdutils/xcopy/Lt.rc
+++ b/reactos/base/applications/cmdutils/xcopy/Lt.rc
@@ -81,4 +81,3 @@ Kur:\n\
\t\tsenesnis už šaltinio failą\n\n"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/cmdutils/xcopy/Nl.rc b/reactos/base/applications/cmdutils/xcopy/Nl.rc
index 868475e958b..4f5dee58b59 100644
--- a/reactos/base/applications/cmdutils/xcopy/Nl.rc
+++ b/reactos/base/applications/cmdutils/xcopy/Nl.rc
@@ -79,4 +79,3 @@ Parameters:\n\
\t\tdatum. Als geen detum wordt gegeven, copiëer alleen als bron nieuwer is.\n\n"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/cmdutils/xcopy/Ru.rc b/reactos/base/applications/cmdutils/xcopy/Ru.rc
index 4339e80dc72..154c999d357 100644
--- a/reactos/base/applications/cmdutils/xcopy/Ru.rc
+++ b/reactos/base/applications/cmdutils/xcopy/Ru.rc
@@ -84,4 +84,3 @@ XCOPY source [dest] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
после указанной даты. Если дата не указана, копирует только\n\
те файлы, которые новее в исходной папке.\n"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/cmdutils/xcopy/Si.rc b/reactos/base/applications/cmdutils/xcopy/Si.rc
index 8e45d498b99..1013837f402 100644
--- a/reactos/base/applications/cmdutils/xcopy/Si.rc
+++ b/reactos/base/applications/cmdutils/xcopy/Si.rc
@@ -80,4 +80,3 @@ Where:\n\
\t\tod izvora\n\n"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/cmdutils/xcopy/Uk.rc b/reactos/base/applications/cmdutils/xcopy/Uk.rc
new file mode 100644
index 00000000000..6d59e1bfac6
--- /dev/null
+++ b/reactos/base/applications/cmdutils/xcopy/Uk.rc
@@ -0,0 +1,84 @@
+/*
+ * XCOPY - Wine-compatible xcopy program
+ * Ukrainian language support
+ *
+ * Copyright (C) 2007 J. Edmeades
+ * Copyright (C) 2010 I. Paliychuk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "xcopy.h"
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+{
+ STRING_INVPARMS, "Невірна кількість параметрів - Введіть xcopy /? для довідки\n"
+ STRING_INVPARM, "Невірний параметр '%s' - Введіть xcopy /? для довідки\n"
+ STRING_PAUSE, "Натисніть щоб почати копіювання\n"
+ STRING_SIMCOPY, "%d файл(ів) буде скопійовано\n"
+ STRING_COPY, "%d файл(ів) скопійовано\n"
+ STRING_QISDIR, "'%s' є файлом чи директорією\n" \
+ "on the target?\n" \
+ "(F - Файл, D - Директорія)\n"
+ STRING_SRCPROMPT,"%s? (Yes|No)\n"
+ STRING_OVERWRITE,"Переписати %s? (Yes|No|All)\n"
+ STRING_COPYFAIL, "Під час копіювання '%s' в '%s' сталась помилка r/c %d\n"
+ STRING_OPENFAIL, "Не вдалось відкрити '%s'\n"
+ STRING_READFAIL, "Помилка читання '%s'\n"
+ STRING_YES_CHAR, "Y"
+ STRING_NO_CHAR, "N"
+ STRING_ALL_CHAR, "A"
+ STRING_FILE_CHAR,"F"
+ STRING_DIR_CHAR, "D"
+
+ STRING_HELP,
+"XCOPY - Копіює файли та дерева директорій за призначенням\n\
+\n\
+Syntax:\n\
+XCOPY source [dest] [/I] [/S] [/Q] [/F] [/L] [/W] [/T] [/N] [/U]\n\
+\t [/R] [/H] [/C] [/P] [/A] [/M] [/E] [/D] [/Y] [/-Y]\n\
+\n\
+Where:\n\
+\n\
+[/I] Assume directory if destination does not exist and copying 2 or\n\
+\tmore files\n\
+[/S] Копіює директорії та піддиректорії\n\
+[/E] Копіює директорії та піддиректорії, включно з порожніми\n\
+[/Q] Do not list names during copy, ie quiet.\n\
+[/F] Під час копіювання відображає повні імена початкових і кінцевих файлів\n\
+[/L] Simulate operation, showing names which would be copied\n\
+[/W] Питає підтвердження перед початком копіювання\n\
+[/T] Створює структуру каталогів але не копіює файли\n\
+[/Y] Suppress prompting when overwriting files\n\
+[/-Y] Питає підтвердження на перезапис файлів\n\
+[/P] Prompts on each source file before copying\n\
+[/N] Копіює, використовуючи короткі імена\n\
+[/U] Copy only files which already exist in destination\n\
+[/R] Перезаписує файли, доступні лише для читання\n\
+[/H] Include hidden and system files in the copy\n\
+[/C] Продовжує роботу, навіть якщо при копіюванні виникла помилка\n\
+[/A] Копіює лише файли з властивістю АРХІВНИЙ\n\
+[/M] Копіює лише файли з властивістю АРХІВНИЙ, видаляє\n\
+\властивість АРХІВНИЙ\n\
+[/D | /D:m-d-y] Копіює лише нові файли або ті, які були змінені після вказаної дати.\n\
+\t\tЯкщо дата не вказана, only copy if destination is older\n\
+\t\tthan source\n\n"
+
+}
diff --git a/reactos/base/applications/cmdutils/xcopy/rsrc.rc b/reactos/base/applications/cmdutils/xcopy/rsrc.rc
index 13cd86fcd57..b82341cda08 100644
--- a/reactos/base/applications/cmdutils/xcopy/rsrc.rc
+++ b/reactos/base/applications/cmdutils/xcopy/rsrc.rc
@@ -27,15 +27,19 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#include
#include "Da.rc"
-#include "De.rc"
#include "En.rc"
-#include "Fr.rc"
-#include "Ja.rc"
#include "Ko.rc"
-#include "Lt.rc"
-#include "Nl.rc"
#include "No.rc"
#include "Pl.rc"
#include "Pt.rc"
+
+/* UTF-8 */
+#include "De.rc"
+#include "Fr.rc"
+#include "It.rc"
+#include "Ja.rc"
+#include "Lt.rc"
+#include "Nl.rc"
#include "Ru.rc"
#include "Si.rc"
+#include "Uk.rc"
diff --git a/reactos/base/applications/cmdutils/xcopy/xcopy.rbuild b/reactos/base/applications/cmdutils/xcopy/xcopy.rbuild
index 2e3e1a9809d..437fa46bf63 100644
--- a/reactos/base/applications/cmdutils/xcopy/xcopy.rbuild
+++ b/reactos/base/applications/cmdutils/xcopy/xcopy.rbuild
@@ -1,5 +1,5 @@
-
+
.
wine
diff --git a/reactos/base/applications/downloader/lang/de-DE.rc b/reactos/base/applications/downloader/lang/de-DE.rc
index 087a14c6325..0b29796491c 100644
--- a/reactos/base/applications/downloader/lang/de-DE.rc
+++ b/reactos/base/applications/downloader/lang/de-DE.rc
@@ -15,11 +15,11 @@ STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU
CAPTION "Einstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Download Ordner:", -1, 6, 10, 140, 8
+ LTEXT "Downloadordner:", -1, 6, 10, 140, 8
EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP
PUSHBUTTON "W&hle...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14
AUTOCHECKBOX "&Installationsdateien nach dem Setup lschen", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP
- LTEXT "Update Server:", -1, 6, 55, 140, 8
+ LTEXT "Updateserver:", -1, 6, 55, 140, 8
EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP
DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15
PUSHBUTTON "&Abbrechen", IDCANCEL, 207, 90, 54, 15
@@ -31,7 +31,7 @@ BEGIN
IDS_WELCOME_TITLE "Willkommen im ReactOS Downloader"
IDS_WELCOME "Bitte whlen Sie links eine Kategorie. Dies ist Version 1.1."
IDS_NO_APP_TITLE "Keine Anwendung ausgewhlt"
- IDS_NO_APP "Bitte whlen Sie eine Anwendung, bevor Sie die Download-Schaltflche bettigen. Wenn Sie Hilfe bentigen, drcken Sie die Hilfe-Schaltflche in der oberen rechten Ecke."
+ IDS_NO_APP "Bitte whlen Sie eine Anwendung aus, bevor Sie die Download-Schaltflche bettigen. Wenn Sie Hilfe bentigen, drcken Sie die Hilfe-Schaltflche in der oberen rechten Ecke."
IDS_UPDATE_TITLE "Update"
IDS_UPDATE "Diese Funktion wurde noch nicht implementiert."
IDS_HELP_TITLE "Hilfe"
@@ -41,20 +41,20 @@ BEGIN
IDS_CHOOSE_SUB "Bitte whlen Sie eine Unterkategorie."
IDS_CHOOSE_CATEGORY "Bitte whlen Sie eine Kategorie."
IDS_CHOOSE_BOTH "Bitte whlen Sie eine Unterkategorie oder eine Anwendung."
- IDS_XMLERROR_1 "XML Datei nicht gefunden!"
- IDS_XMLERROR_2 "XML Datei kann nicht verarbeitet werden!"
+ IDS_XMLERROR_1 "XML-Datei nicht gefunden!"
+ IDS_XMLERROR_2 "XML-Datei kann nicht verarbeitet werden!"
IDS_DOWNLOAD_ERROR "Die Datei konnte nicht heruntergeladen werden.\nBitte prfen sie, ob eine Verbindung zum Internet besteht."
IDS_VERSION "Version: "
IDS_LICENCE "Lizenz: "
IDS_MAINTAINER "Maintainer: "
IDS_APPS_TITLE "Anwendungen"
IDS_CATS_TITLE "Kategorien"
- IDS_CHOOSE_FOLDER "Bitte whlen Sie den Ordner..."
+ IDS_CHOOSE_FOLDER "Bitte whlen Sie den Ordner aus..."
IDS_NOTCREATE_REGKEY "Registryschlssel knnte nicht erstellt werden."
IDS_DOWNLOAD_FOLDER "Downloader"
IDS_UNABLECREATE_FOLDER "Es konnte kein Ordner mit diesem Namen erstellt werden!"
IDS_UPDATE_URL "http://svn.reactos.org"
- IDS_INSTALL_DEP "%s wird bentigt um %s ausfhren zu knnen. Soll %s jetzt installiert werden?"
+ IDS_INSTALL_DEP "%s wird bentigt, um %s ausfhren zu knnen. Soll %s jetzt installiert werden?"
TTT_HELPBUTTON "Hilfe ber den Downloader"
TTT_UPDATEBUTTON "Noch nicht vorhanden"
TTT_PROFBUTTON "Konfiguriert den Downloader"
diff --git a/reactos/base/applications/dxdiag/dxdiag.c b/reactos/base/applications/dxdiag/dxdiag.c
index 3985fae208d..2c9bc701baf 100644
--- a/reactos/base/applications/dxdiag/dxdiag.c
+++ b/reactos/base/applications/dxdiag/dxdiag.c
@@ -126,7 +126,6 @@ InitializeTabCtrl(HWND hwndDlg, PDXDIAG_CONTEXT pContext)
pContext->hDialogs[4] = CreateDialogParamW(hInst, MAKEINTRESOURCEW(IDD_HELP_DIALOG), hTabCtrlWnd, HelpPageWndProc, (LPARAM)pContext);
/* insert tab ctrl items */
-
InsertTabCtrlItem(hTabCtrlWnd, 0, MAKEINTRESOURCEW(IDS_SYSTEM_DIALOG));
InitializeDisplayAdapters(pContext);
InitializeDirectSoundPage(pContext);
@@ -188,8 +187,19 @@ DxDiagWndProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
if (LOWORD(wParam) == IDC_BUTTON_NEXT)
{
- //TODO
- /* handle next button */
+ INT CurSel;
+
+ /* retrieve current page */
+ CurSel = TabCtrl_GetCurSel(hTabCtrlWnd);
+ CurSel++;
+
+ /* enable/disable next button */
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_NEXT),
+ (CurSel != TabCtrl_GetItemCount(hTabCtrlWnd) - 1));
+
+ /* switch to next page */
+ SendMessageW(hTabCtrlWnd, TCM_SETCURSEL, CurSel, 0L);
+
return TRUE;
}
@@ -210,6 +220,12 @@ DxDiagWndProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
pnmh = (LPNMHDR)lParam;
if ((pnmh->hwndFrom == hTabCtrlWnd) && (pnmh->idFrom == IDC_TAB_CONTROL) && (pnmh->code == TCN_SELCHANGE))
{
+ INT CurSel = TabCtrl_GetCurSel(hTabCtrlWnd);
+
+ /* enable/disable next button */
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BUTTON_NEXT),
+ (CurSel != TabCtrl_GetItemCount(hTabCtrlWnd) - 1));
+
TabCtrl_OnSelChange(pContext);
}
break;
diff --git a/reactos/base/applications/dxdiag/lang/de-DE.rc b/reactos/base/applications/dxdiag/lang/de-DE.rc
index 8a572b65576..e79530d5bed 100644
--- a/reactos/base/applications/dxdiag/lang/de-DE.rc
+++ b/reactos/base/applications/dxdiag/lang/de-DE.rc
@@ -148,9 +148,9 @@ IDD_INPUT_DIALOG DIALOGEX DISCARDABLE 0, 0, 462, 220
STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
FONT 8, "MS Shell Dlg"
BEGIN
- GROUPBOX "DirectInput Gerte", -1, 10, 10, 452, 80
+ GROUPBOX "DirectInput-Gerte", -1, 10, 10, 452, 80
CONTROL "", IDC_LIST_DEVICE, "SysListView32", LVS_REPORT | WS_CHILD | WS_BORDER | WS_TABSTOP, 20, 22, 432, 60
- GROUPBOX "Eingabebezogene Gerte", -1, 10, 100, 452, 60
+ GROUPBOX "Eingabegerte", -1, 10, 100, 452, 60
CONTROL "", IDC_TREE_PORT, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_DISABLEDRAGDROP | TVS_SHOWSELALWAYS | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 20, 112, 432, 40, 0x00000200
GROUPBOX "Hinweis", -1, 10, 170, 452, 50
EDITTEXT IDC_RICH_INFO, 20, 182, 432, 30, WS_DISABLED | WS_TABSTOP
@@ -172,7 +172,7 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_MAIN_DIALOG "ReactX Diagnoseprogramm"
+ IDS_MAIN_DIALOG "ReactX-Diagnoseprogramm"
IDS_SYSTEM_DIALOG "System"
IDS_DISPLAY_DIALOG "Anzeige"
IDS_SOUND_DIALOG "Sound"
@@ -193,7 +193,7 @@ BEGIN
IDS_DEVICE_CONTROLLER "Controllererkennung"
IDS_DEVICE_MANUFACTURER "Herstellererkennung"
IDS_DEVICE_PRODUCT "Produkterkennung"
- IDS_DEVICE_FORCEFEEDBACK "Force Feedback-Treiber"
+ IDS_DEVICE_FORCEFEEDBACK "Force-Feedback-Treiber"
IDS_NOT_APPLICABLE "Nicht zutreffend"
IDS_OPTION_YES "Ja"
IDS_DIRECTPLAY_COL_NAME1 "Name"
@@ -204,20 +204,20 @@ BEGIN
IDS_DIRECTPLAY8_SERIALSP "DirectPlay8 serieller Dienstanbieter"
IDS_DIRECTPLAY8_IPXSP "DirectPlay8-IPX-Dienstanbieter"
IDS_DIRECTPLAY8_TCPSP "DirectPlay8-TCP/IP-Dienstanbieter"
- IDS_DIRECTPLAY_TCPCONN "TCP/IP Verbindung fr DirectPlay"
- IDS_DIRECTPLAY_IPXCONN "IPX Verbindung fr DirectPlay"
+ IDS_DIRECTPLAY_TCPCONN "TCP/IP-Verbindung fr DirectPlay"
+ IDS_DIRECTPLAY_IPXCONN "IPX-Verbindung fr DirectPlay"
IDS_DIRECTPLAY_MODEMCONN "Modemverbindung fr DirectPlay"
IDS_DIRECTPLAY_SERIALCONN "Serielle Verbindung fr DirectPlay"
IDS_REG_SUCCESS "OK"
IDS_REG_FAIL "Fehler"
- IDS_DDTEST_ERROR "Test failed!"
- IDS_DDTEST_DESCRIPTION "This will start DirecDraw interface test. Continue?"
- IDS_DDPRIMARY_DESCRIPTION "This test will use DirectDraw to draw on primary surface. Black and white rectangles should be drawn. Continue?"
- IDS_DDPRIMARY_RESULT "Did you see black and white rectangles?"
- IDS_DDOFFSCREEN_DESCRIPTION "This test will use DirectDraw to draw in an offscreen buffer. Moving white rectangle should be drawn. Continue?"
- IDS_DDOFFSCREEN_RESULT "Did you see white moving reactangle?"
- IDS_DDFULLSCREEN_DESCRIPTION "This test will use DirectDraw to draw in a fullscreen mode. Moving white rectangle should be drawn. Continue?"
- IDS_DDFULLSCREEN_RESULT "Did you see white moving reactangle in a fullscreen mode?"
+ IDS_DDTEST_ERROR "Test fehlgeschlagen!"
+ IDS_DDTEST_DESCRIPTION "Dies wird den DirectDraw-Interfacetest starten. Fortfahren?"
+ IDS_DDPRIMARY_DESCRIPTION "Dieser Test wird DirectDraw benutzen, um auf Ihrem primren Bildschirm etwas darzustellen. Schwarze und weie Rechtecke sollten zu sehen sein. Fortfahren?"
+ IDS_DDPRIMARY_RESULT "Haben Sie schwarze und weie Rechtecke gesehen?"
+ IDS_DDOFFSCREEN_DESCRIPTION "Dieser Test wird DirectDraw benutzen, um im Offscreen-Buffer zu zeichnen. Ein bewegtes weies Rechteck sollte zu sehen sein. Fortfahren?"
+ IDS_DDOFFSCREEN_RESULT "Haben Sie das bewegte weie Rechteck gesehen?"
+ IDS_DDFULLSCREEN_DESCRIPTION "Dieser Test wird DirectDraw benutzen, um im Vollbildmodus zu zeichnen. Ein bewegtes weies Rechteck sollte zu sehen sein. Fortfahren?"
+ IDS_DDFULLSCREEN_RESULT "Haben Sie das bewegte weie Rechteck im Vollbildmodus gesehen?"
IDS_FORMAT_ADAPTER_MEM "%u MB"
IDS_FORMAT_ADAPTER_MODE "%04u x %04u (%u bit)(%uHz)"
IDS_OPTION_NO "Nein"
diff --git a/reactos/base/applications/dxdiag/resource.h b/reactos/base/applications/dxdiag/resource.h
index 03917dbc5e5..e9118d13570 100644
--- a/reactos/base/applications/dxdiag/resource.h
+++ b/reactos/base/applications/dxdiag/resource.h
@@ -1,5 +1,4 @@
-#ifndef RESOURCE_H__
-#define RESOURCE_H__
+#pragma once
/* dialog constants */
#define IDD_MAIN_DIALOG 100
@@ -142,6 +141,3 @@
/* icon resource constants */
#define IDI_APPICON 20000
-
-
-#endif
diff --git a/reactos/base/applications/dxdiag/system.c b/reactos/base/applications/dxdiag/system.c
index 33c1f9d5bde..311fc03cdf7 100644
--- a/reactos/base/applications/dxdiag/system.c
+++ b/reactos/base/applications/dxdiag/system.c
@@ -17,7 +17,6 @@ GetRegValue(HKEY hBaseKey, LPWSTR SubKey, LPWSTR ValueName, DWORD Type, LPWSTR R
DWORD dwType;
DWORD dwSize;
-
if (RegOpenKeyExW(hBaseKey, SubKey, 0, KEY_QUERY_VALUE, &hKey) != ERROR_SUCCESS)
return FALSE;
@@ -25,10 +24,10 @@ GetRegValue(HKEY hBaseKey, LPWSTR SubKey, LPWSTR ValueName, DWORD Type, LPWSTR R
res = RegQueryValueExW(hKey, ValueName, NULL, &dwType, (LPBYTE)Result, &dwSize);
RegCloseKey(hKey);
- if (dwType != Type)
+ if (res != ERROR_SUCCESS)
return FALSE;
- if (res != ERROR_SUCCESS)
+ if (dwType != Type)
return FALSE;
if (Size == sizeof(DWORD))
diff --git a/reactos/base/applications/extrac32/extrac32.c b/reactos/base/applications/extrac32/extrac32.c
new file mode 100644
index 00000000000..fc1ae1c94ae
--- /dev/null
+++ b/reactos/base/applications/extrac32/extrac32.c
@@ -0,0 +1,179 @@
+/*
+ * Extract - Wine-compatible program for extract *.cab files.
+ *
+ * Copyright 2007 Etersoft (Lyutin Anatoly)
+ * Copyright 2009 Ilya Shpigor
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include
+#include
+#include
+#include
+
+#include "wine/unicode.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(extrac32);
+
+static BOOL force_mode;
+
+static UINT WINAPI ExtCabCallback(PVOID Context, UINT Notification, UINT_PTR Param1, UINT_PTR Param2)
+{
+ FILE_IN_CABINET_INFO_W *pInfo;
+ FILEPATHS_W *pFilePaths;
+
+ switch(Notification)
+ {
+ case SPFILENOTIFY_FILEINCABINET:
+ pInfo = (FILE_IN_CABINET_INFO_W*)Param1;
+ lstrcpyW(pInfo->FullTargetName, (LPCWSTR)Context);
+ lstrcatW(pInfo->FullTargetName, pInfo->NameInCabinet);
+ return FILEOP_DOIT;
+ case SPFILENOTIFY_FILEEXTRACTED:
+ pFilePaths = (FILEPATHS_W*)Param1;
+ WINE_TRACE("Extracted %s\n", wine_dbgstr_w(pFilePaths->Target));
+ return NO_ERROR;
+ }
+ return NO_ERROR;
+}
+
+static void extract(LPCWSTR cabfile, LPWSTR destdir)
+{
+ if (!SetupIterateCabinetW(cabfile, 0, ExtCabCallback, destdir))
+ WINE_ERR("Could not extract cab file %s\n", wine_dbgstr_w(cabfile));
+}
+
+static void copy_file(LPCWSTR source, LPCWSTR destination)
+{
+ WCHAR destfile[MAX_PATH];
+
+ /* append source filename if destination is a directory */
+ if (PathIsDirectoryW(destination))
+ {
+ PathCombineW(destfile, destination, PathFindFileNameW(source));
+ destination = destfile;
+ }
+
+ if (PathFileExistsW(destination) && !force_mode)
+ {
+ static const WCHAR overwriteMsg[] = {'O','v','e','r','w','r','i','t','e',' ','"','%','s','"','?',0};
+ static const WCHAR titleMsg[] = {'E','x','t','r','a','c','t',0};
+ WCHAR msg[MAX_PATH+100];
+ snprintfW(msg, sizeof(msg)/sizeof(msg[0]), overwriteMsg, destination);
+ if (MessageBoxW(NULL, msg, titleMsg, MB_YESNO | MB_ICONWARNING) != IDYES)
+ return;
+ }
+
+ WINE_TRACE("copying %s to %s\n", wine_dbgstr_w(source), wine_dbgstr_w(destination));
+ CopyFileW(source, destination, FALSE);
+}
+
+int PASCAL wWinMain(HINSTANCE hInstance, HINSTANCE prev, LPWSTR cmdline, int show)
+{
+ LPWSTR *argv;
+ int argc;
+ int i;
+ WCHAR check, cmd = 0;
+ WCHAR path[MAX_PATH];
+ WCHAR backslash[] = {'\\',0};
+ LPCWSTR cabfile = NULL;
+
+ path[0] = 0;
+ argv = CommandLineToArgvW(cmdline, &argc);
+
+ if(!argv)
+ {
+ WINE_ERR("Bad command line arguments\n");
+ return 0;
+ }
+
+ /* Parse arguments */
+ for(i = 0; i < argc; i++)
+ {
+ /* Get cabfile */
+ if (argv[i][0] != '/')
+ {
+ if (!cabfile)
+ {
+ cabfile = argv[i];
+ continue;
+ } else
+ break;
+ }
+ /* Get parameters for commands */
+ check = toupperW( argv[i][1] );
+ switch(check)
+ {
+ case 'A':
+ WINE_FIXME("/A not implemented\n");
+ break;
+ case 'Y':
+ force_mode = TRUE;
+ break;
+ case 'L':
+ if ((i + 1) >= argc) return 0;
+ if (!GetFullPathNameW(argv[++i], MAX_PATH, path, NULL))
+ return 0;
+ break;
+ case 'C':
+ if (cmd) return 0;
+ cmd = check;
+ break;
+ case 'E':
+ case 'D':
+ if (cmd) return 0;
+ cmd = check;
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ if (!cabfile)
+ return 0;
+
+ if (cmd == 'C')
+ {
+ if ((i + 1) != argc) return 0;
+ if (!GetFullPathNameW(argv[i], MAX_PATH, path, NULL))
+ return 0;
+ }
+
+ if (!path[0])
+ GetCurrentDirectoryW(MAX_PATH, path);
+
+ lstrcatW(path, backslash);
+
+ /* Execute the specified command */
+ switch(cmd)
+ {
+ case 'C':
+ /* Copy file */
+ copy_file(cabfile, path);
+ break;
+ case 'E':
+ /* Extract CAB archive */
+ extract(cabfile, path);
+ break;
+ case 0:
+ case 'D':
+ /* Display CAB archive */
+ WINE_FIXME("/D not implemented\n");
+ break;
+ }
+ return 0;
+}
diff --git a/reactos/base/applications/extrac32/extrac32.rbuild b/reactos/base/applications/extrac32/extrac32.rbuild
new file mode 100644
index 00000000000..24532ddfd3d
--- /dev/null
+++ b/reactos/base/applications/extrac32/extrac32.rbuild
@@ -0,0 +1,9 @@
+
+ .
+ wine
+ shell32
+ setupapi
+ shlwapi
+ user32
+ extrac32.c
+
diff --git a/reactos/base/applications/fontview/display.h b/reactos/base/applications/fontview/display.h
index aafdea8e68c..9d36e6caddf 100644
--- a/reactos/base/applications/fontview/display.h
+++ b/reactos/base/applications/fontview/display.h
@@ -1,5 +1,4 @@
-#ifndef _DISPLAY_H
-#define _DISPLAY_H
+#pragma once
/* Messages for the display class */
#define FVM_SETTYPEFACE WM_USER
@@ -14,5 +13,3 @@ extern const WCHAR g_szFontDisplayClassName[];
/* Public function */
BOOL Display_InitClass(HINSTANCE hInstance);
-
-#endif // _DISPLAY_H
diff --git a/reactos/base/applications/fontview/lang/de-DE.rc b/reactos/base/applications/fontview/lang/de-DE.rc
index 2197a7ffaec..28cc675ec79 100644
--- a/reactos/base/applications/fontview/lang/de-DE.rc
+++ b/reactos/base/applications/fontview/lang/de-DE.rc
@@ -8,7 +8,7 @@ BEGIN
IDS_ERROR, "Fehler"
IDS_ERROR_NOMEM, "Es steht nicht gengend Speicher zur Verfgung."
IDS_ERROR_NOFONT, "Die angegebene Datei %1 ist keine gltige Schriftartendatei."
- IDS_ERROR_NOCLASS, "Fehler beim initialisieren der Fensterklasse."
+ IDS_ERROR_NOCLASS, "Fehler beim Initialisieren der Fensterklasse."
IDS_ERROR_BADCMD, "Keine Schriftartendatei angegeben.\nSyntax:\n fontview.exe "
END
diff --git a/reactos/base/applications/games/solitaire/lang/de-DE.rc b/reactos/base/applications/games/solitaire/lang/de-DE.rc
index 5e8f44457f4..9ecc79e5c37 100644
--- a/reactos/base/applications/games/solitaire/lang/de-DE.rc
+++ b/reactos/base/applications/games/solitaire/lang/de-DE.rc
@@ -57,7 +57,7 @@ BEGIN
IDS_SOL_NAME "Solitr"
IDS_SOL_ABOUT "Solitr von J Brown\n\nCardLib version 1.0."
IDS_SOL_QUIT "Laufendes Spiel beenden?"
- IDS_SOL_WIN "Glckwunsch, Sie haben Gewonnen!"
+ IDS_SOL_WIN "Glckwunsch, Sie haben gewonnen!"
IDS_SOL_DEAL "Neu geben?"
END
diff --git a/reactos/base/applications/games/solitaire/solitaire.h b/reactos/base/applications/games/solitaire/solitaire.h
index 14eaebce099..3b1e1bbe1e8 100644
--- a/reactos/base/applications/games/solitaire/solitaire.h
+++ b/reactos/base/applications/games/solitaire/solitaire.h
@@ -1,5 +1,4 @@
-#ifndef SOLITAIRE_INCLUDED
-#define SOLITAIRE_INCLUDED
+#pragma once
extern CardWindow SolWnd;
extern TCHAR szAppName[];
@@ -54,5 +53,3 @@ void CARDLIBPROC DeckClickProc(CardRegion &stackobj, int iNumClicked);
void CARDLIBPROC PileDblClickProc(CardRegion &stackobj, int iNumClicked);
void CARDLIBPROC PileRemoveProc(CardRegion &stackobj, int iRemoved);
-
-#endif
diff --git a/reactos/base/applications/games/spider/lang/de-DE.rc b/reactos/base/applications/games/spider/lang/de-DE.rc
index b2bc790b06c..5b353b17263 100644
--- a/reactos/base/applications/games/spider/lang/de-DE.rc
+++ b/reactos/base/applications/games/spider/lang/de-DE.rc
@@ -54,7 +54,7 @@ BEGIN
IDS_SPI_NAME "Spider"
IDS_SPI_ABOUT "Spider Solitaire von Gregor Schneider\n\nCardLib Version 1.0"
IDS_SPI_QUIT "Laufendes Spiel beenden?"
- IDS_SPI_WIN "Gratulation, Sie haben gewonnen!"
+ IDS_SPI_WIN "Glckwunsch, Sie haben gewonnen!"
IDS_SPI_DEAL "Neu geben?"
END
diff --git a/reactos/base/applications/games/spider/spider.h b/reactos/base/applications/games/spider/spider.h
index 89b64ae98c2..caff04abead 100644
--- a/reactos/base/applications/games/spider/spider.h
+++ b/reactos/base/applications/games/spider/spider.h
@@ -1,5 +1,4 @@
-#ifndef SOLITAIRE_INCLUDED
-#define SOLITAIRE_INCLUDED
+#pragma once
#define DIFFICULTY_ONE_COLOR 1
#define DIFFICULTY_TWO_COLORS 2
@@ -38,5 +37,3 @@ void CARDLIBPROC DeckClickProc(CardRegion &stackobj, int iNumClicked);
void CARDLIBPROC PileDblClickProc(CardRegion &stackobj, int iNumClicked);
void CARDLIBPROC PileRemoveProc(CardRegion &stackobj, int iRemoved);
-
-#endif
diff --git a/reactos/base/applications/games/winemine/lang/de-DE.rc b/reactos/base/applications/games/winemine/lang/de-DE.rc
index 4c4e59d1457..69676c41f56 100644
--- a/reactos/base/applications/games/winemine/lang/de-DE.rc
+++ b/reactos/base/applications/games/winemine/lang/de-DE.rc
@@ -56,7 +56,7 @@ STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHEL
CAPTION "Glckwunsch!"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Bitte geben Sie ihren Namen ein", IDIGNORE, 25, 10, 150, 10
+ LTEXT "Bitte geben Sie Ihren Namen ein", IDIGNORE, 25, 10, 150, 10
EDITTEXT IDC_EDITNAME, 25, 20, 110, 12
DEFPUSHBUTTON "OK", IDOK, 60, 40, 40, 15
END
diff --git a/reactos/base/applications/magnify/magnify.rbuild b/reactos/base/applications/magnify/magnify.rbuild
index c891a1e14d1..995437d3826 100644
--- a/reactos/base/applications/magnify/magnify.rbuild
+++ b/reactos/base/applications/magnify/magnify.rbuild
@@ -1,5 +1,5 @@
-
+
.
user32
diff --git a/reactos/base/applications/mmc/precomp.h b/reactos/base/applications/mmc/precomp.h
index 460b8aef130..ad39a6ff1c9 100644
--- a/reactos/base/applications/mmc/precomp.h
+++ b/reactos/base/applications/mmc/precomp.h
@@ -1,5 +1,4 @@
-#ifndef __PRECOMP_H
-#define __PRECOMP_H
+#pragma once
#include
#include
@@ -34,5 +33,3 @@ LoadAndFormatString(IN HINSTANCE hInstance,
extern HINSTANCE hAppInstance;
extern HANDLE hAppHeap;
-
-#endif /* __PRECOMP_H */
diff --git a/reactos/base/applications/mmc/resource.h b/reactos/base/applications/mmc/resource.h
index 37f42f5af71..65fbe6eac65 100644
--- a/reactos/base/applications/mmc/resource.h
+++ b/reactos/base/applications/mmc/resource.h
@@ -1,5 +1,4 @@
-#ifndef __RESOURCE_H
-#define __RESOURCE_H
+#pragma once
#define IDS_APPTITLE 101
#define IDS_CONSOLETITLE 102
@@ -10,5 +9,3 @@
#define ID_FILE_EXIT 1001
#define ID_HELP_ABOUT 9001
-
-#endif /* __RESOURCE_H */
diff --git a/reactos/base/applications/mplay32/lang/de-DE.rc b/reactos/base/applications/mplay32/lang/de-DE.rc
index 622fdf6f10f..470413c555e 100644
--- a/reactos/base/applications/mplay32/lang/de-DE.rc
+++ b/reactos/base/applications/mplay32/lang/de-DE.rc
@@ -17,8 +17,8 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_ALL_TYPES_FILTER "Alle Untersttzten (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0"
- IDS_TOOLTIP_PLAY "wiedergabe"
+ IDS_ALL_TYPES_FILTER "Alle untersttzten (*.wav, *.cda, *.midi, *.mid, *.avi)\0*.wav;*.cda;*.midi;*.mid;*.avi\0"
+ IDS_TOOLTIP_PLAY "Wiedergabe"
IDS_TOOLTIP_STOP "Stopp"
IDS_TOOLTIP_EJECT "Auswerfen"
IDS_TOOLTIP_BACKWARD "Zurck"
diff --git a/reactos/base/applications/mplay32/resource.h b/reactos/base/applications/mplay32/resource.h
index f4dfddf95e4..77100332800 100644
--- a/reactos/base/applications/mplay32/resource.h
+++ b/reactos/base/applications/mplay32/resource.h
@@ -1,5 +1,4 @@
-#ifndef __RESOURCE_H_
-#define __RESOURCE_H_
+#pragma once
/* Icons */
#define IDI_MAIN 10
@@ -51,5 +50,3 @@
#define IDC_SEEKBACK 1504
#define IDC_SEEKFORW 1505
#define IDC_FORWARD 1506
-
-#endif /* __RESOURCE_H_ */
diff --git a/reactos/base/applications/msconfig/lang/de-DE.rc b/reactos/base/applications/msconfig/lang/de-DE.rc
index b7dd1ed5b9b..96cb09fd864 100644
--- a/reactos/base/applications/msconfig/lang/de-DE.rc
+++ b/reactos/base/applications/msconfig/lang/de-DE.rc
@@ -83,7 +83,7 @@ BEGIN
PUSHBUTTON "A&ls Standard", IDC_BTN_SET_DEFAULT_BOOT, 120, 65, 63, 12
PUSHBUTTON "Nach &oben", IDC_BTN_MOVE_UP_BOOT_OPTION, 203, 65, 63, 12
PUSHBUTTON "Nach &unten", IDC_BTN_MOVE_DOWN_BOOT_OPTION, 286, 65, 63, 12
- GROUPBOX "Boot Optionen", -1, 10, 80, 250, 90,0,WS_EX_TRANSPARENT
+ GROUPBOX "Bootoptionen", -1, 10, 80, 250, 90,0,WS_EX_TRANSPARENT
CHECKBOX "/SA&FEBOOT", IDC_CBX_SAFE_BOOT, 15, 90, 55, 10
CHECKBOX "/&NOGUIBOOT", IDC_CBX_NO_GUI_BOOT, 15, 105, 60, 10
CHECKBOX "/&BOOTLOG", IDC_CBX_BOOT_LOG, 15, 120, 50, 10
@@ -149,7 +149,7 @@ BEGIN
IDS_TOOLS_CMD_CMD "cmd.exe"
IDS_TOOLS_INFO_NAME "Version"
- IDS_TOOLS_INFO_DESCR "Zeigt die installierte ReactOS Version an."
+ IDS_TOOLS_INFO_DESCR "Zeigt die installierte ReactOS-Version an."
IDS_TOOLS_INFO_CMD "winver.exe"
IDS_TOOLS_REGEDIT_NAME "Registrierungs-Editor"
diff --git a/reactos/base/applications/mscutils/devmgmt/lang/de-DE.rc b/reactos/base/applications/mscutils/devmgmt/lang/de-DE.rc
index a3706603fcf..6e5f6fb4900 100644
--- a/reactos/base/applications/mscutils/devmgmt/lang/de-DE.rc
+++ b/reactos/base/applications/mscutils/devmgmt/lang/de-DE.rc
@@ -51,7 +51,7 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_LICENSE "Dieses Programm ist kostenlos; Sie knnen es frei verteilen mit od. ohne nderungen unter der GNU Lesser General Public License wie es von der Free Software Foundation verffentlicht wurde; entweder Version 2.1 der Lizenz, oder eine sptere Version (ihrer Wahl).\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
+ IDS_LICENSE "Dieses Programm ist kostenlos; Sie knnen es frei verteilen mit od. ohne nderungen unter der GNU Lesser General Public License, wie es von der Free Software Foundation verffentlicht wurde; entweder Version 2.1 der Lizenz, oder eine sptere Version (ihrer Wahl).\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/base/applications/mscutils/servman/lang/de-DE.rc b/reactos/base/applications/mscutils/servman/lang/de-DE.rc
index 7a978d1b3e0..d291a48463d 100644
--- a/reactos/base/applications/mscutils/servman/lang/de-DE.rc
+++ b/reactos/base/applications/mscutils/servman/lang/de-DE.rc
@@ -193,7 +193,7 @@ BEGIN
IDS_NUM_SERVICES "Anzahl der Dienste: %d"
IDS_STOP_DEPENDS "When %s stops, these other services will also stop"
IDS_NO_DEPENDS ""
- IDS_LICENSE "Dieses Programm ist kostenlos; Sie knnen es frei verteilen mit od. ohne nderungen unter der GNU Lesser General Public License wie es von der Free Software Foundation verffentlicht wurde; entweder Version 2.1 der Lizenz, oder eine sptere Version (ihrer Wahl).\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
+ IDS_LICENSE "Dieses Programm ist kostenlos; Sie knnen es frei verteilen mit od. ohne nderungen unter der GNU Lesser General Public License, wie es von der Free Software Foundation verffentlicht wurde; entweder Version 2.1 der Lizenz, oder eine sptere Version (ihrer Wahl).\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/base/applications/mstsc/bsops.h b/reactos/base/applications/mstsc/bsops.h
index 6785c46d1e9..6b596f6cd01 100644
--- a/reactos/base/applications/mstsc/bsops.h
+++ b/reactos/base/applications/mstsc/bsops.h
@@ -18,8 +18,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __BSOPS_MSTSC_H
-#define __BSOPS_MSTSC_H
+#pragma once
int bs_get_pixel(int x, int y);
void bs_set_pixel(int x, int y, int pixel, int rop, int use_clip);
@@ -50,5 +49,3 @@ void bs_patblt(int opcode, int x, int y, int cx, int cy,
int brush_style, char * brush_pattern,
int brush_x_org, int brush_y_org,
int bgcolour, int fgcolour);
-
-#endif /* __BSOPS_MSTSC_H */
diff --git a/reactos/base/applications/mstsc/lang/de-DE.rc b/reactos/base/applications/mstsc/lang/de-DE.rc
index 15508777749..ebfae96f32e 100644
--- a/reactos/base/applications/mstsc/lang/de-DE.rc
+++ b/reactos/base/applications/mstsc/lang/de-DE.rc
@@ -15,18 +15,18 @@ BEGIN
PUSHBUTTON "Speichern unter",IDC_SAVEAS,120,139,55,14
PUSHBUTTON "ffnen...",IDC_OPEN,177,139,50,14
ICON "", IDC_CONNICON, 16,114,20,20
- LTEXT "Die derzeitigen Verbindungseinstellungen speichern oder vohandene Einstellungen laden.",IDC_STATIC,50,115,172,20
+ LTEXT "Die derzeitigen Verbindungseinstellungen speichern oder vorhandene Einstellungen laden.",IDC_STATIC,50,115,172,20
END
IDD_DISPLAY DIALOGEX 0, 0, 242, 175
STYLE DS_SHELLFONT | WS_CHILD
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- GROUPBOX "Remotedesktop Gre",IDC_STATIC,7,7,228,68
+ GROUPBOX "Remotedesktop-Gre",IDC_STATIC,7,7,228,68
GROUPBOX "Farben",IDC_STATIC,7,83,228,85
ICON "", IDC_REMICON, 15,19,20,20
ICON "", IDC_COLORSICON, 15,98,20,20
- LTEXT "Whlen Sie die Bildschirmgre von Ihrem Remote- desktop. Stellen Sie den Regler fr Vollbild nach rechts",IDC_STATIC,53,22,175,21
+ LTEXT "Whlen Sie die Bildschirmgre Ihres Remotedesktops. Stellen Sie den Regler fr Vollbild nach rechts",IDC_STATIC,53,22,175,21
CONTROL "", IDC_GEOSLIDER, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 56, 42, 124, 17
COMBOBOX IDC_BPPCOMBO,56,102,128,80, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP
CONTROL "",IDC_COLORIMAGE,"Static",SS_OWNERDRAW | SS_SUNKEN, 56,121,127,10
@@ -38,7 +38,7 @@ END
IDD_CONNECTDIALOG DIALOGEX 0, 0, 260, 262
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Remotedesktop Verbindung"
+CAPTION "Remotedesktop-Verbindung"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Verbinden",IDOK,147,245,50,14
@@ -58,6 +58,6 @@ BEGIN
IDS_PIXEL "%lux%lu Pixel"
IDS_FULLSCREEN "Vollbild"
IDS_BROWSESERVER ""
- IDS_HEADERTEXT1 "Remote Desktop"
+ IDS_HEADERTEXT1 "Remotedesktop"
IDS_HEADERTEXT2 "Verbindung"
END
diff --git a/reactos/base/applications/mstsc/mstsc.rbuild b/reactos/base/applications/mstsc/mstsc.rbuild
index e2000ef0951..c8ed8e3e571 100644
--- a/reactos/base/applications/mstsc/mstsc.rbuild
+++ b/reactos/base/applications/mstsc/mstsc.rbuild
@@ -1,5 +1,5 @@
-
+
.
user32
diff --git a/reactos/base/applications/mstsc/orders.h b/reactos/base/applications/mstsc/orders.h
index 70a387168e1..2c8f919cfd8 100644
--- a/reactos/base/applications/mstsc/orders.h
+++ b/reactos/base/applications/mstsc/orders.h
@@ -18,8 +18,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __ORDERS_MSTSC_H
-#define __ORDERS_MSTSC_H
+#pragma once
#define RDP_ORDER_STANDARD 0x01
#define RDP_ORDER_SECONDARY 0x02
@@ -369,5 +368,3 @@ typedef struct _RDP_COLCACHE_ORDER
}
RDP_COLCACHE_ORDER;
-
-#endif /* __ORDERS_MSTSC_H */
diff --git a/reactos/base/applications/mstsc/proto.h b/reactos/base/applications/mstsc/proto.h
index e75e588af71..57f6a9ef4d4 100644
--- a/reactos/base/applications/mstsc/proto.h
+++ b/reactos/base/applications/mstsc/proto.h
@@ -17,8 +17,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef RDESKTOP_PROTO_H
-#define RDESKTOP_PROTO_H
+#pragma once
/* *INDENT-OFF* */
#ifdef __cplusplus
@@ -306,5 +305,3 @@ unsigned int seamless_send_focus(unsigned long id, unsigned long flags);
}
#endif
/* *INDENT-ON* */
-
-#endif
diff --git a/reactos/base/applications/mstsc/rdesktop.h b/reactos/base/applications/mstsc/rdesktop.h
index c9f97b3d4b9..f61a94b14df 100644
--- a/reactos/base/applications/mstsc/rdesktop.h
+++ b/reactos/base/applications/mstsc/rdesktop.h
@@ -18,8 +18,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __RDESKTOP_MSTSC_H
-#define __RDESKTOP_MSTSC_H
+#pragma once
#include
#include
@@ -127,5 +126,3 @@
#ifndef MAKE_PROTO
#include "proto.h"
#endif
-
-#endif /* __RDESKTOP_MSTSC_H */
diff --git a/reactos/base/applications/mstsc/uimain.h b/reactos/base/applications/mstsc/uimain.h
index c03a0796fce..b9972ef3bbf 100644
--- a/reactos/base/applications/mstsc/uimain.h
+++ b/reactos/base/applications/mstsc/uimain.h
@@ -18,8 +18,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __UIMAIN_MSTSC_H
-#define __UIMAIN_MSTSC_H
+#pragma once
/* in uimain.c */
int
@@ -77,5 +76,3 @@ ui_set_modifier_state(int code);
#define UI_MAX(a, b) (((a) > (b)) ? (a) : (b))
#undef UI_MIN
#define UI_MIN(a, b) (((a) < (b)) ? (a) : (b))
-
-#endif /* __UIMAIN_MSTSC_H */
diff --git a/reactos/base/applications/network/finger/err.h b/reactos/base/applications/network/finger/err.h
index bbc7397f852..bab0285d7e3 100644
--- a/reactos/base/applications/network/finger/err.h
+++ b/reactos/base/applications/network/finger/err.h
@@ -33,8 +33,7 @@
* @(#)err.h 8.1 (Berkeley) 6/2/93
*/
-#ifndef _ERR_H_
-#define _ERR_H_
+#pragma once
/*
* Don't use va_list in the err/warn prototypes. Va_list is typedef'd in two
@@ -56,5 +55,3 @@ void warn __P((const char *, ...));
void vwarn __P((const char *, va_list));
void warnx __P((const char *, ...));
void vwarnx __P((const char *, va_list));
-
-#endif /* !_ERR_H_ */
diff --git a/reactos/base/applications/network/finger/various.h b/reactos/base/applications/network/finger/various.h
index cb7572ee5b3..03c277b8b44 100644
--- a/reactos/base/applications/network/finger/various.h
+++ b/reactos/base/applications/network/finger/various.h
@@ -1,9 +1,7 @@
// Various things you need when porting BSD and GNU utilities to
// Win32.
-#ifndef VARIOUS_H
-#define VARIOUS_H
-
+#pragma once
typedef float f4byte_t;
typedef double f8byte_t;
@@ -32,5 +30,3 @@ typedef long uid_t; // SunOS 5.5
#define rindex(s, c) strrchr(s, c)
void netfinger(char *);
-
-#endif
diff --git a/reactos/base/applications/network/ipconfig/ipconfig.c b/reactos/base/applications/network/ipconfig/ipconfig.c
index 8f6ca9a9e6b..5bb2d95fc25 100644
--- a/reactos/base/applications/network/ipconfig/ipconfig.c
+++ b/reactos/base/applications/network/ipconfig/ipconfig.c
@@ -183,17 +183,21 @@ LPTSTR GetConnectionType(LPTSTR lpClass)
ConType = (LPTSTR)HeapAlloc(ProcessHeap,
0,
dwDataSize);
- if (ConType == NULL)
- return NULL;
-
- if(RegQueryValueEx(hKey,
- _T("Name"),
- NULL,
- &dwType,
- (PBYTE)ConType,
- &dwDataSize) != ERROR_SUCCESS)
+ if (ConType)
{
- ConType = NULL;
+ if(RegQueryValueEx(hKey,
+ _T("Name"),
+ NULL,
+ &dwType,
+ (PBYTE)ConType,
+ &dwDataSize) != ERROR_SUCCESS)
+ {
+ HeapFree(ProcessHeap,
+ 0,
+ ConType);
+
+ ConType = NULL;
+ }
}
}
}
@@ -456,7 +460,9 @@ VOID ShowInfo(BOOL bAll)
if (bAll)
{
- _tprintf(_T("\tDescription . . . . . . . . . . . : %s\n"), GetConnectionDescription(pAdapter->AdapterName));
+ LPTSTR lpDesc = GetConnectionDescription(pAdapter->AdapterName);
+ _tprintf(_T("\tDescription . . . . . . . . . . . : %s\n"), lpDesc);
+ HeapFree(ProcessHeap, 0, lpDesc);
_tprintf(_T("\tPhysical Address. . . . . . . . . : %s\n"), PrintMacAddr(pAdapter->Address));
if (pAdapter->DhcpEnabled)
_tprintf(_T("\tDHCP Enabled. . . . . . . . . . . : Yes\n"));
diff --git a/reactos/base/applications/network/ipconfig/lang/de-DE.rc b/reactos/base/applications/network/ipconfig/lang/de-DE.rc
index e6d934d9db2..89c23c1bc31 100644
--- a/reactos/base/applications/network/ipconfig/lang/de-DE.rc
+++ b/reactos/base/applications/network/ipconfig/lang/de-DE.rc
@@ -12,12 +12,12 @@ END
STRINGTABLE DISCARDABLE
BEGIN
IDS_OTHER "Anderer Adapter"
- IDS_ETH "Ethernet Adapter"
- IDS_TOKEN "Token Ring Adapter"
- IDS_FDDI "FDDI Adapter"
- IDS_PPP "PPP Adapter"
- IDS_LOOP "Loopback Adapter"
- IDS_SLIP "SLIP Adapter"
+ IDS_ETH "Ethernet-Adapter"
+ IDS_TOKEN "Token-Ring-Adapter"
+ IDS_FDDI "FDDI-Adapter"
+ IDS_PPP "PPP-Adapter"
+ IDS_LOOP "Loopback-Adapter"
+ IDS_SLIP "SLIP-Adapter"
END
STRINGTABLE DISCARDABLE
@@ -31,7 +31,7 @@ BEGIN
\n \
wobei\n \
Adapter Verbindungsname\n \
- (wildcards * und ? sind mglich, siehe Beispiele)\n \
+ (Wildcards * und ? sind mglich, siehe Beispiele)\n \
\n \
Optionen:\n \
/? Zeigt die Hilfe an.\n \
@@ -61,6 +61,6 @@ BEGIN
> ipconfig /renew EL* ... Erneuert alle Verbindungen, deren Name\n \
mit EL beginnt.\n \
> ipconfig /release *Ver* ... Gibt alle passenden Verbindungen frei,\n \
- z.B. ""Lokale Vebindung 1"" oder\n \
- ""Lokale Vebindung 2""\n"
+ z.B. ""Lokale Verbindung 1"" oder\n \
+ ""Lokale Verbindung 2""\n"
END
diff --git a/reactos/base/applications/network/telnet/src/ansiprsr.h b/reactos/base/applications/network/telnet/src/ansiprsr.h
index a8396d29212..bd2ccc4dd19 100644
--- a/reactos/base/applications/network/telnet/src/ansiprsr.h
+++ b/reactos/base/applications/network/telnet/src/ansiprsr.h
@@ -1,5 +1,4 @@
-#ifndef __ANSIPRSR_H
-#define __ANSIPRSR_H
+#pragma once
#include
#include
@@ -81,5 +80,3 @@ public:
char* ParseBuffer(char* pszBuffer, char* pszBufferEnd);
static int StripBuffer(char* pszBuffer, char* pszBufferEnd, int width);
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/keytrans.h b/reactos/base/applications/network/telnet/src/keytrans.h
index 21bb85afa0a..c4a49c12033 100644
--- a/reactos/base/applications/network/telnet/src/keytrans.h
+++ b/reactos/base/applications/network/telnet/src/keytrans.h
@@ -18,8 +18,7 @@
// DeleteKeyDef : Deletes a key def from the list //
///////////////////////////////////////////////////////////////////
-#ifndef __KEYTRANS_H
-#define __KEYTRANS_H
+#pragma once
#include "tkeydef.h"
#include "tkeymap.h"
@@ -93,5 +92,3 @@ private:
int currentKeyMap, mainKeyMap; // AVS
};
-
-#endif // __KEYTRANS_H
diff --git a/reactos/base/applications/network/telnet/src/stl_bids.h b/reactos/base/applications/network/telnet/src/stl_bids.h
index 5d70f7fab07..59470ed8734 100644
--- a/reactos/base/applications/network/telnet/src/stl_bids.h
+++ b/reactos/base/applications/network/telnet/src/stl_bids.h
@@ -1,8 +1,7 @@
// This is the STL wrapper for classlib/arrays.h from Borland's web site
// It has been modified to be compatible with vc++ (Paul Branann 5/7/98)
-#ifndef STL_ARRAY_AS_VECTOR
-#define STL_ARRAY_AS_VECTOR
+#pragma once
#ifdef _MSC_VER
#pragma warning(disable: 4786)
@@ -156,5 +155,3 @@ public:
}
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tcharmap.h b/reactos/base/applications/network/telnet/src/tcharmap.h
index cbc97e3dea6..caf6dee5f2f 100644
--- a/reactos/base/applications/network/telnet/src/tcharmap.h
+++ b/reactos/base/applications/network/telnet/src/tcharmap.h
@@ -1,8 +1,7 @@
// This is a simple class to handle character maps
// (Paul Brannan 6/25/98)
-#ifndef __TCHARMAP_H
-#define __TCHARMAP_H
+#pragma once
class TCharmap {
private:
@@ -37,5 +36,3 @@ public:
int enabled;
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tconsole.h b/reactos/base/applications/network/telnet/src/tconsole.h
index 81e59894b69..b90cb304aa8 100644
--- a/reactos/base/applications/network/telnet/src/tconsole.h
+++ b/reactos/base/applications/network/telnet/src/tconsole.h
@@ -1,5 +1,4 @@
-#ifndef __TNPARSER_H
-#define __TNPARSER_H
+#pragma once
#include "tnconfig.h"
@@ -168,5 +167,3 @@ void saveScreen(CHAR_INFO* chiBuffer);
void restoreScreen(CHAR_INFO* chiBuffer);
CHAR_INFO* newBuffer();
void deleteBuffer(CHAR_INFO* chiBuffer);
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/telnet.h b/reactos/base/applications/network/telnet/src/telnet.h
index dbb2cdedc3b..3fd11f2ebc8 100644
--- a/reactos/base/applications/network/telnet/src/telnet.h
+++ b/reactos/base/applications/network/telnet/src/telnet.h
@@ -1,5 +1,4 @@
-#ifndef ___TELNET_H
-#define ___TELNET_H
+#pragma once
/*
* Copyright (c) 1983 Regents of the University of California.
@@ -298,8 +297,3 @@ extern char *enctype_names[];
#define ENCTYPE_NAME(x) enctype_names[x]
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
-
-
-
-#endif
-
diff --git a/reactos/base/applications/network/telnet/src/tkeydef.h b/reactos/base/applications/network/telnet/src/tkeydef.h
index c44a5bca164..49f7648e1f6 100644
--- a/reactos/base/applications/network/telnet/src/tkeydef.h
+++ b/reactos/base/applications/network/telnet/src/tkeydef.h
@@ -3,8 +3,7 @@
// - keeped in an array container //
/////////////////////////////////////////////////////////
-#ifndef __TKEYDEF_H
-#define __TKEYDEF_H
+#pragma once
#include
@@ -67,5 +66,3 @@ public:
DWORD GetCodeKey() { return vk_code; }
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tkeymap.h b/reactos/base/applications/network/telnet/src/tkeymap.h
index 0501c20fbb9..82b70c9b898 100644
--- a/reactos/base/applications/network/telnet/src/tkeymap.h
+++ b/reactos/base/applications/network/telnet/src/tkeymap.h
@@ -1,5 +1,4 @@
-#ifndef __TKEYMAP_H
-#define __TKEYMAP_H
+#pragma once
#include "tkeydef.h"
@@ -35,5 +34,3 @@ struct KeyMap {
~KeyMap();
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tmapldr.h b/reactos/base/applications/network/telnet/src/tmapldr.h
index 4a80966f0cd..03b650da7ec 100644
--- a/reactos/base/applications/network/telnet/src/tmapldr.h
+++ b/reactos/base/applications/network/telnet/src/tmapldr.h
@@ -68,8 +68,7 @@
// //
///////////////////////////////////////////////////////////////////
-#ifndef __TLOADMAP_H
-#define __TLOADMAP_H
+#pragma once
#include "keytrans.h"
#include "tcharmap.h"
@@ -101,5 +100,3 @@ private:
int LoadCharMap(string buf);
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tmouse.h b/reactos/base/applications/network/telnet/src/tmouse.h
index fde6ec71828..3bb9d1f7981 100644
--- a/reactos/base/applications/network/telnet/src/tmouse.h
+++ b/reactos/base/applications/network/telnet/src/tmouse.h
@@ -1,5 +1,4 @@
-#ifndef __TMOUSE_H
-#define __TMOUSE_H
+#pragma once
#include "tnclip.h"
#include
@@ -25,5 +24,3 @@ public:
TMouse(Tnclip &RefClipboard);
~TMouse();
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tnclass.h b/reactos/base/applications/network/telnet/src/tnclass.h
index f29dfa3e87f..da204acd19f 100644
--- a/reactos/base/applications/network/telnet/src/tnclass.h
+++ b/reactos/base/applications/network/telnet/src/tnclass.h
@@ -1,5 +1,4 @@
-#ifndef __TNCLASS_H_
-#define __TNCLASS_H_
+#pragma once
#include
#include "tnconfig.h"
@@ -69,6 +68,3 @@ private:
void NewProcess(); // Paul Brannan 9/13/98
void SetLocalAddress(SOCKET s);
};
-
-#endif
-
diff --git a/reactos/base/applications/network/telnet/src/tnclip.h b/reactos/base/applications/network/telnet/src/tnclip.h
index cd20c30e6ec..bca147f2b59 100644
--- a/reactos/base/applications/network/telnet/src/tnclip.h
+++ b/reactos/base/applications/network/telnet/src/tnclip.h
@@ -1,5 +1,4 @@
-#ifndef __TNCLIP_H
-#define __TNCLIP_H
+#pragma once
#include
#include "tnetwork.h"
@@ -16,5 +15,3 @@ public:
void Copy(HGLOBAL clipboard_data);
void Paste();
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tncon.h b/reactos/base/applications/network/telnet/src/tncon.h
index d8b94142e1d..42d75db5dbc 100644
--- a/reactos/base/applications/network/telnet/src/tncon.h
+++ b/reactos/base/applications/network/telnet/src/tncon.h
@@ -1,5 +1,4 @@
-#ifndef __TNCON_H
-#define __TNCON_H
+#pragma once
#include "tparams.h"
#include "tnclip.h"
@@ -30,5 +29,3 @@ BOOL WINAPI ControlEventHandler(DWORD);
// Bryan Montgomery 10/14/98
void setTNetwork(TNetwork);
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tnconfig.h b/reactos/base/applications/network/telnet/src/tnconfig.h
index c0d41ee2d5e..8a55627b5c8 100644
--- a/reactos/base/applications/network/telnet/src/tnconfig.h
+++ b/reactos/base/applications/network/telnet/src/tnconfig.h
@@ -6,8 +6,7 @@
// It does not store any information about the current settings, only default
// or recommended settings.
-#ifndef __TNCONFIG_H
-#define __TNCONFIG_H
+#pragma once
// Ioannou 2 June 98: Borland needs them - quick hack
#ifdef __BORLANDC__
@@ -207,5 +206,3 @@ private:
};
extern TConfig ini;
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tnerror.h b/reactos/base/applications/network/telnet/src/tnerror.h
index a7ada284c58..1432df5db89 100644
--- a/reactos/base/applications/network/telnet/src/tnerror.h
+++ b/reactos/base/applications/network/telnet/src/tnerror.h
@@ -1,5 +1,4 @@
-#ifndef __TNERROR_H
-#define __TNERROR_H
+#pragma once
#ifndef __WINDOWS_H
#include
@@ -12,5 +11,3 @@ extern int Telnet_Redir;
int printm(LPTSTR szModule, BOOL fSystem, DWORD dwMessageId, ...);
void LogErrorConsole(LPTSTR szError);
int printit(const char * it);
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tnetwork.h b/reactos/base/applications/network/telnet/src/tnetwork.h
index bcc78c7012f..317ec2d11b9 100644
--- a/reactos/base/applications/network/telnet/src/tnetwork.h
+++ b/reactos/base/applications/network/telnet/src/tnetwork.h
@@ -1,8 +1,7 @@
// This is a simple class to handle socket connections
// (Paul Brannan 6/15/98)
-#ifndef __TNETWORK_H
-#define __TNETWORK_H
+#pragma once
#include
@@ -46,5 +45,3 @@ public:
void do_naws(int width, int height);
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tnmain.h b/reactos/base/applications/network/telnet/src/tnmain.h
index 526742c56b6..930b9b123ad 100644
--- a/reactos/base/applications/network/telnet/src/tnmain.h
+++ b/reactos/base/applications/network/telnet/src/tnmain.h
@@ -1,5 +1,4 @@
-#ifndef __TNMAIN_H
-#define __TNMAIN_H
+#pragma once
#include
#include
@@ -15,5 +14,3 @@ struct cmdHistory {
struct cmdHistory *next;
struct cmdHistory *prev;
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tnmisc.h b/reactos/base/applications/network/telnet/src/tnmisc.h
index 8216a864576..22bd2cda4fa 100644
--- a/reactos/base/applications/network/telnet/src/tnmisc.h
+++ b/reactos/base/applications/network/telnet/src/tnmisc.h
@@ -1,5 +1,4 @@
-#ifndef __TNMISC_H
-#define __TNMISC_H
+#pragma once
// Process-related functions
BOOL CreateHiddenConsoleProcess(LPCTSTR szChildName, PROCESS_INFORMATION* ppi,
@@ -14,5 +13,3 @@ HWND TelnetGetConsoleWindow(void);
bool SetIcon(HWND hConsoleWindow, HANDLE hIcon, LPARAM *pOldBIcon, LPARAM *pOldSIcon,
const char *icondir);
void ResetIcon(HWND hConsoleWindow, LPARAM oldBIcon, LPARAM oldSIcon);
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tparams.h b/reactos/base/applications/network/telnet/src/tparams.h
index ffd4f8cbad9..efa088599ba 100644
--- a/reactos/base/applications/network/telnet/src/tparams.h
+++ b/reactos/base/applications/network/telnet/src/tparams.h
@@ -1,5 +1,4 @@
-#ifndef __THREADPARAMS
-#define __THREADPARAMS
+#pragma once
#include "ttelhndl.h"
@@ -20,5 +19,3 @@ public:
NetParams p;
TTelnetHandler &TelHandler;
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tparser.h b/reactos/base/applications/network/telnet/src/tparser.h
index 143649f5687..7356d4b198c 100644
--- a/reactos/base/applications/network/telnet/src/tparser.h
+++ b/reactos/base/applications/network/telnet/src/tparser.h
@@ -10,8 +10,7 @@
// - An Init() function, which will re-initialize the parser when
// necessary.
-#ifndef __TPARSER_H
-#define __TPARSER_H
+#pragma once
#include "tconsole.h"
#include "keytrans.h"
@@ -45,5 +44,3 @@ protected:
TNetwork &Network;
TCharmap &Charmap;
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tscript.h b/reactos/base/applications/network/telnet/src/tscript.h
index f9626bf7059..1015b1f3ad8 100644
--- a/reactos/base/applications/network/telnet/src/tscript.h
+++ b/reactos/base/applications/network/telnet/src/tscript.h
@@ -1,5 +1,4 @@
-#ifndef __TSCRIPT_H
-#define __TSCRIPT_H
+#pragma once
#include
#include
@@ -16,5 +15,3 @@ private:
char *script;
TNetwork &Network;
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/tscroll.h b/reactos/base/applications/network/telnet/src/tscroll.h
index 4261ca0f94c..8a982b29da6 100644
--- a/reactos/base/applications/network/telnet/src/tscroll.h
+++ b/reactos/base/applications/network/telnet/src/tscroll.h
@@ -1,5 +1,4 @@
-#ifndef __TSCROLL_H
-#define __TSCROLL_H
+#pragma once
#include "tconsole.h"
#include "tmouse.h"
@@ -22,5 +21,3 @@ public:
TScroller(TMouse &M, int size=20000);
~TScroller();
};
-
-#endif
diff --git a/reactos/base/applications/network/telnet/src/ttelhndl.h b/reactos/base/applications/network/telnet/src/ttelhndl.h
index ad4ec627ebc..9879435f01e 100644
--- a/reactos/base/applications/network/telnet/src/ttelhndl.h
+++ b/reactos/base/applications/network/telnet/src/ttelhndl.h
@@ -1,5 +1,4 @@
-#ifndef __TTELHNDL_H
-#define __TTELHNDL_H
+#pragma once
#include "tparser.h"
#include "tnetwork.h"
@@ -47,5 +46,3 @@ public:
int get_term() {return iTermSet;}
};
-
-#endif
diff --git a/reactos/base/applications/notepad/lang/de-DE.rc b/reactos/base/applications/notepad/lang/de-DE.rc
index 2844639f8d9..eeb89058298 100644
--- a/reactos/base/applications/notepad/lang/de-DE.rc
+++ b/reactos/base/applications/notepad/lang/de-DE.rc
@@ -127,7 +127,7 @@ FONT 8, "MS Shell Dlg"
CAPTION "Enkodierung"
BEGIN
COMBOBOX ID_ENCODING,54,0,156,80,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
-LTEXT "Enkodierung:",0x155,5,2,41,12
+LTEXT "Kodierung:",0x155,5,2,41,12
COMBOBOX ID_EOLN,54,18,156,80,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Zeilenenden:",0x156,5,20,41,12
END
@@ -161,7 +161,7 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- STRING_LICENSE, "Dieses Programm ist kostenlos; Sie knnen es frei verteilen mit od. ohne nderungen unter der GNU Lesser General Public License wie es von der Free Software Foundation verffentlicht wurde; entweder Version 2.1 der Lizenz, oder eine sptere Version (ihrer Wahl).\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
+ STRING_LICENSE, "Dieses Programm ist kostenlos; Sie knnen es frei verteilen mit od. ohne nderungen unter der GNU Lesser General Public License, wie es von der Free Software Foundation verffentlicht wurde; entweder Version 2.1 der Lizenz, oder eine sptere Version (ihrer Wahl).\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA."
END
STRINGTABLE DISCARDABLE
@@ -183,7 +183,7 @@ STRING_UNTITLED, "(unbenannt)"
STRING_ALL_FILES, "Alle Dateien (*.*)"
STRING_TEXT_FILES_TXT, "Textdateien (*.txt)"
-STRING_TOOLARGE, "Die Datei '%s' ist zu gro fr den Editor\n \
+STRING_TOOLARGE, "Die Datei '%s' ist zu gro fr den Editor.\n \
Benutzen Sie bitte einen anderen Editor, um diese Datei zu bearbeiten."
STRING_NOTEXT, "Sie haben keinen Text eingegeben, der \
gespeichert\n werden knnte. Geben Sie Text ein, und versuchen Sie es \
diff --git a/reactos/base/applications/paint/lang/de-DE.rc b/reactos/base/applications/paint/lang/de-DE.rc
index d4a31e475b1..7c56d03cb51 100644
--- a/reactos/base/applications/paint/lang/de-DE.rc
+++ b/reactos/base/applications/paint/lang/de-DE.rc
@@ -193,7 +193,7 @@ BEGIN
IDS_TOOLTIP9, "Sprhdose"
IDS_TOOLTIP10, "Text"
IDS_TOOLTIP11, "Linie"
- IDS_TOOLTIP12, "Bezier-Kurve"
+ IDS_TOOLTIP12, "Bzier-Kurve"
IDS_TOOLTIP13, "Rechteck"
IDS_TOOLTIP14, "Polygon"
IDS_TOOLTIP15, "Ellipse"
diff --git a/reactos/base/applications/paint/lang/pl-PL.rc b/reactos/base/applications/paint/lang/pl-PL.rc
index 3449a3add71..b37039a4def 100644
--- a/reactos/base/applications/paint/lang/pl-PL.rc
+++ b/reactos/base/applications/paint/lang/pl-PL.rc
@@ -49,7 +49,7 @@ BEGIN
MENUITEM SEPARATOR
POPUP "Powikszenie"
BEGIN
- POPUP "User defined"
+ POPUP "Zdefiniowane przez uytkownika"
BEGIN
MENUITEM "12,5%", IDM_VIEWZOOM125
MENUITEM "25%", IDM_VIEWZOOM25
@@ -60,8 +60,8 @@ BEGIN
MENUITEM "800%", IDM_VIEWZOOM800
END
MENUITEM SEPARATOR
- MENUITEM "Show grid", IDM_VIEWSHOWGRID
- MENUITEM "Show miniature", IDM_VIEWSHOWMINIATURE
+ MENUITEM "Poka siatk", IDM_VIEWSHOWGRID
+ MENUITEM "Poka miniatur", IDM_VIEWSHOWMINIATURE
END
MENUITEM "Peny ekran\tCtrl+F", IDM_VIEWFULLSCREEN
END
@@ -181,7 +181,7 @@ BEGIN
IDS_INFOTEXT, "Paint dla ReactOS jest dostpny na licencji GNU Lesser General Public License (LGPL) wersja 3 (www.gnu.org)"
IDS_SAVEPROMPTTEXT, "Czy chcesz zapisa zmiany do %s?"
IDS_DEFAULTFILENAME, "Nienazwany.bmp"
- IDS_MINIATURETITLE, "Miniature"
+ IDS_MINIATURETITLE, "Miniatura"
IDS_TOOLTIP1, "Zaznaczenie dowolne"
IDS_TOOLTIP2, "Zaznaczenie"
IDS_TOOLTIP3, "Gumka"
@@ -190,16 +190,16 @@ BEGIN
IDS_TOOLTIP6, "Przyblienie"
IDS_TOOLTIP7, "Owek"
IDS_TOOLTIP8, "Pdzel"
- IDS_TOOLTIP9, "Spray"
+ IDS_TOOLTIP9, "Aerograf"
IDS_TOOLTIP10, "Tekst"
IDS_TOOLTIP11, "Linia"
IDS_TOOLTIP12, "Krzywa Beziera"
IDS_TOOLTIP13, "Prostokt"
- IDS_TOOLTIP14, "Polygon"
+ IDS_TOOLTIP14, "Wielokt"
IDS_TOOLTIP15, "Elipsa"
IDS_TOOLTIP16, "Zaokrglony Prostokt"
IDS_OPENFILTER, "Pliki Bitmapy (*.bmp;*.dib)\1*.bmp;*.dib\1Wszystkie pliki (*.*)\1*.*\1"
IDS_SAVEFILTER, "Bitmapa 24 bit (*.bmp;*.dib)\1*.bmp;*.dib\1"
- IDS_FILESIZE, "%d bytes"
- IDS_PRINTRES, "%d x %d pixels per meter"
+ IDS_FILESIZE, "%d bajtw"
+ IDS_PRINTRES, "%d x %d pikseli na metr"
END
diff --git a/reactos/base/applications/paint/mouse.c b/reactos/base/applications/paint/mouse.c
index 383d5d9016e..4f5c13031fd 100644
--- a/reactos/base/applications/paint/mouse.c
+++ b/reactos/base/applications/paint/mouse.c
@@ -251,15 +251,18 @@ endPaintingL(HDC hdc, short x, short y, int fg, int bg)
resetToU1();
if ((rectSel_src[2] != 0) && (rectSel_src[3] != 0))
{
- DeleteObject(SelectObject
- (hSelDC, hSelBm =
- (HBITMAP) CreateDIBWithProperties(rectSel_src[2], rectSel_src[3])));
DeleteObject(hSelMask);
+ hSelMask = CreateBitmap(rectSel_src[2], rectSel_src[3], 1, 1, NULL);
+ DeleteObject(SelectObject(hSelDC, hSelMask));
+ Rect(hSelDC, 0, 0, rectSel_src[2], rectSel_src[3], 0x00ffffff, 0x00ffffff, 1, 2);
+ SelectObject(hSelDC, hSelBm = CreateDIBWithProperties(rectSel_src[2], rectSel_src[3]));
+ resetToU1();
BitBlt(hSelDC, 0, 0, rectSel_src[2], rectSel_src[3], hDrawingDC, rectSel_src[0],
rectSel_src[1], SRCCOPY);
Rect(hdc, rectSel_src[0], rectSel_src[1], rectSel_src[0] + rectSel_src[2],
rectSel_src[1] + rectSel_src[3], bgColor, bgColor, 0, TRUE);
newReversible();
+
placeSelWin();
ShowWindow(hSelection, SW_SHOW);
}
diff --git a/reactos/base/applications/rapps/CreateCabFile.bat b/reactos/base/applications/rapps/CreateCabFile.bat
index b53f1c09593..f7cf48e07e6 100644
--- a/reactos/base/applications/rapps/CreateCabFile.bat
+++ b/reactos/base/applications/rapps/CreateCabFile.bat
@@ -1 +1 @@
-c:\cabman.exe -M raw -S rappmgr.cab \rapps\*.txt
+..\..\..\output-i386\tools\cabman\cabman.exe -M raw -S rappmgr.cab rapps\*.txt
diff --git a/reactos/base/applications/rapps/lang/de-DE.rc b/reactos/base/applications/rapps/lang/de-DE.rc
index 1ead4abf906..b48f0ea2229 100644
--- a/reactos/base/applications/rapps/lang/de-DE.rc
+++ b/reactos/base/applications/rapps/lang/de-DE.rc
@@ -42,7 +42,7 @@ BEGIN
MENUITEM "&Deinstallieren", ID_UNINSTALL
MENUITEM "&ndern", ID_MODIFY
MENUITEM SEPARATOR
- MENUITEM "&Remove from Registry", ID_REGREMOVE
+ MENUITEM "Aus &Registry entfernen", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Aktualisieren", ID_REFRESH
END
@@ -71,16 +71,16 @@ END
IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Program installation"
+CAPTION "Programminstallation"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35
- AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP
- AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP
+ AUTORADIOBUTTON "&Installation von einem Datentrger (CD oder DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP
+ AUTORADIOBUTTON "Herunterla&den und installieren", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP
PUSHBUTTON "OK", IDOK, 86, 78, 60, 14
- PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14
+ PUSHBUTTON "Abbrechen", IDCANCEL, 150, 78, 60, 14
END
IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
@@ -98,7 +98,7 @@ STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
CAPTION "ber"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "ReactOS Anwendungsmanager\nCopyright (C) 2009\nby Dmitry Chapyshev (dmitry@reactos.org)", IDC_STATIC, 48, 7, 130, 39
+ LTEXT "ReactOS-Anwendungsmanager\nCopyright (C) 2009\nby Dmitry Chapyshev (dmitry@reactos.org)", IDC_STATIC, 48, 7, 130, 39
PUSHBUTTON "Schlieen", IDOK, 133, 46, 50, 14
ICON IDI_MAIN, IDC_STATIC, 10, 10, 7, 30
END
@@ -124,14 +124,14 @@ STRINGTABLE DISCARDABLE
BEGIN
IDS_INFO_VERSION "\nVersion: "
IDS_INFO_DESCRIPTION "\nBeschreibung: "
- IDS_INFO_PUBLISHER "\nPublisher: "
+ IDS_INFO_PUBLISHER "\nVertrieb: "
IDS_INFO_HELPLINK "\nHilfe-Link: "
IDS_INFO_HELPPHONE "\nHilfe-Telefonnr.: "
IDS_INFO_README "\nReadme: "
IDS_INFO_REGOWNER "\nregistrierter Eigentmer: "
IDS_INFO_PRODUCTID "\nProdukt-ID: "
- IDS_INFO_CONTACT "\nKontaktt: "
- IDS_INFO_UPDATEINFO "\nUpdate Information: "
+ IDS_INFO_CONTACT "\nKontakt: "
+ IDS_INFO_UPDATEINFO "\nUpdate-Informationen: "
IDS_INFO_INFOABOUT "\nInformation ber: "
IDS_INFO_COMMENTS "\nKommentare: "
IDS_INFO_INSTLOCATION "\nInstallationsort: "
@@ -171,23 +171,23 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_APPTITLE "ReactOS Anwendungsmanager"
+ IDS_APPTITLE "ReactOS-Anwendungsmanager"
IDS_SEARCH_TEXT "Suche..."
IDS_INSTALL "Installieren"
IDS_UNINSTALL "Deinstallieren"
IDS_MODIFY "ndern"
IDS_APPS_COUNT "Anzahl der Anwendungen: %d"
- IDS_WELCOME_TITLE "Willkommen im ReactOS Anwendungsmanager!\n\n"
- IDS_WELCOME_TEXT "Whlen Sie links eine Kategorie und dann eine Anwendung um sie zu installieren oder zu deinstallieren.\nReactOS Webseite: "
+ IDS_WELCOME_TITLE "Willkommen im ReactOS-Anwendungsmanager!\n\n"
+ IDS_WELCOME_TEXT "Whlen Sie links eine Kategorie und dann eine Anwendung um sie zu installieren oder zu deinstallieren.\nReactOS-Webseite: "
IDS_WELCOME_URL "http://www.reactos.org"
IDS_INSTALLED "Installiert"
IDS_AVAILABLEFORINST "Zur Installation verfgbar"
- IDS_UPDATES "Updates"
+ IDS_UPDATES "Aktualisierungen"
IDS_APPLICATIONS "Anwendungen"
- IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
- IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
- IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
- IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
- IDS_INFORMATION "Information"
- IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
+ IDS_CHOOSE_FOLDER_TEXT "Whlen Sie ein Verzeichnis aus, das zum Herunterladen verwendet werden soll:"
+ IDS_CHOOSE_FOLDER_ERROR "Sie haben ein nicht existentes Verzeichnis angegeben!"
+ IDS_USER_NOT_ADMIN "Sie mssen als Administrator angemeldet sein, um den Anwendungsmanager zu starten!"
+ IDS_APP_REG_REMOVE "Sind Sie sich sicher, dass Sie die Daten dieses Programms aus der Registry entfernen mchten?"
+ IDS_INFORMATION "Informationen"
+ IDS_UNABLE_TO_REMOVE "Konnte die Daten nicht aus der Registry lschen!"
END
diff --git a/reactos/base/applications/rapps/lang/pl-PL.rc b/reactos/base/applications/rapps/lang/pl-PL.rc
index fc79e8a205b..60fd20b7530 100644
--- a/reactos/base/applications/rapps/lang/pl-PL.rc
+++ b/reactos/base/applications/rapps/lang/pl-PL.rc
@@ -16,7 +16,7 @@ BEGIN
MENUITEM "&Odinstaluj",ID_UNINSTALL
MENUITEM "&Modyfikuj", ID_MODIFY
MENUITEM SEPARATOR
- MENUITEM "&Remove from Registry", ID_REGREMOVE
+ MENUITEM "&Usu z rejestru", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "O&dwie", ID_REFRESH
END
@@ -44,7 +44,7 @@ BEGIN
MENUITEM "&odinstaluj", ID_UNINSTALL
MENUITEM "&Modyfikuj", ID_MODIFY
MENUITEM SEPARATOR
- MENUITEM "&Remove from Registry", ID_REGREMOVE
+ MENUITEM "&Usu z rejestru", ID_REGREMOVE
MENUITEM SEPARATOR
MENUITEM "&Odwie", ID_REFRESH
END
@@ -52,37 +52,37 @@ END
IDD_SETTINGS_DIALOG DIALOGEX DISCARDABLE 0, 0, 250, 144
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Settings"
+CAPTION "Ustawienia"
FONT 8, "MS Shell Dlg"
BEGIN
- GROUPBOX "General", -1, 4, 2, 240, 61
- AUTOCHECKBOX "&Save window position", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12
- AUTOCHECKBOX "&Update the list of accessible programs at start", IDC_UPDATE_AVLIST, 15, 29, 219, 12
- AUTOCHECKBOX "&Log of installation and removal of programs", IDC_LOG_ENABLED, 15, 46, 219, 12
+ GROUPBOX "Oglne", -1, 4, 2, 240, 61
+ AUTOCHECKBOX "&Zapisz pozycj okna", IDC_SAVE_WINDOW_POS, 15, 12, 219, 12
+ AUTOCHECKBOX "&Aktualizuj list dostpnych programw przy kadym uruchomieniu", IDC_UPDATE_AVLIST, 15, 29, 219, 12
+ AUTOCHECKBOX "Zap&isuj dziennik instalacji i usuwania programw", IDC_LOG_ENABLED, 15, 46, 219, 12
- GROUPBOX "Downloading", -1, 4, 65, 240, 51
- LTEXT "Folder for downloadings:", -1, 16, 75, 100, 9
+ GROUPBOX "Pobieranie", -1, 4, 65, 240, 51
+ LTEXT "Katalog dla pobranych plikw:", -1, 16, 75, 100, 9
EDITTEXT IDC_DOWNLOAD_DIR_EDIT, 15, 86, 166, 12, WS_CHILD | WS_VISIBLE | WS_GROUP
- PUSHBUTTON "&Choose", IDC_CHOOSE, 187, 85, 50, 14
- AUTOCHECKBOX "&Delete installers of programs after installation", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12
+ PUSHBUTTON "&Wybierz", IDC_CHOOSE, 187, 85, 50, 14
+ AUTOCHECKBOX "&Usu instalatory programw po ich zainstalowaniu", IDC_DEL_AFTER_INSTALL, 16, 100, 218, 12
- PUSHBUTTON "Default", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14
+ PUSHBUTTON "Domylne", IDC_DEFAULT_SETTINGS, 8, 124, 60, 14
PUSHBUTTON "OK", IDOK, 116, 124, 60, 14
- PUSHBUTTON "Cancel", IDCANCEL, 181, 124, 60, 14
+ PUSHBUTTON "Anuluj", IDCANCEL, 181, 124, 60, 14
END
IDD_INSTALL_DIALOG DIALOGEX DISCARDABLE 0, 0, 216, 97
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Program installation"
+CAPTION "Instalacja programu"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "...", IDC_INSTALL_TEXT, 4, 5, 209, 35
- AUTORADIOBUTTON "&Install from a disk (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP
- AUTORADIOBUTTON "&Download and install", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP
+ AUTORADIOBUTTON "&Zainstaluj z dysku (CD or DVD)", IDC_CD_INSTALL, 10, 46, 197, 11, WS_GROUP
+ AUTORADIOBUTTON "&Pobierz i zainstaluj", IDC_DOWNLOAD_INSTALL, 10, 59, 197, 11, NOT WS_TABSTOP
PUSHBUTTON "OK", IDOK, 86, 78, 60, 14
- PUSHBUTTON "Cancel", IDCANCEL, 150, 78, 60, 14
+ PUSHBUTTON "Anuluj", IDCANCEL, 150, 78, 60, 14
END
IDD_DOWNLOAD_DIALOG DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76
@@ -101,7 +101,7 @@ CAPTION "O programie"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "ReactOS Applications Manager\nCopyright (C) 2009\nby Dmitry Chapyshev (dmitry@reactos.org)", IDC_STATIC, 48, 7, 130, 39
- PUSHBUTTON "Close", IDOK, 133, 46, 50, 14
+ PUSHBUTTON "Zamknij", IDOK, 133, 46, 50, 14
ICON IDI_MAIN, IDC_STATIC, 10, 10, 7, 30
END
@@ -139,7 +139,7 @@ BEGIN
IDS_INFO_INSTLOCATION "\nScieka instalacji: "
IDS_INFO_INSTALLSRC "\nrdo instalacji: "
IDS_INFO_UNINSTALLSTR "\nKomenda deinstalacji: "
- IDS_INFO_MODIFYPATH "\nModify Path: "
+ IDS_INFO_MODIFYPATH "\nModyfikacja cieki instalacji: "
IDS_INFO_INSTALLDATE "\nData instalacji: "
END
@@ -186,10 +186,10 @@ BEGIN
IDS_AVAILABLEFORINST "Dostpne"
IDS_UPDATES "Uaktualnienia"
IDS_APPLICATIONS "Aplikacje"
- IDS_CHOOSE_FOLDER_TEXT "Choose a folder which will be used for downloading of programs:"
- IDS_CHOOSE_FOLDER_ERROR "You have specified a nonexistent folder!"
- IDS_USER_NOT_ADMIN "You should be administrator for start ""ReactOS Applications Manager""!"
- IDS_APP_REG_REMOVE "Are you sure you want to delete the data on the installed program from the registry?"
- IDS_INFORMATION "Information"
- IDS_UNABLE_TO_REMOVE "Unable to remove data on the program from the registry!"
+ IDS_CHOOSE_FOLDER_TEXT "Wybierz katalog w ktrym bda zapisywane pobrane programy:"
+ IDS_CHOOSE_FOLDER_ERROR "Wybrae nieistniejcy katalog!"
+ IDS_USER_NOT_ADMIN "Musisz mie uprawnienia administratora aby uruchomi ""ReactOS Applications Manager""!"
+ IDS_APP_REG_REMOVE "Czy na pewno chcesz usun wpis tego programu z rejestru?"
+ IDS_INFORMATION "Informacja"
+ IDS_UNABLE_TO_REMOVE "Nie mona byo usun wpisu z rejestru!"
END
diff --git a/reactos/base/applications/rapps/rapps.h b/reactos/base/applications/rapps/rapps.h
index 09a64c273a6..cba76db823a 100644
--- a/reactos/base/applications/rapps/rapps.h
+++ b/reactos/base/applications/rapps/rapps.h
@@ -1,5 +1,4 @@
-#ifndef _RAPPS_H__
-#define _RAPPS_H__
+#pragma once
#include
#include
@@ -12,7 +11,7 @@
#include "resource.h"
-#define APPLICATION_DATEBASE_URL L"http://opendn.org/rappmgr.cab"
+#define APPLICATION_DATEBASE_URL L"http://svn.reactos.org/packages/rappmgr.cab"
#define SPLIT_WIDTH 4
#define MAX_STR_LEN 256
@@ -185,5 +184,3 @@ VOID ToolBarOnGetDispInfo(LPTOOLTIPTEXT lpttt);
extern HWND hTreeView;
BOOL CreateTreeView(HWND hwnd);
HTREEITEM TreeViewAddItem(HTREEITEM hParent, LPWSTR lpText, INT Image, INT SelectedImage, LPARAM lParam);
-
-#endif /* _RAPPS_H__ */
diff --git a/reactos/base/applications/rapps/rapps/firefox3.txt b/reactos/base/applications/rapps/rapps/firefox3.txt
index d4d2272179a..e6051802e00 100644
--- a/reactos/base/applications/rapps/rapps/firefox3.txt
+++ b/reactos/base/applications/rapps/rapps/firefox3.txt
@@ -2,41 +2,41 @@
[Section]
Name = Mozilla Firefox 3.0
-Version = 3.0.17
+Version = 3.0.18
Licence = MPL/GPL/LGPL
Description = The most popular and one of the best free Web Browsers out there.
-Size = 7.1M
+Size = 7.2M
Category = 5
URLSite = http://www.mozilla.com/en-US/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/en-US/Firefox%20Setup%203.0.17.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/en-US/Firefox%20Setup%203.0.18.exe
CDPath = none
[Section.0407]
Description = Der populärste und einer der besten freien Webbrowser.
-Size = 6.9M
+Size = 7.0M
URLSite = http://www.mozilla-europe.org/de/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/de/Firefox%20Setup%203.0.17.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/de/Firefox%20Setup%203.0.18.exe
[Section.040a]
Description = El más popular y uno de los mejores navegadores web gratuitos que hay.
Size = 7.0M
URLSite = http://www.mozilla-europe.org/es/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/es-ES/Firefox%20Setup%203.0.17.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/es-ES/Firefox%20Setup%203.0.18.exe
[Section.0414]
Description = Mest populære og best også gratis nettleserene der ute.
Size = 6.9M
URLSite = http://www.mozilla-europe.org/no/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/nb-NO/Firefox%20Setup%203.0.17.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/nb-NO/Firefox%20Setup%203.0.18.exe
[Section.0415]
Description = Najpopularniejsza i jedna z najlepszych darmowych przeglądarek internetowych.
Size = 7.8M
URLSite = http://www.mozilla-europe.org/pl/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/pl/Firefox%20Setup%203.0.17.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/pl/Firefox%20Setup%203.0.18.exe
[Section.0419]
Description = Один из самых популярных и лучших бесплатных браузеров.
Size = 7.4M
URLSite = http://www.mozilla-europe.org/ru/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/ru/Firefox%20Setup%203.0.17.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-3.0/win32/ru/Firefox%20Setup%203.0.18.exe
diff --git a/reactos/base/applications/rapps/rapps/mirandaim.txt b/reactos/base/applications/rapps/rapps/mirandaim.txt
index a447fcecab9..0fff6a4ea04 100644
--- a/reactos/base/applications/rapps/rapps/mirandaim.txt
+++ b/reactos/base/applications/rapps/rapps/mirandaim.txt
@@ -2,13 +2,13 @@
[Section]
Name = Miranda IM
-Version = 0.8.12
+Version = 0.8.18
Licence = GPL
Description = Open source multiprotocol instant messaging application - May not work completely.
Size = 1.6MB
Category = 5
URLSite = http://www.miranda-im.org/
-URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.8.12-unicode.exe
+URLDownload = http://miranda.googlecode.com/files/miranda-im-v0.8.18-unicode.exe
CDPath = none
[Section.0407]
diff --git a/reactos/base/applications/rapps/rapps/openoffice2.4.txt b/reactos/base/applications/rapps/rapps/openoffice2.4.txt
index 81cae28edf9..d68f92e3418 100644
--- a/reactos/base/applications/rapps/rapps/openoffice2.4.txt
+++ b/reactos/base/applications/rapps/rapps/openoffice2.4.txt
@@ -8,23 +8,23 @@ Description = THE Open Source Office Suite.
Size = 127MB
Category = 6
URLSite = http://www.openoffice.org/
-URLDownload = http://ftp.plusline.de/OpenOffice/stable/2.4.3/OOo_2.4.3_Win32Intel_install_en-US.exe
+URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/stable/2.4.3/OOo_2.4.3_Win32Intel_install_en-US.exe
CDPath = none
[Section.0407]
Description = DIE Open Source Office Suite.
URLSite = http://de.openoffice.org/
Size = 114.2MB
-URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/de/2.4.3/OOo_2.4.3_Win32Intel_install_de.exe
+URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/de/2.4.3/OOo_2.4.3_Win32Intel_install_de.exe
[Section.040a]
Description = La suite de ofimática de código abierto.
URLSite = http://es.openoffice.org/
Size = 113.9MB
-URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/es/2.4.3/OOo_2.4.3_Win32Intel_install_es.exe
+URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/es/2.4.3/OOo_2.4.3_Win32Intel_install_es.exe
[Section.0415]
URLSite = http://pl.openoffice.org/
Description = Otwarty pakiet biurowy.
-URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/pl/2.4.2/OOo_2.4.2_Win32Intel_install_pl.exe
+URLDownload = ftp://archive.services.openoffice.org/pub/openoffice-archive/localized/pl/2.4.2/OOo_2.4.2_Win32Intel_install_pl.exe
Size = 113.9M
diff --git a/reactos/base/applications/rapps/rapps/openoffice3.0.txt b/reactos/base/applications/rapps/rapps/openoffice3.0.txt
index ebfc63ede1c..b9ee71bd025 100644
--- a/reactos/base/applications/rapps/rapps/openoffice3.0.txt
+++ b/reactos/base/applications/rapps/rapps/openoffice3.0.txt
@@ -2,30 +2,30 @@
[Section]
Name = OpenOffice 3.0
-Version = 3.1.1
+Version = 3.2.0
Licence = LGPL
Description = THE Open Source Office Suite.
-Size = 134.3MB
+Size = 135.4MB
Category = 6
URLSite = http://www.openoffice.org/
-URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/stable/3.1.1/OOo_3.1.1_Win32Intel_install_en-US.exe
+URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/stable/3.2.0/OOo_3.2.0_Win32Intel_install_en-US.exe
CDPath = none
[Section.0407]
Description = DIE Open Source Office Suite.
URLSite = http://de.openoffice.org/
-Size = 142.9MB
-URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/de/3.1.1/OOo_3.1.1_Win32Intel_install_de.exe
+Size = 145.8MB
+URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/de/3.2.0/OOo_3.2.0_Win32Intel_install_de.exe
[Section.040a]
Description = La suite de ofimática de código abierto.
URLSite = http://es.openoffice.org/
Version = 3.1.0
-Size = 130.0MB
-URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/es/3.1.0/OOo_3.1.0_Win32Intel_install_es.exe
+Size = 119.4MB
+URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/es/3.2.0/OOo_3.2.0_Win32Intel_install_es.exe
[Section.0415]
Description = Otwarty pakiet biurowy.
URLSite = http://pl.openoffice.org/
-Size = 147.1MB
-URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/pl/3.1.1/OOo_3.1.1_Win32Intel_install_pl.exe
+Size = 133.2MB
+URLDownload = http://ftp.tu-chemnitz.de/pub/openoffice/localized/pl/3.2.0/OOo_3.2.0_Win32Intel_install_pl.exe
diff --git a/reactos/base/applications/rapps/rapps/openttd.txt b/reactos/base/applications/rapps/rapps/openttd.txt
index 6220e8ada93..dfc94a95e43 100644
--- a/reactos/base/applications/rapps/rapps/openttd.txt
+++ b/reactos/base/applications/rapps/rapps/openttd.txt
@@ -2,13 +2,13 @@
[Section]
Name = OpenTTD
-Version = 0.7.3
+Version = 0.7.5
Licence = GPL v2
Description = Open Source clone of the "Transport Tycoon Deluxe" game engine. You need a copy of Transport Tycoon.
Size = 2.9MB
Category = 4
URLSite = http://www.openttd.org/
-URLDownload = http://ovh.dl.sourceforge.net/sourceforge/openttd/openttd-0.7.3-windows-win32.exe
+URLDownload = http://binaries.openttd.org/releases/0.7.5/openttd-0.7.5-windows-win32.exe
CDPath = none
[Section.0407]
diff --git a/reactos/base/applications/rapps/rapps/opera.txt b/reactos/base/applications/rapps/rapps/opera.txt
index 148e79bc9e4..44e49cc61ac 100644
--- a/reactos/base/applications/rapps/rapps/opera.txt
+++ b/reactos/base/applications/rapps/rapps/opera.txt
@@ -2,13 +2,13 @@
[Section]
Name = Opera
-Version = 10.10
+Version = 10.51
Licence = Freeware
Description = The popular Opera Browser with many advanced features and including a Mail and BitTorrent client.
Size = 11.0M
Category = 5
URLSite = http://www.opera.com/
-URLDownload = http://ftp.opera.com/pub/opera/win/1010/int/Opera_1010_in_Setup.exe
+URLDownload = http://get4.opera.com/pub/opera/win/1051/int/Opera_1051_int_Setup.exe
CDPath = none
[Section.0407]
diff --git a/reactos/base/applications/rapps/rapps/rosbe.txt b/reactos/base/applications/rapps/rapps/rosbe.txt
index 843f75df7e6..7d7918b5c78 100644
--- a/reactos/base/applications/rapps/rapps/rosbe.txt
+++ b/reactos/base/applications/rapps/rapps/rosbe.txt
@@ -2,17 +2,17 @@
[Section]
Name = ReactOS Build Environment
-Version = 1.4.5
+Version = 1.5
Licence = GPL
Description = Allows you to build the ReactOS Source. For more instructions see ReactOS wiki.
-Size = 14.9MB
+Size = 13.5MB
Category = 7
URLSite = http://reactos.org/wiki/Build_Environment/
-URLDownload = http://ovh.dl.sourceforge.net/sourceforge/reactos/RosBE-1.4.5.exe
+URLDownload = http://ovh.dl.sourceforge.net/sourceforge/reactos/RosBE-1.5.exe
CDPath = none
[Section.0407]
-Description = Erlaubt es Ihnen ReactOS aus den Quellen zu bauen. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen.
+Description = Erlaubt es Ihnen den ReactOS Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen.
[Section.040a]
Description = Te permite compilar el código de ReactOS. Para más instrucciones consulta la wiki de ReactOS.
diff --git a/reactos/base/applications/rapps/rapps/rosbeamd64.txt b/reactos/base/applications/rapps/rapps/rosbeamd64.txt
new file mode 100644
index 00000000000..c68b47af04f
--- /dev/null
+++ b/reactos/base/applications/rapps/rapps/rosbeamd64.txt
@@ -0,0 +1,21 @@
+; UTF-8
+
+[Section]
+Name = ReactOS Build Environment AMD64 Addon
+Version = 1.3
+Licence = GPL
+Description = Allows you to build the ReactOS AMD64 Source. For more instructions see ReactOS wiki.
+Size = 15.8MB
+Category = 7
+URLSite = http://reactos.org/wiki/Build_Environment/
+URLDownload = http://ovh.dl.sourceforge.net/sourceforge/reactos/RosBE64-1.3.exe
+CDPath = none
+
+[Section.0407]
+Description = Erlaubt es Ihnen den ReactOS AMD64 Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen.
+
+[Section.040a]
+Description = Te permite compilar el código de ReactOS AMD64. Para más instrucciones consulta la wiki de ReactOS.
+
+[Section.0415]
+Description = Pozwala zbudować obraz płyty ReactOS AMD64 ze źródeł. Więcej informacji na Wiki ReactOS.
diff --git a/reactos/base/applications/rapps/rapps/rosbearm.txt b/reactos/base/applications/rapps/rapps/rosbearm.txt
new file mode 100644
index 00000000000..61596d78dee
--- /dev/null
+++ b/reactos/base/applications/rapps/rapps/rosbearm.txt
@@ -0,0 +1,21 @@
+; UTF-8
+
+[Section]
+Name = ReactOS Build Environment ARM Addon
+Version = 1.0
+Licence = GPL
+Description = Allows you to build the ReactOS ARM Source. For more instructions see ReactOS wiki.
+Size = 11.1MB
+Category = 7
+URLSite = http://reactos.org/wiki/Build_Environment/
+URLDownload = http://ovh.dl.sourceforge.net/sourceforge/reactos/RosBE-ARM-1.0.exe
+CDPath = none
+
+[Section.0407]
+Description = Erlaubt es Ihnen den ReactOS ARM Source Code zu kompilieren. Im ReactOS-Wiki finden Sie dazu nähere Anweisungen.
+
+[Section.040a]
+Description = Te permite compilar el código de ReactOS ARM. Para más instrucciones consulta la wiki de ReactOS.
+
+[Section.0415]
+Description = Pozwala zbudować obraz płyty ReactOS ARM ze źródeł. Więcej informacji na Wiki ReactOS.
diff --git a/reactos/base/applications/rapps/rapps/sambatng.txt b/reactos/base/applications/rapps/rapps/sambatng.txt
index 4377863c7ac..6cf579a9372 100644
--- a/reactos/base/applications/rapps/rapps/sambatng.txt
+++ b/reactos/base/applications/rapps/rapps/sambatng.txt
@@ -2,10 +2,10 @@
[Section]
Name = Samba TNG
-Version = 0.4.99cvs
+Version = 0.5-RC1
Licence = GPL
Description = This tool allows you to access your Windows shared folders/printers with ReactOS.
-Size = 1MB
+Size = 2.1MB
Category = 5
URLSite = http://samba-tng.org/
URLDownload = http://svn.reactos.org/packages/samba-tng.exe
diff --git a/reactos/base/applications/rapps/rapps/scite.txt b/reactos/base/applications/rapps/rapps/scite.txt
index 0ec430fe396..fc3d9d50cca 100644
--- a/reactos/base/applications/rapps/rapps/scite.txt
+++ b/reactos/base/applications/rapps/rapps/scite.txt
@@ -2,13 +2,13 @@
[Section]
Name = SciTE
-Version = 2.01
+Version = 2.03
Licence = Freeware
Description = SciTE is a SCIntilla based Text Editor. Originally built to demonstrate Scintilla, it has grown to be a generally useful editor with facilities for building and running programs.
Size = 0.6M
Category = 7
URLSite = http://www.scintilla.org/
-URLDownload = http://fastbull.dl.sourceforge.net/sourceforge/scintilla/Sc201.exe
+URLDownload = http://ovh.dl.sourceforge.net/sourceforge/scintilla/Sc203.exe
CDPath = none
[Section.0407]
diff --git a/reactos/base/applications/rapps/rapps/seamonkey.txt b/reactos/base/applications/rapps/rapps/seamonkey.txt
index 69a43d51e90..9c980d30b65 100644
--- a/reactos/base/applications/rapps/rapps/seamonkey.txt
+++ b/reactos/base/applications/rapps/rapps/seamonkey.txt
@@ -2,31 +2,31 @@
[Section]
Name = Mozilla SeaMonkey
-Version = 2.0.2
+Version = 2.0.3
Licence = MPL/GPL/LGPL
Description = Mozilla Suite is alive. This is the one and only Browser, Mail, Chat, and Composer bundle you will ever need.
-Size = 10.1MB
+Size = 10.0MB
Category = 5
URLSite = http://www.seamonkey-project.org/
-URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.2/win32/en-US/SeaMonkey%20Setup%202.0.2.exe
+URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.3/win32/en-US/SeaMonkey%20Setup%202.0.3.exe
CDPath = none
[Section.0407]
Description = Mozilla Suite lebt. Dies ist das einzige Browser-, Mail-, Chat- and Composerwerkzeug-Bundle welches Sie benötigen.
-Size = 10.0MB
-URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.2/win32/de/SeaMonkey%20Setup%202.0.2.exe
+Size = 10.1MB
+URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.3/win32/de/SeaMonkey%20Setup%202.0.3.exe
[Section.040a]
Description = La suite de Mozilla está viva. Es el primero y único navegador web, gestor de correo, lector de noticias, Chat y editor HTML que necesitarás.
Size = 10.0MB
-URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.2/win32/es-ES/SeaMonkey%20Setup%202.0.2.exe
+URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.3/win32/es-ES/SeaMonkey%20Setup%202.0.3.exe
[Section.0415]
Description = Pakiet Mozilla żyje. W zestawie: przeglądarka, klient poczty, IRC oraz Edytor HTML - wszystko, czego potrzebujesz.
Size = 10.8MB
-URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.2/win32/pl/SeaMonkey%20Setup%202.0.2.exe
+URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.3/win32/pl/SeaMonkey%20Setup%202.0.3.exe
[Section.0419]
Description = Продолжение Mozilla Suite. Включает браузер, почтовый клиент, IRC-клиент и HTML-редактор.
Size = 10.4MB
-URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.2/win32/ru/SeaMonkey%20Setup%202.0.2.exe
+URLDownload = http://ftp.df.lth.se/mozilla/seamonkey/releases/2.0.3/win32/ru/SeaMonkey%20Setup%202.0.3.exe
diff --git a/reactos/base/applications/rapps/rapps/smplayer.txt b/reactos/base/applications/rapps/rapps/smplayer.txt
index b3071703a1e..a2e47d3acff 100644
--- a/reactos/base/applications/rapps/rapps/smplayer.txt
+++ b/reactos/base/applications/rapps/rapps/smplayer.txt
@@ -2,13 +2,13 @@
[Section]
Name = SMPlayer
-Version = 0.6.8
+Version = 0.6.9
Licence = GPL
Description = SMPlayer.
-Size = 13.38MB
+Size = 14.2MB
Category = 1
URLSite = http://smplayer.sourceforge.net/
-URLDownload = http://downloads.sourceforge.net/project/smplayer/SMPlayer/0.6.8/smplayer-0.6.8-win32.exe
+URLDownload = http://downloads.sourceforge.net/project/smplayer/SMPlayer/0.6.9/smplayer-0.6.9-win32.exe
CDPath = none
[Section.0407]
diff --git a/reactos/base/applications/rapps/rapps/thunderbird.txt b/reactos/base/applications/rapps/rapps/thunderbird.txt
index fa47d4bc1bc..9f0cd328d89 100644
--- a/reactos/base/applications/rapps/rapps/thunderbird.txt
+++ b/reactos/base/applications/rapps/rapps/thunderbird.txt
@@ -2,35 +2,35 @@
[Section]
Name = Mozilla Thunderbird
-Version = 3.0
+Version = 3.0.3
Licence = MPL/GPL/LGPL
Description = The most popular and one of the best free Mail Clients out there.
Size = 8.6M
Category = 5
URLSite = http://www.mozilla-europe.org/en/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-3.0/win32/en-US/Thunderbird%20Setup%203.0.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.0.3/win32/en-US/Thunderbird%20Setup%203.0.3.exe
CDPath = none
[Section.0407]
Description = Der populärste und einer der besten freien Mail-Clients.
Size = 8.4M
URLSite = http://www.mozilla-europe.org/de/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-3.0/win32/de/Thunderbird%20Setup%203.0.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.0.3/win32/de/Thunderbird%20Setup%203.0.3.exe
[Section.040a]
Description = El más popular y uno de los mejores clientes mail que hay.
Size = 8.4M
URLSite = http://www.mozilla-europe.org/es/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-3.0/win32/es-ES/Thunderbird%20Setup%203.0.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.0.3/win32/es-ES/Thunderbird%20Setup%203.0.3.exe
[Section.0415]
Description = Najpopularniejszy i jeden z najlepszych darmowych klientów poczty.
-Size = 9.2M
+Size = 9.3M
URLSite = http://www.mozilla-europe.org/pl/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-3.0/win32/pl/Thunderbird%20Setup%203.0.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.0.3/win32/pl/Thunderbird%20Setup%203.0.3.exe
[Section.0419]
Description = Один из самых популярных и лучших бесплатных почтовых клиентов.
Size = 8.8M
URLSite = http://www.mozilla-europe.org/ru/products/thunderbird/
-URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-3.0/win32/ru/Thunderbird%20Setup%203.0.exe
+URLDownload = http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/3.0.3/win32/ru/Thunderbird%20Setup%203.0.3.exe
diff --git a/reactos/base/applications/rapps/rapps/utorrent.txt b/reactos/base/applications/rapps/rapps/utorrent.txt
index 41a5f004f68..988263777c5 100644
--- a/reactos/base/applications/rapps/rapps/utorrent.txt
+++ b/reactos/base/applications/rapps/rapps/utorrent.txt
@@ -2,13 +2,13 @@
[Section]
Name = µTorrent
-Version = 1.8.5
+Version = 2.0
Licence = Freeware for non-commercial uses
Description = Small and fast BitTorrent Client.
-Size = 282K
+Size = 312K
Category = 5
URLSite = http://www.utorrent.com/
-URLDownload = http://download.utorrent.com/1.8.5/utorrent.exe
+URLDownload = http://download.utorrent.com/2.0/utorrent.exe
CDPath = none
diff --git a/reactos/base/applications/rapps/rapps/vlc.txt b/reactos/base/applications/rapps/rapps/vlc.txt
index 3a0d4e69777..d3d11d2fb76 100644
--- a/reactos/base/applications/rapps/rapps/vlc.txt
+++ b/reactos/base/applications/rapps/rapps/vlc.txt
@@ -2,13 +2,13 @@
[Section]
Name = VLC media player
-Version = 1.0.3
+Version = 1.0.5
Licence = GPL
Description = A media player.
Size = 17.2MB
Category = 1
URLSite = http://www.videolan.org/vlc/
-URLDownload = http://mirror.services.wisc.edu/mirrors/videolan/vlc/1.0.3/win32/vlc-1.0.3-win32.exe
+URLDownload = http://mirror.services.wisc.edu/mirrors/videolan/vlc/1.0.5/win32/vlc-1.0.5-win32.exe
CDPath = none
[Section.0407]
diff --git a/reactos/base/applications/rapps/resource.h b/reactos/base/applications/rapps/resource.h
index a4faeae3203..a3b907557d0 100644
--- a/reactos/base/applications/rapps/resource.h
+++ b/reactos/base/applications/rapps/resource.h
@@ -1,5 +1,4 @@
-#ifndef _RESOURCE_H__
-#define _RESOURCE_H__
+#pragma once
/* Icons */
#define IDI_MAIN 10
@@ -152,5 +151,3 @@
#ifndef IDC_STATIC
#define IDC_STATIC -1
#endif
-
-#endif /* _RESOURCE_H__ */
diff --git a/reactos/base/applications/regedit/clb/clbdll.h b/reactos/base/applications/regedit/clb/clbdll.h
index bc148d18db1..2680976bb73 100644
--- a/reactos/base/applications/regedit/clb/clbdll.h
+++ b/reactos/base/applications/regedit/clb/clbdll.h
@@ -1,5 +1,4 @@
-#ifndef __CLBDLL_H
-#define __CLBDLL_H
+#pragma once
#define CLBS_NOTIFY 0x1
#define CLBS_SORT 0x2
@@ -39,5 +38,3 @@ typedef struct _CUSTOM_CONTROL_INFO
LRESULT CALLBACK ClbWndProc(HWND,UINT,WPARAM,LPARAM);
INT_PTR WINAPI ClbStyleW(HWND,LPARAM);
BOOL WINAPI CustomControlInfoW(LPCUSTOM_CONTROL_INFO);
-
-#endif /* __CLBDLL_H */
diff --git a/reactos/base/applications/regedit/clb/resource.h b/reactos/base/applications/regedit/clb/resource.h
index f0d51c721f1..8cfc463c378 100644
--- a/reactos/base/applications/regedit/clb/resource.h
+++ b/reactos/base/applications/regedit/clb/resource.h
@@ -1,6 +1,3 @@
-#ifndef __CLB_RESOURCE_H
-#define __CLB_RESOURCE_H
+#pragma once
#define IDD_COLUMNLISTBOXSTYLES 1700
-
-#endif /* __CLB_RESOURCE_H */
diff --git a/reactos/base/applications/regedit/hexedit.h b/reactos/base/applications/regedit/hexedit.h
index d692d38a927..5ee5e22992d 100644
--- a/reactos/base/applications/regedit/hexedit.h
+++ b/reactos/base/applications/regedit/hexedit.h
@@ -1,5 +1,4 @@
-#ifndef __HEXEDIT_H
-#define __HEXEDIT_H
+#pragma once
#define HEX_EDIT_CLASS_NAME _T("HexEdit32")
@@ -36,5 +35,3 @@ UnregisterHexEditorClass(HINSTANCE hInstance);
#define HexEdit_SetMaxBufferSize(hWnd, Size) \
SendMessage((hWnd), HEM_SETMAXBUFFERSIZE, 0, (LPARAM)(Size))
-
-#endif /* __HEXEDIT_H */
diff --git a/reactos/base/applications/regedit/lang/de-DE.rc b/reactos/base/applications/regedit/lang/de-DE.rc
index 6e456a541ba..2b0a22cd2af 100644
--- a/reactos/base/applications/regedit/lang/de-DE.rc
+++ b/reactos/base/applications/regedit/lang/de-DE.rc
@@ -54,8 +54,8 @@ BEGIN
MENUITEM "&Exportieren...", ID_REGISTRY_EXPORTREGISTRYFILE
MENUITEM SEPARATOR
- MENUITEM "Hive laden...", ID_REGISTRY_LOADHIVE, GRAYED
- MENUITEM "Hive entladen...", ID_REGISTRY_UNLOADHIVE, GRAYED
+ MENUITEM "Zweig laden...", ID_REGISTRY_LOADHIVE, GRAYED
+ MENUITEM "Zweig entladen...", ID_REGISTRY_UNLOADHIVE, GRAYED
MENUITEM SEPARATOR
MENUITEM "&Mit Netzwerkregistrierung verbinden...",
ID_REGISTRY_CONNECTNETWORKREGISTRY
@@ -78,7 +78,7 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Zeichenkette", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Binrwert", ID_EDIT_NEW_BINARYVALUE
- MENUITEM "&DWORD Wert", ID_EDIT_NEW_DWORDVALUE
+ MENUITEM "&DWORD-Wert", ID_EDIT_NEW_DWORDVALUE
MENUITEM "&Mehrteilige Zeichenkette", ID_EDIT_NEW_MULTISTRINGVALUE
MENUITEM "&Erweiterbare Zeichenkette", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
END
@@ -134,14 +134,14 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Zeichenkette", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Binrwert", ID_EDIT_NEW_BINARYVALUE
- MENUITEM "&DWORD Wert", ID_EDIT_NEW_DWORDVALUE
+ MENUITEM "&DWORD-Wert", ID_EDIT_NEW_DWORDVALUE
MENUITEM "&Mehrteilige Zeichenkette", ID_EDIT_NEW_MULTISTRINGVALUE
MENUITEM "&Erweiterbare Zeichenkette", ID_EDIT_NEW_EXPANDABLESTRINGVALUE
END
END
POPUP ""
BEGIN
- MENUITEM "Expandieren/Schliessen", ID_TREE_EXPANDBRANCH
+ MENUITEM "Erweitern/Schlieen", ID_TREE_EXPANDBRANCH
POPUP "&Neu"
BEGIN
MENUITEM "&Schlssel", ID_EDIT_NEW_KEY
@@ -160,7 +160,7 @@ BEGIN
MENUITEM "&Exportieren", ID_TREE_EXPORT
MENUITEM "&Berechtigungen...", ID_TREE_PERMISSIONS, GRAYED
MENUITEM SEPARATOR
- MENUITEM "S&chlsselname kopieren", ID_EDIT_COPYKEYNAME
+ MENUITEM "S&chlsselnamen kopieren", ID_EDIT_COPYKEYNAME
END
END
@@ -215,7 +215,7 @@ END
IDD_EDIT_DWORD DIALOGEX 32, 24, 252, 104
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP |
WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "DWORD Wert editieren"
+CAPTION "DWORD-Wert editieren"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "&Name:",IDC_STATIC,6,6,134,8
@@ -242,7 +242,7 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_APP_TITLE "Registry Editor"
+ IDS_APP_TITLE "Registry-Editor"
IDC_REGEDIT "REGEDIT"
IDC_REGEDIT_FRAME "REGEDIT_FRAME"
END
@@ -253,7 +253,7 @@ BEGIN
ID_EDIT_MENU "Enthlt Befehle fr das ndern von Schlsseln oder Werten"
ID_VIEW_MENU "Enthlt Befehle fr das Anpassen des Registry Editor Fensters"
ID_FAVOURITES_MENU "Enthlt Befehle um auf oft genutzte Schlssel zuzugreifen"
- ID_HELP_MENU "Enthlt Befehle um Hilfe und Informationen ber den Registry Editor anzuzeigen"
+ ID_HELP_MENU "Enthlt Befehle um Hilfe und Informationen ber den Registry-Editor anzuzeigen"
ID_EDIT_NEW_MENU "Enthlt Befehle fr das Erstellen von neuen Schlsseln oder Werten"
END
@@ -263,7 +263,7 @@ BEGIN
ID_EDIT_NEW_KEY "Fgt einen neuen Schlssel hinzu"
ID_EDIT_NEW_STRINGVALUE "Fgt eine neue Zeichenkette hinzu "
ID_EDIT_NEW_BINARYVALUE "Fgt einen neuen Binrwrt hinzu"
- ID_EDIT_NEW_DWORDVALUE "Fgt einen neuen DWORD Wert hinzu"
+ ID_EDIT_NEW_DWORDVALUE "Fgt einen neuen DWORD-Wert hinzu"
ID_REGISTRY_IMPORTREGISTRYFILE "Importiert eine Textddatei in die Registry"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exportiert Teile oder die ganze Registry in eine Textdatei"
@@ -278,7 +278,7 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- ID_REGISTRY_EXIT "Beendet den Registry Editor"
+ ID_REGISTRY_EXIT "Beendet den Registry-Editor"
ID_FAVOURITES_ADDTOFAVOURITES "Fgt Schlssel zu den Favoriten hinzu"
ID_FAVOURITES_REMOVEFAVOURITE "Lscht Schlssel aus den Favoriten"
ID_VIEW_STATUSBAR "Zeigt oder versteckt die Statusleiste"
@@ -297,7 +297,7 @@ BEGIN
IDS_WARNING "Warnung"
IDS_BAD_KEY "Kann den Schlssel '%s' nicht lesen"
IDS_BAD_VALUE "Kann den Wert '%s' nicht lesen"
- IDS_UNSUPPORTED_TYPE "Kann den Schlssel des Typen (%ld) nicht ndern"
+ IDS_UNSUPPORTED_TYPE "Kann den Schlssel des Typs (%ld) nicht ndern"
IDS_TOO_BIG_VALUE "Der Wert (%ld) ist zu gro"
IDS_MULTI_SZ_EMPTY_STRING "Daten vom Typ REG_MULTI_SZ knnen keine leere Zeichenkette enthalten.\nDie leere Zeichenkette wurde aus der Liste gelscht."
IDS_QUERY_DELETE_KEY_ONE "Diesen Schlssel wirklich lschen?"
@@ -323,7 +323,7 @@ BEGIN
IDS_MY_COMPUTER "Arbeitsplatz"
IDS_IMPORT_REG_FILE "Registry importieren"
IDS_EXPORT_REG_FILE "Registry exportieren"
- IDS_INVALID_DWORD "(ungltiger DWORD Wert)"
+ IDS_INVALID_DWORD "(ungltiger DWORD-Wert)"
END
STRINGTABLE DISCARDABLE
@@ -331,7 +331,7 @@ BEGIN
IDS_FLT_REGFILE "Registrierungsdatei"
IDS_FLT_REGFILES "Registrierungsdateien"
IDS_FLT_REGFILES_FLT "*.reg"
- IDS_FLT_REGEDIT4 "Win9x/NT4 Registrierungsdateien (REGEDIT4)"
+ IDS_FLT_REGEDIT4 "Win9x/NT4-Registrierungsdateien (REGEDIT4)"
IDS_FLT_REGEDIT4_FLT "*.reg"
IDS_FLT_ALLFILES "Alle Dateien (*.*)"
IDS_FLT_ALLFILES_FLT "*.*"
diff --git a/reactos/base/applications/regedit/main.h b/reactos/base/applications/regedit/main.h
index 6e22e3e7ae2..ea16ceec7cb 100644
--- a/reactos/base/applications/regedit/main.h
+++ b/reactos/base/applications/regedit/main.h
@@ -18,8 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __MAIN_H__
-#define __MAIN_H__
+#pragma once
#include "resource.h"
@@ -124,5 +123,3 @@ extern void DestroyMainMenu( void );
/* edit.c */
extern BOOL ModifyValue(HWND hwnd, HKEY hKey, LPCTSTR valueName, BOOL EditBin);
extern BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath);
-
-#endif /* __MAIN_H__ */
diff --git a/reactos/base/applications/regedit/security.h b/reactos/base/applications/regedit/security.h
index 743cca51717..4f6d70dd5ef 100644
--- a/reactos/base/applications/regedit/security.h
+++ b/reactos/base/applications/regedit/security.h
@@ -1,5 +1,4 @@
-#ifndef _REGEXP_SECURITY_H
-#define _REGEXP_SECURITY_H
+#pragma once
BOOL
InitializeAclUiDll(VOID);
@@ -154,6 +153,4 @@ typedef struct _CRegKeySecurity
TCHAR szRegKey[1];
} CRegKeySecurity, *PCRegKeySecurity;
-#endif /* _REGEXP_SECURITY_H */
-
/* EOF */
diff --git a/reactos/base/applications/screensavers/3dtext/lang/de-DE.rc b/reactos/base/applications/screensavers/3dtext/lang/de-DE.rc
index d6df75d4ba7..0fb89e80ef2 100644
--- a/reactos/base/applications/screensavers/3dtext/lang/de-DE.rc
+++ b/reactos/base/applications/screensavers/3dtext/lang/de-DE.rc
@@ -2,7 +2,7 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "3D-Text Bildschirmschoner-Einstellungen"
+CAPTION "3D-Text-Bildschirmschoner-Einstellungen"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "OK",IDOK,216,7,50,14
@@ -13,5 +13,5 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_DESCRIPTION "3D Text Bildschirmschoner"
+ IDS_DESCRIPTION "3D-Text-Bildschirmschoner"
END
diff --git a/reactos/base/applications/screensavers/logon/lang/de-DE.rc b/reactos/base/applications/screensavers/logon/lang/de-DE.rc
index 10fc8483229..b740bedea3e 100644
--- a/reactos/base/applications/screensavers/logon/lang/de-DE.rc
+++ b/reactos/base/applications/screensavers/logon/lang/de-DE.rc
@@ -2,6 +2,6 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE DISCARDABLE
BEGIN
- IDS_DESCRIPTION "Logon Bildschirmschoner"
+ IDS_DESCRIPTION "Logon-Bildschirmschoner"
IDS_TEXT "Keinerlei Einstellungen notwendig."
END
diff --git a/reactos/base/applications/sndvol32/lang/de-DE.rc b/reactos/base/applications/sndvol32/lang/de-DE.rc
index abcab15673e..6ea135d5a0a 100644
--- a/reactos/base/applications/sndvol32/lang/de-DE.rc
+++ b/reactos/base/applications/sndvol32/lang/de-DE.rc
@@ -19,7 +19,7 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_SNDVOL32 "Lautstrke Einstellungen"
+ IDS_SNDVOL32 "Lautstrke-Einstellungen"
IDS_NOMIXERDEVICES "Es sind keine aktiven Mixer vorhanden! Die Anwendung wird jetzt beendet."
END
diff --git a/reactos/base/applications/sndvol32/resources.h b/reactos/base/applications/sndvol32/resources.h
index 35d525345d2..0272ffecd1c 100644
--- a/reactos/base/applications/sndvol32/resources.h
+++ b/reactos/base/applications/sndvol32/resources.h
@@ -1,5 +1,4 @@
-#ifndef __SNDVOL_RESOURCES_H
-#define __SNDVOL_RESOURCES_H
+#pragma once
#define IDM_MAINMENU 101
@@ -22,5 +21,3 @@
#define IDS_SNDVOL32 100
#define IDS_NOMIXERDEVICES 101
-
-#endif /* __SNDVOL_RESOURCES_H */
diff --git a/reactos/base/applications/taskmgr/about.h b/reactos/base/applications/taskmgr/about.h
index 4c62a2f65ef..07269a8f7c7 100644
--- a/reactos/base/applications/taskmgr/about.h
+++ b/reactos/base/applications/taskmgr/about.h
@@ -20,9 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __ABOUT_H
-#define __ABOUT_H
+#pragma once
void OnAbout(void);
-
-#endif /* __ABOUT_H */
diff --git a/reactos/base/applications/taskmgr/affinity.h b/reactos/base/applications/taskmgr/affinity.h
index db0b15273f5..7c93801d507 100644
--- a/reactos/base/applications/taskmgr/affinity.h
+++ b/reactos/base/applications/taskmgr/affinity.h
@@ -20,9 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __AFFINITY_H
-#define __AFFINITY_H
+#pragma once
void ProcessPage_OnSetAffinity(void);
-
-#endif /* __AFFINITY_H */
diff --git a/reactos/base/applications/taskmgr/applpage.h b/reactos/base/applications/taskmgr/applpage.h
index 82bb4cfb6ba..f75a76ad2a3 100644
--- a/reactos/base/applications/taskmgr/applpage.h
+++ b/reactos/base/applications/taskmgr/applpage.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __APPLICATIONPAGE_H
-#define __APPLICATIONPAGE_H
+#pragma once
extern HWND hApplicationPage; /* Application List Property Page */
@@ -43,5 +42,3 @@ void ApplicationPage_OnWindowsBringToFront(void);
void ApplicationPage_OnSwitchTo(void);
void ApplicationPage_OnEndTask(void);
void ApplicationPage_OnGotoProcess(void);
-
-#endif /* __APPLICATIONPAGE_H */
diff --git a/reactos/base/applications/taskmgr/column.h b/reactos/base/applications/taskmgr/column.h
index 90dc6c42ecb..9aeb3ec4cfd 100644
--- a/reactos/base/applications/taskmgr/column.h
+++ b/reactos/base/applications/taskmgr/column.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __COLUMN_H
-#define __COLUMN_H
+#pragma once
#define COLUMN_IMAGENAME 0
#define COLUMN_PID 1
@@ -110,5 +109,3 @@ void ProcessPage_OnViewSelectColumns(void);
void AddColumns(void);
void SaveColumnSettings(void);
void UpdateColumnDataHints(void);
-
-#endif /* __COLUMN_H */
diff --git a/reactos/base/applications/taskmgr/debug.h b/reactos/base/applications/taskmgr/debug.h
index d4ee7adbb24..85041340431 100644
--- a/reactos/base/applications/taskmgr/debug.h
+++ b/reactos/base/applications/taskmgr/debug.h
@@ -20,9 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __DEBUG_H
-#define __DEBUG_H
+#pragma once
void ProcessPage_OnDebug(void);
-
-#endif /* __DEBUG_H */
diff --git a/reactos/base/applications/taskmgr/endproc.h b/reactos/base/applications/taskmgr/endproc.h
index 1238177ee8e..934a4c122be 100644
--- a/reactos/base/applications/taskmgr/endproc.h
+++ b/reactos/base/applications/taskmgr/endproc.h
@@ -20,10 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __ENDPROC_H
-#define __ENDPROC_H
+#pragma once
void ProcessPage_OnEndProcess(void);
void ProcessPage_OnEndProcessTree(void);
-
-#endif /* __ENDPROC_H */
diff --git a/reactos/base/applications/taskmgr/graph.h b/reactos/base/applications/taskmgr/graph.h
index 3dd1ea5947f..d990f51f155 100644
--- a/reactos/base/applications/taskmgr/graph.h
+++ b/reactos/base/applications/taskmgr/graph.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __GRAPH_H
-#define __GRAPH_H
+#pragma once
#ifdef __cplusplus
extern "C" {
@@ -41,5 +40,3 @@ INT_PTR CALLBACK Graph_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP
#ifdef __cplusplus
};
#endif
-
-#endif /* __GRAPH_H */
diff --git a/reactos/base/applications/taskmgr/graphctl.h b/reactos/base/applications/taskmgr/graphctl.h
index 2d315a31ef9..e924716e3e9 100644
--- a/reactos/base/applications/taskmgr/graphctl.h
+++ b/reactos/base/applications/taskmgr/graphctl.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __GRAPH_CTRL_H__
-#define __GRAPH_CTRL_H__
+#pragma once
#define MAX_PLOTS 4
#define MAX_CTRLS 4
@@ -110,5 +109,3 @@ INT_PTR CALLBACK GraphCtrl_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA
#ifdef __cplusplus
}
#endif
-
-#endif /* __GRAPH_CTRL_H__ */
diff --git a/reactos/base/applications/taskmgr/lang/de-DE.rc b/reactos/base/applications/taskmgr/lang/de-DE.rc
index 97a3f79e0b3..53b93098ca0 100644
--- a/reactos/base/applications/taskmgr/lang/de-DE.rc
+++ b/reactos/base/applications/taskmgr/lang/de-DE.rc
@@ -573,7 +573,7 @@ BEGIN
ID_FILE_NEW "Fhrt ein neues Programm aus."
ID_OPTIONS_ALWAYSONTOP "Task-Manager bleibt im Vordergrund, wenn nicht minimiert."
ID_OPTIONS_MINIMIZEONUSE
- "Task-Manager wird minimiert wenn ein SwitchTo-Vorgang durchgefhrt wird."
+ "Task-Manager wird minimiert, wenn ein SwitchTo-Vorgang durchgefhrt wird."
ID_OPTIONS_HIDEWHENMINIMIZED "Blendet den Task-Manager aus, wenn er minimiert ist."
ID_VIEW_REFRESH "Veranlasst den Task-Manager zur sofortigen Aktualisierung, unabhngig von der Geschwindigkeitseinstellung."
ID_VIEW_LARGE "Zeigt Tasks als groe Symbole an."
@@ -596,9 +596,9 @@ BEGIN
ID_WINDOWS_BRINGTOFRONT "Zeigt das Fenster im Vordergrund an, aber wechselt nicht zu diesem."
ID_HELP_TOPICS "Zeigt die Hilfethemen des Taskmanagers an."
ID_HELP_ABOUT "Zeigt Programminformationen, Versionsnummer und Copyright an."
- ID_FILE_EXIT "Beendet den Task-Manager."
+ ID_FILE_EXIT "Beendet den Taskmanager."
ID_OPTIONS_SHOW16BITTASKS
- "Zeigt die 16-Bit Tasks unter der zugehrigen ntvdm.exe an."
+ "Zeigt die 16-Bit-Tasks unter der zugehrigen ntvdm.exe an."
ID_VIEW_SELECTCOLUMNS "Legt fest welche Spalten auf der Registerkarte Prozesse angezeigt werden."
ID_VIEW_SHOWKERNELTIMES "Zeigt die Kernel-Zeiten in den Systemmonitordiagrammen an."
ID_VIEW_CPUHISTORY_ONEGRAPHALL
@@ -675,7 +675,7 @@ BEGIN
IDS_MENU_SHOWKERNELTIMES "&Kernel-Zeiten anzeigen"
IDS_CREATENEWTASK "Neuen Task erstellen"
IDS_CREATENEWTASK_DESC "Geben Sie Programme, Ordner, Dokumente oder Internetressourcen an, die geffnet werden sollen."
- IDS_MSG_ACCESSPROCESSAFF "Zugriff auf die / nderung der Prozess Affinitt nicht mglich"
+ IDS_MSG_ACCESSPROCESSAFF "Zugriff auf die / nderung der Prozessaffinitt nicht mglich"
IDS_MSG_PROCESSONEPRO "Der Prozess muss eine Zugehrigkeit zu mindestens einem Prozessor aufweisen."
IDS_MSG_INVALIDOPTION "Ungltige Auswahl"
IDS_MSG_UNABLEDEBUGPROCESS "Kann Prozess nicht debuggen"
diff --git a/reactos/base/applications/taskmgr/optnmenu.h b/reactos/base/applications/taskmgr/optnmenu.h
index 9312d38ee2d..50a8251fa42 100644
--- a/reactos/base/applications/taskmgr/optnmenu.h
+++ b/reactos/base/applications/taskmgr/optnmenu.h
@@ -24,8 +24,7 @@
* Menu item handlers for the options menu.
*/
-#ifndef __OPTNMENU_H
-#define __OPTNMENU_H
+#pragma once
#define OPTIONS_MENU_INDEX 1
@@ -33,5 +32,3 @@ void TaskManager_OnOptionsAlwaysOnTop(void);
void TaskManager_OnOptionsMinimizeOnUse(void);
void TaskManager_OnOptionsHideWhenMinimized(void);
void TaskManager_OnOptionsShow16BitTasks(void);
-
-#endif /* __OPTNMENU_H */
diff --git a/reactos/base/applications/taskmgr/perfdata.h b/reactos/base/applications/taskmgr/perfdata.h
index 68661f5f5e7..00c2d6dc21a 100644
--- a/reactos/base/applications/taskmgr/perfdata.h
+++ b/reactos/base/applications/taskmgr/perfdata.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __PERFDATA_H
-#define __PERFDATA_H
+#pragma once
#ifdef __cplusplus
extern "C" {
@@ -106,5 +105,3 @@ ULONG PerfDataGetTotalThreadCount(void);
#ifdef __cplusplus
};
#endif
-
-#endif /* __PERFDATA_H */
diff --git a/reactos/base/applications/taskmgr/perfpage.h b/reactos/base/applications/taskmgr/perfpage.h
index e6ce095be89..f1e4403f37c 100644
--- a/reactos/base/applications/taskmgr/perfpage.h
+++ b/reactos/base/applications/taskmgr/perfpage.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __PERFORMANCEPAGE_H
-#define __PERFORMANCEPAGE_H
+#pragma once
#ifdef __cplusplus
extern "C" {
@@ -37,5 +36,3 @@ void PerformancePage_OnViewCPUHistoryOneGraphPerCPU(void);
#ifdef __cplusplus
};
#endif
-
-#endif /* __PERFORMANCEPAGE_H */
diff --git a/reactos/base/applications/taskmgr/priority.h b/reactos/base/applications/taskmgr/priority.h
index 04bf2b6f901..5d8f18cc468 100644
--- a/reactos/base/applications/taskmgr/priority.h
+++ b/reactos/base/applications/taskmgr/priority.h
@@ -20,9 +20,6 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __PRIORITY_H
-#define __PRIORITY_H
+#pragma once
void DoSetPriority(DWORD priority);
-
-#endif /* __PRIORITY_H */
diff --git a/reactos/base/applications/taskmgr/proclist.h b/reactos/base/applications/taskmgr/proclist.h
index 1099f1b4a3f..1df2753384b 100644
--- a/reactos/base/applications/taskmgr/proclist.h
+++ b/reactos/base/applications/taskmgr/proclist.h
@@ -20,11 +20,8 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __PROCLIST_H
-#define __PROCLIST_H
+#pragma once
INT_PTR CALLBACK ProcessListWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
extern WNDPROC OldProcessListWndProc;
-
-#endif /* __PROCLIST_H */
diff --git a/reactos/base/applications/taskmgr/procpage.h b/reactos/base/applications/taskmgr/procpage.h
index ac9a57a9151..ff244a9ab6a 100644
--- a/reactos/base/applications/taskmgr/procpage.h
+++ b/reactos/base/applications/taskmgr/procpage.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __PROCESSPAGE_H
-#define __PROCESSPAGE_H
+#pragma once
extern HWND hProcessPage; /* Process List Property Page */
extern HWND hProcessPageListCtrl; /* Process ListCtrl Window */
@@ -32,5 +31,3 @@ extern HWND hProcessPageShowAllProcessesButton; /* Process Show All Processes c
INT_PTR CALLBACK ProcessPageWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
void RefreshProcessPage(void);
DWORD GetSelectedProcessId(void);
-
-#endif /* __PROCESSPAGE_H */
diff --git a/reactos/base/applications/taskmgr/run.h b/reactos/base/applications/taskmgr/run.h
index b71036468c9..ef972ff6ecb 100644
--- a/reactos/base/applications/taskmgr/run.h
+++ b/reactos/base/applications/taskmgr/run.h
@@ -28,8 +28,7 @@
* jholderness@geocities.com
*/
-#ifndef __RUN_H
-#define __RUN_H
+#pragma once
void TaskManager_OnFileNew(void);
@@ -50,5 +49,3 @@ UINT uFlags);
#define RFF_CALCDIRECTORY 0x04 /* Calculates the working directory from the file name. */
#define RFF_NOLABEL 0x08 /* Removes the edit box label. */
#define RFF_NOSEPARATEMEM 0x20 /* Removes the Separate Memory Space check box (Windows NT only). */
-
-#endif /* __RUN_H */
diff --git a/reactos/base/applications/taskmgr/taskmgr.h b/reactos/base/applications/taskmgr/taskmgr.h
index 22c0b89fa9d..16eaad8224a 100644
--- a/reactos/base/applications/taskmgr/taskmgr.h
+++ b/reactos/base/applications/taskmgr/taskmgr.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __TASKMGR_H__
-#define __TASKMGR_H__
+#pragma once
#ifdef __cplusplus
extern "C" {
@@ -124,5 +123,3 @@ LPTSTR GetLastErrorText( LPTSTR lpszBuf, DWORD dwSize );
#ifdef __cplusplus
}
#endif
-
-#endif /* __TASKMGR_H__ */
diff --git a/reactos/base/applications/taskmgr/trayicon.h b/reactos/base/applications/taskmgr/trayicon.h
index f9d4bc5293b..1b51c5571b8 100644
--- a/reactos/base/applications/taskmgr/trayicon.h
+++ b/reactos/base/applications/taskmgr/trayicon.h
@@ -20,8 +20,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#ifndef __TRAYICON_H
-#define __TRAYICON_H
+#pragma once
#define WM_ONTRAYICON WM_USER + 5
@@ -29,5 +28,3 @@ HICON TrayIcon_GetProcessorUsageIcon(void);
BOOL TrayIcon_ShellAddTrayIcon(void);
BOOL TrayIcon_ShellRemoveTrayIcon(void);
BOOL TrayIcon_ShellUpdateTrayIcon(void);
-
-#endif /* __TRAYICON_H */
diff --git a/reactos/base/applications/winhlp32/De.rc b/reactos/base/applications/winhlp32/De.rc
index 0ec40add40f..2e14f70ad84 100644
--- a/reactos/base/applications/winhlp32/De.rc
+++ b/reactos/base/applications/winhlp32/De.rc
@@ -128,4 +128,3 @@ END
MENUITEM "Systemfarben verwenden", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Fr.rc b/reactos/base/applications/winhlp32/Fr.rc
index 2199e37ab9e..cedb0f694b7 100644
--- a/reactos/base/applications/winhlp32/Fr.rc
+++ b/reactos/base/applications/winhlp32/Fr.rc
@@ -131,4 +131,3 @@ BEGIN
MENUITEM "Utiliser les couleurs système", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/It.rc b/reactos/base/applications/winhlp32/It.rc
index cd16e4058bf..b5c53929bf4 100644
--- a/reactos/base/applications/winhlp32/It.rc
+++ b/reactos/base/applications/winhlp32/It.rc
@@ -89,4 +89,3 @@ STID_FILE_NOT_FOUND_s "Non è stato possibile trovare '%s'. Vuoi cercare questo
STID_NO_RICHEDIT "Non è stato possibile trovare un'implementazione richedit... Annullando"
STID_PSH_INDEX, "Argomenti di aiuto: "
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Ja.rc b/reactos/base/applications/winhlp32/Ja.rc
index a06b5f1df65..b73d18dd192 100644
--- a/reactos/base/applications/winhlp32/Ja.rc
+++ b/reactos/base/applications/winhlp32/Ja.rc
@@ -128,4 +128,3 @@ BEGIN
MENUITEM "システム カラーを使う", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Lt.rc b/reactos/base/applications/winhlp32/Lt.rc
index 5ee53f8aa16..f8e78681aae 100644
--- a/reactos/base/applications/winhlp32/Lt.rc
+++ b/reactos/base/applications/winhlp32/Lt.rc
@@ -129,4 +129,3 @@ BEGIN
MENUITEM "Naudoti sistemos spalvas", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Nl.rc b/reactos/base/applications/winhlp32/Nl.rc
index a7938406b65..029d58265b9 100644
--- a/reactos/base/applications/winhlp32/Nl.rc
+++ b/reactos/base/applications/winhlp32/Nl.rc
@@ -127,4 +127,3 @@ BEGIN
MENUITEM "Gebruik systeem kleuren", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Pt.rc b/reactos/base/applications/winhlp32/Pt.rc
index 5598bd77cd6..28933a22a6f 100644
--- a/reactos/base/applications/winhlp32/Pt.rc
+++ b/reactos/base/applications/winhlp32/Pt.rc
@@ -204,4 +204,3 @@ BEGIN
MENUITEM "Usar cores do sistema", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Rm.rc b/reactos/base/applications/winhlp32/Rm.rc
index 17293875f99..3b2a1fa9403 100644
--- a/reactos/base/applications/winhlp32/Rm.rc
+++ b/reactos/base/applications/winhlp32/Rm.rc
@@ -92,4 +92,3 @@ STID_FILE_NOT_FOUND_s "Cannot find '%s'. Do you want to find this file yoursel
STID_NO_RICHEDIT "Cannot find a richedit implementation... Aborting"
STID_PSH_INDEX, "Help topics: "
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Ro.rc b/reactos/base/applications/winhlp32/Ro.rc
index eaa530bc5bb..1f916ac21d5 100644
--- a/reactos/base/applications/winhlp32/Ro.rc
+++ b/reactos/base/applications/winhlp32/Ro.rc
@@ -130,4 +130,3 @@ BEGIN
MENUITEM "Utilizează culorile sistemului", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Ru.rc b/reactos/base/applications/winhlp32/Ru.rc
index a476b344c6c..165094f4720 100644
--- a/reactos/base/applications/winhlp32/Ru.rc
+++ b/reactos/base/applications/winhlp32/Ru.rc
@@ -121,4 +121,3 @@ BEGIN
MENUITEM "Использовать системные цвета", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Si.rc b/reactos/base/applications/winhlp32/Si.rc
index 310ef45a8f7..527b45431ee 100644
--- a/reactos/base/applications/winhlp32/Si.rc
+++ b/reactos/base/applications/winhlp32/Si.rc
@@ -126,4 +126,3 @@ BEGIN
MENUITEM "Uporabi sistemske barve", MNID_CTXT_SYSTEM_COLORS
END
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/Zh.rc b/reactos/base/applications/winhlp32/Zh.rc
index a68b699c44f..ed20356cf47 100644
--- a/reactos/base/applications/winhlp32/Zh.rc
+++ b/reactos/base/applications/winhlp32/Zh.rc
@@ -160,4 +160,3 @@ STID_FILE_NOT_FOUND_s "不能開啟檔案 '%s'. 你想要自己找這個檔案
STID_NO_RICHEDIT "找不到 richedit... 終止"
STID_PSH_INDEX, "幫助內容: "
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/winhlp32/rsrc.rc b/reactos/base/applications/winhlp32/rsrc.rc
index e45fc8a7ce5..28d8de35fe3 100644
--- a/reactos/base/applications/winhlp32/rsrc.rc
+++ b/reactos/base/applications/winhlp32/rsrc.rc
@@ -27,25 +27,27 @@ IDI_WINHELP ICON DISCARDABLE winhelp.ico
#include "Bg.rc"
#include "Cs.rc"
#include "Da.rc"
-#include "De.rc"
#include "En.rc"
#include "Es.rc"
#include "Fi.rc"
-#include "Fr.rc"
#include "Hu.rc"
-#include "It.rc"
-#include "Ja.rc"
#include "Ko.rc"
-#include "Lt.rc"
-#include "Nl.rc"
#include "No.rc"
#include "Pl.rc"
+#include "Sk.rc"
+#include "Sv.rc"
+#include "Tr.rc"
+
+/* UTF-8 */
+#include "De.rc"
+#include "Fr.rc"
+#include "It.rc"
+#include "Ja.rc"
+#include "Lt.rc"
+#include "Nl.rc"
#include "Pt.rc"
#include "Rm.rc"
#include "Ro.rc"
#include "Ru.rc"
#include "Si.rc"
-#include "Sk.rc"
-#include "Sv.rc"
-#include "Tr.rc"
#include "Zh.rc"
diff --git a/reactos/base/applications/wordpad/Da.rc b/reactos/base/applications/wordpad/Da.rc
index 34789469e5e..882cca7e8d8 100644
--- a/reactos/base/applications/wordpad/Da.rc
+++ b/reactos/base/applications/wordpad/Da.rc
@@ -46,7 +46,7 @@ BEGIN
MENUITEM "&Fjern\tDEL", ID_EDIT_CLEAR
MENUITEM "&Marker alt\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Sg efter...\tCrtl+F", ID_FIND
+ MENUITEM "&Sg efter...\tCtrl+F", ID_FIND
MENUITEM "Sg efter &nste\tF3", ID_FIND_NEXT
MENUITEM "E&rstat...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -106,6 +106,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Sort", ID_COLOR_BLACK
+ MENUITEM "Mrkerd", ID_COLOR_MAROON
+ MENUITEM "Grn", ID_COLOR_GREEN
+ MENUITEM "Oliven" ID_COLOR_OLIVE
+ MENUITEM "Navy" ID_COLOR_NAVY
+ MENUITEM "Lilla" ID_COLOR_PURPLE
+ MENUITEM "Teal" ID_COLOR_TEAL
+ MENUITEM "Gr" ID_COLOR_GRAY
+ MENUITEM "Slv" ID_COLOR_SILVER
+ MENUITEM "Rd" ID_COLOR_RED
+ MENUITEM "Lime" ID_COLOR_LIME
+ MENUITEM "Gul" ID_COLOR_YELLOW
+ MENUITEM "Bl" ID_COLOR_BLUE
+ MENUITEM "Violet" ID_COLOR_FUCHSIA
+ MENUITEM "Cyan" ID_COLOR_AQUA
+ MENUITEM "Hvid" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Dato og tid"
@@ -218,7 +242,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Forrige side"
STRING_PREVIEW_TWOPAGES, "To sider"
STRING_PREVIEW_ONEPAGE, "n side"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Luk"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/base/applications/wordpad/De.rc b/reactos/base/applications/wordpad/De.rc
index d552d9c21a5..ca11edd8bea 100644
--- a/reactos/base/applications/wordpad/De.rc
+++ b/reactos/base/applications/wordpad/De.rc
@@ -108,6 +108,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Schwarz" ID_COLOR_BLACK
+ MENUITEM "Kastanienbraun" ID_COLOR_MAROON
+ MENUITEM "Grün" ID_COLOR_GREEN
+ MENUITEM "Olivgrün" ID_COLOR_OLIVE
+ MENUITEM "Dunkelblau" ID_COLOR_NAVY
+ MENUITEM "Lila" ID_COLOR_PURPLE
+ MENUITEM "Blaugrün" ID_COLOR_TEAL
+ MENUITEM "Grau" ID_COLOR_GRAY
+ MENUITEM "Silber" ID_COLOR_SILVER
+ MENUITEM "Rot" ID_COLOR_RED
+ MENUITEM "Hellgrün" ID_COLOR_LIME
+ MENUITEM "Gelb" ID_COLOR_YELLOW
+ MENUITEM "Blau" ID_COLOR_BLUE
+ MENUITEM "Pink" ID_COLOR_FUCHSIA
+ MENUITEM "Aquamarin" ID_COLOR_AQUA
+ MENUITEM "Weiß" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Datum und Uhrzeit"
@@ -218,9 +242,13 @@ BEGIN
STRING_PREVIEW_PRINT, "&Drucken"
STRING_PREVIEW_NEXTPAGE, "&Nächste"
STRING_PREVIEW_PREVPAGE, "&Vorherige"
- STRING_PREVIEW_TWOPAGES, "Zwei Seiten"
- STRING_PREVIEW_ONEPAGE, "Eine Seite"
+ STRING_PREVIEW_TWOPAGES, "&Zwei Seiten"
+ STRING_PREVIEW_ONEPAGE, "&Eine Seite"
+ STRING_PREVIEW_ZOOMIN, "Ver&größern"
+ STRING_PREVIEW_ZOOMOUT, "Ver&kleinern"
STRING_PREVIEW_CLOSE, "&Schließen"
+ STRING_PREVIEW_PAGE, "Seite"
+ STRING_PREVIEW_PAGES, "Seiten"
END
STRINGTABLE DISCARDABLE
@@ -246,4 +274,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "Drucken ist nicht implementiert"
STRING_MAX_TAB_STOPS, "Es können nur maximal 32 Tabstopps definiert werden."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/En.rc b/reactos/base/applications/wordpad/En.rc
index b6ade3aaf3d..0dec19bc650 100644
--- a/reactos/base/applications/wordpad/En.rc
+++ b/reactos/base/applications/wordpad/En.rc
@@ -46,7 +46,7 @@ BEGIN
MENUITEM "&Clear\tDEL", ID_EDIT_CLEAR
MENUITEM "&Select all\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Find...\tCrtl+F", ID_FIND
+ MENUITEM "&Find...\tCtrl+F", ID_FIND
MENUITEM "Find &next\tF3", ID_FIND_NEXT
MENUITEM "&Replace...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -106,6 +106,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Black", ID_COLOR_BLACK
+ MENUITEM "Maroon", ID_COLOR_MAROON
+ MENUITEM "Green", ID_COLOR_GREEN
+ MENUITEM "Olive" ID_COLOR_OLIVE
+ MENUITEM "Navy" ID_COLOR_NAVY
+ MENUITEM "Purple" ID_COLOR_PURPLE
+ MENUITEM "Teal" ID_COLOR_TEAL
+ MENUITEM "Gray" ID_COLOR_GRAY
+ MENUITEM "Silver" ID_COLOR_SILVER
+ MENUITEM "Red" ID_COLOR_RED
+ MENUITEM "Lime" ID_COLOR_LIME
+ MENUITEM "Yellow" ID_COLOR_YELLOW
+ MENUITEM "Blue" ID_COLOR_BLUE
+ MENUITEM "Fuchsia" ID_COLOR_FUCHSIA
+ MENUITEM "Aqua" ID_COLOR_AQUA
+ MENUITEM "White" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Date and time"
@@ -210,7 +234,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Previous page"
STRING_PREVIEW_TWOPAGES, "Two pages"
STRING_PREVIEW_ONEPAGE, "One page"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Close"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
STRING_UNITS_CM, "cm"
END
diff --git a/reactos/base/applications/wordpad/Fr.rc b/reactos/base/applications/wordpad/Fr.rc
index 3b518288639..54ae0b992b8 100644
--- a/reactos/base/applications/wordpad/Fr.rc
+++ b/reactos/base/applications/wordpad/Fr.rc
@@ -49,7 +49,7 @@ BEGIN
MENUITEM "&Effacer\tDel", ID_EDIT_CLEAR
MENUITEM "&Sélectionner tout\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Rechercher...\tCrtl+F", ID_FIND
+ MENUITEM "&Rechercher...\tCtrl+F", ID_FIND
MENUITEM "Rechercher le &suivant\tF3", ID_FIND_NEXT
MENUITEM "&Remplacer...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -109,6 +109,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Noir" ID_COLOR_BLACK
+ MENUITEM "Marron" ID_COLOR_MAROON
+ MENUITEM "Vert" ID_COLOR_GREEN
+ MENUITEM "Olive" ID_COLOR_OLIVE
+ MENUITEM "Bleu marine" ID_COLOR_NAVY
+ MENUITEM "Pourpre" ID_COLOR_PURPLE
+ MENUITEM "Sarcelle" ID_COLOR_TEAL
+ MENUITEM "Gris" ID_COLOR_GRAY
+ MENUITEM "Argent" ID_COLOR_SILVER
+ MENUITEM "Rouge" ID_COLOR_RED
+ MENUITEM "Citron vert" ID_COLOR_LIME
+ MENUITEM "Jaune" ID_COLOR_YELLOW
+ MENUITEM "Bleu" ID_COLOR_BLUE
+ MENUITEM "Fuchsia" ID_COLOR_FUCHSIA
+ MENUITEM "Eau" ID_COLOR_AQUA
+ MENUITEM "Blanc" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Date et heure"
@@ -221,7 +245,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Page précédente"
STRING_PREVIEW_TWOPAGES, "Deux pages"
STRING_PREVIEW_ONEPAGE, "Une page"
+ STRING_PREVIEW_ZOOMIN, "Zoom avant"
+ STRING_PREVIEW_ZOOMOUT, "Zoom arrière"
STRING_PREVIEW_CLOSE, "Fermer"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
@@ -247,4 +275,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "L'impression n'est pas implémentée"
STRING_MAX_TAB_STOPS, "Impossible d'ajouter plus de 32 taquets de tabulation."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/Hu.rc b/reactos/base/applications/wordpad/Hu.rc
index 74926e1e597..3694062e355 100644
--- a/reactos/base/applications/wordpad/Hu.rc
+++ b/reactos/base/applications/wordpad/Hu.rc
@@ -46,7 +46,7 @@ BEGIN
MENUITEM "Tr&ls\tDel", ID_EDIT_CLEAR
MENUITEM "M&indet kijelli\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Find...\tCrtl+F", ID_FIND
+ MENUITEM "&Find...\tCtrl+F", ID_FIND
MENUITEM "Find &next\tF3", ID_FIND_NEXT
MENUITEM "&Replace...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -106,6 +106,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Black", ID_COLOR_BLACK
+ MENUITEM "Maroon", ID_COLOR_MAROON
+ MENUITEM "Green", ID_COLOR_GREEN
+ MENUITEM "Olive" ID_COLOR_OLIVE
+ MENUITEM "Navy" ID_COLOR_NAVY
+ MENUITEM "Purple" ID_COLOR_PURPLE
+ MENUITEM "Teal" ID_COLOR_TEAL
+ MENUITEM "Gray" ID_COLOR_GRAY
+ MENUITEM "Silver" ID_COLOR_SILVER
+ MENUITEM "Red" ID_COLOR_RED
+ MENUITEM "Lime" ID_COLOR_LIME
+ MENUITEM "Yellow" ID_COLOR_YELLOW
+ MENUITEM "Blue" ID_COLOR_BLUE
+ MENUITEM "Fuchsia" ID_COLOR_FUCHSIA
+ MENUITEM "Aqua" ID_COLOR_AQUA
+ MENUITEM "White" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Date and time"
@@ -218,7 +242,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Previous page"
STRING_PREVIEW_TWOPAGES, "Two pages"
STRING_PREVIEW_ONEPAGE, "One page"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Close"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/base/applications/wordpad/It.rc b/reactos/base/applications/wordpad/It.rc
new file mode 100644
index 00000000000..99968411776
--- /dev/null
+++ b/reactos/base/applications/wordpad/It.rc
@@ -0,0 +1,266 @@
+/* Italian resource for Wine WordPad
+ *
+ * Copyright 2010 by Luca Bennati
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wordpad.h"
+
+/*UTF-8*/
+#pragma code_page(65001)
+
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+IDM_MAINMENU MENU DISCARDABLE
+BEGIN
+ POPUP "&File"
+ BEGIN
+ MENUITEM "&Nuovo...\tCtrl+N", ID_FILE_NEW
+ MENUITEM "&Apri...\tCtrl+O", ID_FILE_OPEN
+ MENUITEM "&Salva\tCtrl+S", ID_FILE_SAVE
+ MENUITEM "Salva &come...", ID_FILE_SAVEAS
+ MENUITEM SEPARATOR
+ MENUITEM "&Stampa...\tCtrl+P", ID_PRINT
+ MENUITEM "An&teprima di stampa...", ID_PREVIEW
+ MENUITEM "&Impostazioni di stampa...", ID_PRINTSETUP
+ MENUITEM SEPARATOR
+ MENUITEM "E&sci", ID_FILE_EXIT
+ END
+ POPUP "&Modifica"
+ BEGIN
+ MENUITEM "&Annulla\tCtrl+Z", ID_EDIT_UNDO
+ MENUITEM "&Rifai\tCtrl+Y", ID_EDIT_REDO
+ MENUITEM SEPARATOR
+ MENUITEM "&Taglia\tCtrl+X", ID_EDIT_CUT
+ MENUITEM "&Copia\tCtrl+C", ID_EDIT_COPY
+ MENUITEM "&Incolla\tCtrl+V", ID_EDIT_PASTE
+ MENUITEM "Ca&ncella\tDEL", ID_EDIT_CLEAR
+ MENUITEM "&Seleziona tutto\tCtrl+A", ID_EDIT_SELECTALL
+ MENUITEM SEPARATOR
+ MENUITEM "T&rova...\tCtrl+F", ID_FIND
+ MENUITEM "Trova s&uccessivo\tF3", ID_FIND_NEXT
+ MENUITEM "S&ostituisci...\tCtrl+H", ID_REPLACE
+ MENUITEM SEPARATOR
+ MENUITEM "Sola &Lettura", ID_EDIT_READONLY
+ MENUITEM "&Modificato", ID_EDIT_MODIFIED
+ MENUITEM SEPARATOR
+ POPUP "E&xtra"
+ BEGIN
+ MENUITEM "&Informazioni sulla selezione", ID_EDIT_SELECTIONINFO
+ MENUITEM "&Formato del carattere", ID_EDIT_CHARFORMAT
+ MENUITEM "Formato del &def. char", ID_EDIT_DEFCHARFORMAT
+ MENUITEM "Formato del ¶grafo", ID_EDIT_PARAFORMAT
+ MENUITEM "&Ricava il testo", ID_EDIT_GETTEXT
+ END
+ END
+ POPUP "&Visualizza"
+ BEGIN
+ MENUITEM "Barra degli &strumenti", ID_TOGGLE_TOOLBAR
+ MENUITEM "Barra del &formato", ID_TOGGLE_FORMATBAR
+ MENUITEM "&Righello", ID_TOGGLE_RULER
+ MENUITEM "Barra dello s&tato", ID_TOGGLE_STATUSBAR
+ MENUITEM SEPARATOR
+ MENUITEM "&Opzioni...", ID_VIEWPROPERTIES
+ END
+ POPUP "&Inserisci"
+ BEGIN
+ MENUITEM "&Data e ora...", ID_DATETIME
+ END
+ POPUP "F&ormato"
+ BEGIN
+ MENUITEM "&Font...", ID_FONTSETTINGS
+ MENUITEM "&Elenco" ID_BULLET
+ MENUITEM "&Paragrafo..." ID_PARAFORMAT
+ MENUITEM "&Tabulazioni..." ID_TABSTOPS
+ POPUP "Sfon&do"
+ BEGIN
+ MENUITEM "Di &sistema\tCtrl+1", ID_BACK_1
+ MENUITEM "&Giallo di PostThat\tCtrl+2", ID_BACK_2
+ END
+ END
+ POPUP "&Aiuto"
+ BEGIN
+ MENUITEM "&Su Wine Wordpad" ID_ABOUT
+ END
+END
+
+IDM_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "&Taglia", ID_EDIT_CUT
+ MENUITEM "&Copia", ID_EDIT_COPY
+ MENUITEM "&Incolla", ID_EDIT_PASTE
+ MENUITEM SEPARATOR
+ MENUITEM "&Elenco" ID_BULLET
+ MENUITEM "&Paragrafo..." ID_PARAFORMAT
+ END
+END
+
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Nero" ID_COLOR_BLACK
+ MENUITEM "Marrone rossiccio" ID_COLOR_MAROON
+ MENUITEM "Verde" ID_COLOR_GREEN
+ MENUITEM "Verde oliva" ID_COLOR_OLIVE
+ MENUITEM "Blu oltremare" ID_COLOR_NAVY
+ MENUITEM "Propora" ID_COLOR_PURPLE
+ MENUITEM "Teal" ID_COLOR_TEAL
+ MENUITEM "Grigio" ID_COLOR_GRAY
+ MENUITEM "Argento" ID_COLOR_SILVER
+ MENUITEM "Rosso" ID_COLOR_RED
+ MENUITEM "Verde cedro" ID_COLOR_LIME
+ MENUITEM "Giallo" ID_COLOR_YELLOW
+ MENUITEM "Blu" ID_COLOR_BLUE
+ MENUITEM "Fucsia" ID_COLOR_FUCHSIA
+ MENUITEM "Aqua" ID_COLOR_AQUA
+ MENUITEM "Bianco" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
+IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "Data e ora"
+FONT 10, "MS Sans Serif"
+BEGIN
+ LTEXT "Formati disponibili",-1,3,2,100,15
+ LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY
+ PUSHBUTTON "&OK",IDOK,87,12,40,12
+ PUSHBUTTON "&Annulla",IDCANCEL,87,26,40,12
+END
+
+IDD_NEWFILE DIALOG DISCARDABLE 30, 20, 140, 80
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "Nuovo"
+FONT 10, "MS Sans Serif"
+BEGIN
+ LTEXT "Nuovo tipo di documento",-1,3,2,100,15
+ LISTBOX IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT
+ PUSHBUTTON "&OK",IDOK,97,12,40,12
+ PUSHBUTTON "&Annulla",IDCANCEL,97,26,40,12
+END
+
+IDD_PARAFORMAT DIALOG DISCARDABLE 30, 20, 200, 110
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+Caption "Formato del paragrafo"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Indentazione", -1, 10, 10, 120, 68
+ LTEXT "Sinistra", -1, 15, 22, 40, 13
+ EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13
+ LTEXT "Destra", -1, 15, 40, 40, 13
+ EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13
+ LTEXT "Prima riga", -1, 15, 58, 40, 13
+ EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13
+ LTEXT "Allineamento", -1, 15, 87, 45, 13
+ COMBOBOX IDC_PARA_ALIGN, 60, 85, 60, 60, CBS_DROPDOWNLIST
+ PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
+ PUSHBUTTON "&Annulla", IDCANCEL, 137, 33, 50, 15
+END
+
+IDD_TABSTOPS DIALOG DISCARDABLE 30, 20, 200, 110
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+Caption "Tabulazioni"
+FONT 8, "MS SHell DLg"
+BEGIN
+ GROUPBOX "Punti di fermata delle tabulazioni", -1, 10, 10, 120, 90
+ COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
+ DEFPUSHBUTTON "&Aggiungi", ID_TAB_ADD, 20, 80, 45, 15
+ PUSHBUTTON "&Rimuovi", ID_TAB_DEL, 72, 80, 45, 15
+ PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
+ PUSHBUTTON "&Annulla", IDCANCEL, 137, 33, 50, 15
+ PUSHBUTTON "Rimuovi &tutti", ID_TAB_EMPTY, 137, 51, 50, 15
+END
+
+IDD_FORMATOPTS DIALOG DISCARDABLE 0, 0, 310, 110
+STYLE DS_SYSMODAL
+Caption ""
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Linea di margine", -1, 10, 10, 150, 85
+ RADIOBUTTON "&Nessuna linea di margine", IDC_PAGEFMT_WN, 18, 25, 140, 15
+ RADIOBUTTON "Confina il testo nel &bordo della finestra", IDC_PAGEFMT_WW, 18, 45, 140, 15
+ RADIOBUTTON "Confina il testo nel &margine", IDC_PAGEFMT_WM, 18, 65, 140, 15
+ GROUPBOX "Barre", -1, 170, 10, 120, 85
+ CHECKBOX "Barra degli &strumenti", IDC_PAGEFMT_TB, 180, 20, 80, 15
+ CHECKBOX "Barra del &formato", IDC_PAGEFMT_FB, 180, 38, 80, 15
+ CHECKBOX "&Righello", IDC_PAGEFMT_RU, 180, 56, 80, 15
+ CHECKBOX "Barra dello s&tato", IDC_PAGEFMT_SB, 180, 74, 80, 15
+ LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_ALL_FILES, "Tutti i files (*.*)"
+ STRING_TEXT_FILES_TXT, "Files di testo (*.txt)"
+ STRING_TEXT_FILES_UNICODE_TXT, "Files di testo Unicode (*.txt)"
+ STRING_RICHTEXT_FILES_RTF, "Rich text format (*.rtf)"
+ STRING_NEWFILE_RICHTEXT, "Documento Rich text"
+ STRING_NEWFILE_TXT, "Documento di testo"
+ STRING_NEWFILE_TXT_UNICODE, "Documento di testo Unicode"
+ STRING_PRINTER_FILES_PRN, "File di stampa (*.PRN)"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_ALIGN_LEFT, "Sinistra"
+ STRING_ALIGN_RIGHT, "Destra"
+ STRING_ALIGN_CENTER, "Centro"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_VIEWPROPS_TITLE, "Opzioni"
+ STRING_VIEWPROPS_TEXT, "Testo"
+ STRING_VIEWPROPS_RICHTEXT, "Rich text"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_PREVIEW_PRINT, "Stampa"
+ STRING_PREVIEW_NEXTPAGE, "Prossima pagina"
+ STRING_PREVIEW_PREVPAGE, "Pagina precedente"
+ STRING_PREVIEW_TWOPAGES, "Due pagine"
+ STRING_PREVIEW_ONEPAGE, "Una pagina"
+ STRING_PREVIEW_ZOOMIN, "Ingrandisci"
+ STRING_PREVIEW_ZOOMOUT, "Rimpicciolisci"
+ STRING_PREVIEW_CLOSE, "Chiudi"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
+ STRING_UNITS_CM, "cm"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_DEFAULT_FILENAME, "Documento"
+ STRING_PROMPT_SAVE_CHANGES, "Salva i cambiamenti su '%s'?"
+ STRING_SEARCH_FINISHED, "Finita la ricerca sul documento."
+ STRING_LOAD_RICHED_FAILED, "Impossibile caricare la libreria RichEdit."
+ STRING_SAVE_LOSEFORMATTING, "Hai scelto di salvare nel formato Testo semplice, " \
+ "che causerà la perdita di tutta la formattazione. " \
+ "Sei sicuro?"
+ STRING_INVALID_NUMBER, "Numero di formato non valido"
+ STRING_OLE_STORAGE_NOT_SUPPORTED, "I documenti di storage OLE non sono supportati"
+ STRING_WRITE_FAILED, "Impossibile salvare il file."
+ STRING_WRITE_ACCESS_DENIED, "Non hai i diritti di accesso per salvare il file."
+ STRING_OPEN_FAILED, "Impossibile aprire il file."
+ STRING_OPEN_ACCESS_DENIED, "Non hai i diritti di accesso per aprire il file."
+ STRING_PRINTING_NOT_IMPLEMENTED, "Stampa non implementata"
+ STRING_MAX_TAB_STOPS, "Non si possono aggiungere più di 32 punti di fermata delle tabulazioni."
+END
diff --git a/reactos/base/applications/wordpad/Ja.rc b/reactos/base/applications/wordpad/Ja.rc
index 6e08b569c60..bd5e4c9ea94 100644
--- a/reactos/base/applications/wordpad/Ja.rc
+++ b/reactos/base/applications/wordpad/Ja.rc
@@ -49,7 +49,7 @@ BEGIN
MENUITEM "クリア(&C)\tDEL", ID_EDIT_CLEAR
MENUITEM "すべて選択(&S)\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "検索(&F)...\tCrtl+F", ID_FIND
+ MENUITEM "検索(&F)...\tCtrl+F", ID_FIND
MENUITEM "次を検索(&N)\tF3", ID_FIND_NEXT
MENUITEM "置換(&R)...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -109,6 +109,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "黒" ID_COLOR_BLACK
+ MENUITEM "茶色" ID_COLOR_MAROON
+ MENUITEM "緑" ID_COLOR_GREEN
+ MENUITEM "オリーブ" ID_COLOR_OLIVE
+ MENUITEM "紺" ID_COLOR_NAVY
+ MENUITEM "紫" ID_COLOR_PURPLE
+ MENUITEM "青緑" ID_COLOR_TEAL
+ MENUITEM "灰色" ID_COLOR_GRAY
+ MENUITEM "銀色" ID_COLOR_SILVER
+ MENUITEM "赤" ID_COLOR_RED
+ MENUITEM "黄緑" ID_COLOR_LIME
+ MENUITEM "黄" ID_COLOR_YELLOW
+ MENUITEM "青" ID_COLOR_BLUE
+ MENUITEM "赤紫" ID_COLOR_FUCHSIA
+ MENUITEM "水色" ID_COLOR_AQUA
+ MENUITEM "白" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "日付と時刻"
@@ -221,7 +245,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "前のページ"
STRING_PREVIEW_TWOPAGES, "2ページ"
STRING_PREVIEW_ONEPAGE, "1ページ"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "閉じる"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
@@ -247,4 +275,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "プリントが実装されていません。"
STRING_MAX_TAB_STOPS, "32以上なタブを追加できません。"
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/Ko.rc b/reactos/base/applications/wordpad/Ko.rc
index 2e460afdae9..81110831b75 100644
--- a/reactos/base/applications/wordpad/Ko.rc
+++ b/reactos/base/applications/wordpad/Ko.rc
@@ -47,7 +47,7 @@ BEGIN
MENUITEM "(&C)\tDEL", ID_EDIT_CLEAR
MENUITEM " (&S)\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "ã(&F)...\tCrtl+F", ID_FIND
+ MENUITEM "ã(&F)...\tCtrl+F", ID_FIND
MENUITEM " ã(&N)\tF3", ID_FIND_NEXT
MENUITEM " ٲٱ(&R)...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -107,6 +107,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "" ID_COLOR_BLACK
+ MENUITEM "" ID_COLOR_MAROON
+ MENUITEM "" ID_COLOR_GREEN
+ MENUITEM "ø" ID_COLOR_OLIVE
+ MENUITEM "£ " ID_COLOR_NAVY
+ MENUITEM "ȫ" ID_COLOR_PURPLE
+ MENUITEM " " ID_COLOR_TEAL
+ MENUITEM "ȸ" ID_COLOR_GRAY
+ MENUITEM "" ID_COLOR_SILVER
+ MENUITEM "" ID_COLOR_RED
+ MENUITEM "ӻ" ID_COLOR_LIME
+ MENUITEM "" ID_COLOR_YELLOW
+ MENUITEM "Ķ" ID_COLOR_BLUE
+ MENUITEM "ȫ" ID_COLOR_FUCHSIA
+ MENUITEM "" ID_COLOR_AQUA
+ MENUITEM "Ͼ" ID_COLOR_WHITE
+ MENUITEM "ڵ" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "¥ ð"
@@ -212,8 +236,12 @@ BEGIN
STRING_PREVIEW_PREVPAGE, " "
STRING_PREVIEW_TWOPAGES, " "
STRING_PREVIEW_ONEPAGE, " "
+ STRING_PREVIEW_ZOOMIN, "Ȯ"
+ STRING_PREVIEW_ZOOMOUT, ""
STRING_PREVIEW_CLOSE, "ݱ"
- STRING_UNITS_CM, "cm"
+ STRING_PREVIEW_PAGE, ""
+ STRING_PREVIEW_PAGES, ""
+ STRING_UNITS_CM, "cm"
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/base/applications/wordpad/Lt.rc b/reactos/base/applications/wordpad/Lt.rc
index e1781ebf90d..c9f2571ccc1 100644
--- a/reactos/base/applications/wordpad/Lt.rc
+++ b/reactos/base/applications/wordpad/Lt.rc
@@ -49,7 +49,7 @@ BEGIN
MENUITEM "&Šalinti\tDEL", ID_EDIT_CLEAR
MENUITEM "&Pažymėti viską\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "I&eškoti...\tCrtl+F", ID_FIND
+ MENUITEM "I&eškoti...\tCtrl+F", ID_FIND
MENUITEM "Iešk&oti kito\tF3", ID_FIND_NEXT
MENUITEM "Pa&keisti...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -109,6 +109,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Juoda" ID_COLOR_BLACK
+ MENUITEM "Kaštoninė" ID_COLOR_MAROON
+ MENUITEM "Žalia" ID_COLOR_GREEN
+ MENUITEM "Alyvinė" ID_COLOR_OLIVE
+ MENUITEM "Ultramarinas" ID_COLOR_NAVY
+ MENUITEM "Purpurinė" ID_COLOR_PURPLE
+ MENUITEM "Neutrali ciano" ID_COLOR_TEAL
+ MENUITEM "Pilka" ID_COLOR_GRAY
+ MENUITEM "Sidabrinė" ID_COLOR_SILVER
+ MENUITEM "Raudona" ID_COLOR_RED
+ MENUITEM "Gelsvai žalsva" ID_COLOR_LIME
+ MENUITEM "Geltona" ID_COLOR_YELLOW
+ MENUITEM "Mėlyna" ID_COLOR_BLUE
+ MENUITEM "Fuksija" ID_COLOR_FUCHSIA
+ MENUITEM "Žydra" ID_COLOR_AQUA
+ MENUITEM "Balta" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Data ir laikas"
@@ -221,7 +245,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Ankstesnis puslapis"
STRING_PREVIEW_TWOPAGES, "Du puslapiai"
STRING_PREVIEW_ONEPAGE, "Vienas puslapis"
+ STRING_PREVIEW_ZOOMIN, "Didinti"
+ STRING_PREVIEW_ZOOMOUT, "Mažinti"
STRING_PREVIEW_CLOSE, "Užverti"
+ STRING_PREVIEW_PAGE, "Puslapis"
+ STRING_PREVIEW_PAGES, "Puslapiai"
END
STRINGTABLE DISCARDABLE
@@ -247,4 +275,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "Spausdinimas nerealizuotas"
STRING_MAX_TAB_STOPS, "Negalima pridėti daugiau negu 32-jų tabuliavimo pozicijų."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/Nl.rc b/reactos/base/applications/wordpad/Nl.rc
index 10729e41df5..5741dbea9b7 100644
--- a/reactos/base/applications/wordpad/Nl.rc
+++ b/reactos/base/applications/wordpad/Nl.rc
@@ -47,7 +47,7 @@ BEGIN
MENUITEM "&Verwijderen\tDel", ID_EDIT_CLEAR
MENUITEM "&Alles selecteren\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Zoeken...\tCrtl+F", ID_FIND
+ MENUITEM "&Zoeken...\tCtrl+F", ID_FIND
MENUITEM "Zoek vo&lgende\tF3", ID_FIND_NEXT
MENUITEM "Ve&rvang...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -107,6 +107,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Zwart" ID_COLOR_BLACK
+ MENUITEM "Kastanjebruin" ID_COLOR_MAROON
+ MENUITEM "Groen" ID_COLOR_GREEN
+ MENUITEM "Olijfgroen" ID_COLOR_OLIVE
+ MENUITEM "Marineblauw" ID_COLOR_NAVY
+ MENUITEM "Paars" ID_COLOR_PURPLE
+ MENUITEM "Groenblauw" ID_COLOR_TEAL
+ MENUITEM "Grijs" ID_COLOR_GRAY
+ MENUITEM "Zilver" ID_COLOR_SILVER
+ MENUITEM "Rood" ID_COLOR_RED
+ MENUITEM "Lichtgroen" ID_COLOR_LIME
+ MENUITEM "Geel" ID_COLOR_YELLOW
+ MENUITEM "Blauw" ID_COLOR_BLUE
+ MENUITEM "Fuchsiapaars" ID_COLOR_FUCHSIA
+ MENUITEM "Zeeblauw" ID_COLOR_AQUA
+ MENUITEM "Wit" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Datum en tijd"
@@ -211,7 +235,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Vorige pagina"
STRING_PREVIEW_TWOPAGES, "Twee pagina's"
STRING_PREVIEW_ONEPAGE, "Een pagina"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Sluiten"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/base/applications/wordpad/No.rc b/reactos/base/applications/wordpad/No.rc
index 4409c30e9c6..fbca2a09bee 100644
--- a/reactos/base/applications/wordpad/No.rc
+++ b/reactos/base/applications/wordpad/No.rc
@@ -48,7 +48,7 @@ BEGIN
MENUITEM "&Fjern\tDEL", ID_EDIT_CLEAR
MENUITEM "&Merk alt\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Søk etter...\tCrtl+F", ID_FIND
+ MENUITEM "&Søk etter...\tCtrl+F", ID_FIND
MENUITEM "Søk etter &neste\tF3", ID_FIND_NEXT
MENUITEM "E&rstatt...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -108,6 +108,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Svart" ID_COLOR_BLACK
+ MENUITEM "Rødbrun" ID_COLOR_MAROON
+ MENUITEM "Grønn" ID_COLOR_GREEN
+ MENUITEM "Oliven" ID_COLOR_OLIVE
+ MENUITEM "Marineblå" ID_COLOR_NAVY
+ MENUITEM "Purpur" ID_COLOR_PURPLE
+ MENUITEM "Teal" ID_COLOR_TEAL
+ MENUITEM "Grå" ID_COLOR_GRAY
+ MENUITEM "Sølv" ID_COLOR_SILVER
+ MENUITEM "Rød" ID_COLOR_RED
+ MENUITEM "Lime-grønn" ID_COLOR_LIME
+ MENUITEM "Gul" ID_COLOR_YELLOW
+ MENUITEM "Blå" ID_COLOR_BLUE
+ MENUITEM "Fuchsia" ID_COLOR_FUCHSIA
+ MENUITEM "Aqua" ID_COLOR_AQUA
+ MENUITEM "Hvit" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Dato og klokkeslett"
@@ -220,7 +244,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Forrige side"
STRING_PREVIEW_TWOPAGES, "To sider"
STRING_PREVIEW_ONEPAGE, "Én side"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Lukk"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
@@ -246,4 +274,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "Utskriftfunksjonen er ikke laget ennå."
STRING_MAX_TAB_STOPS, "Kan ikke legge til mer enn 32 tabulatorstopp."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/Pl.rc b/reactos/base/applications/wordpad/Pl.rc
index ab72104e5d0..4d403041858 100644
--- a/reactos/base/applications/wordpad/Pl.rc
+++ b/reactos/base/applications/wordpad/Pl.rc
@@ -47,7 +47,7 @@ BEGIN
MENUITEM "&Usu\tDel", ID_EDIT_CLEAR
MENUITEM "&Zaznacz wszystko\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "Znaj&d...\tCrtl+F", ID_FIND
+ MENUITEM "Znaj&d...\tCtrl+F", ID_FIND
MENUITEM "Z&najd nastpny\tF3", ID_FIND_NEXT
MENUITEM "Za&mie...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -107,6 +107,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Czarny" ID_COLOR_BLACK
+ MENUITEM "Kasztanowy" ID_COLOR_MAROON
+ MENUITEM "Zielony" ID_COLOR_GREEN
+ MENUITEM "Oliwkowy" ID_COLOR_OLIVE
+ MENUITEM "Granatowy" ID_COLOR_NAVY
+ MENUITEM "Purpurowy" ID_COLOR_PURPLE
+ MENUITEM "Zielonomodry" ID_COLOR_TEAL
+ MENUITEM "Szary" ID_COLOR_GRAY
+ MENUITEM "Srebrny" ID_COLOR_SILVER
+ MENUITEM "Czerwony" ID_COLOR_RED
+ MENUITEM "Limonowy" ID_COLOR_LIME
+ MENUITEM "ty" ID_COLOR_YELLOW
+ MENUITEM "Niebieski" ID_COLOR_BLUE
+ MENUITEM "Fuksja" ID_COLOR_FUCHSIA
+ MENUITEM "Akwamaryna" ID_COLOR_AQUA
+ MENUITEM "Biay" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Data i godzina"
@@ -219,7 +243,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Poprz. strona"
STRING_PREVIEW_TWOPAGES, "Two pages"
STRING_PREVIEW_ONEPAGE, "One page"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Zamknij"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/base/applications/wordpad/Pt.rc b/reactos/base/applications/wordpad/Pt.rc
index b93237202e8..2a2ae4b749b 100644
--- a/reactos/base/applications/wordpad/Pt.rc
+++ b/reactos/base/applications/wordpad/Pt.rc
@@ -50,7 +50,7 @@ BEGIN
MENUITEM "&Limpar\tDEL", ID_EDIT_CLEAR
MENUITEM "&Seleccionar tudo\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "Local&izar...\tCrtl+F", ID_FIND
+ MENUITEM "Local&izar...\tCtrl+F", ID_FIND
MENUITEM "&Encontrar Seguinte\tF3", ID_FIND_NEXT
MENUITEM "&Substituir...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -110,6 +110,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Preto" ID_COLOR_BLACK
+ MENUITEM "Castanho" ID_COLOR_MAROON
+ MENUITEM "Verde" ID_COLOR_GREEN
+ MENUITEM "Verde-oliva" ID_COLOR_OLIVE
+ MENUITEM "Azul-marinho" ID_COLOR_NAVY
+ MENUITEM "Roxo" ID_COLOR_PURPLE
+ MENUITEM "Azul-petróleo" ID_COLOR_TEAL
+ MENUITEM "Cinza" ID_COLOR_GRAY
+ MENUITEM "Prateado" ID_COLOR_SILVER
+ MENUITEM "Vermelho" ID_COLOR_RED
+ MENUITEM "Verde-limão" ID_COLOR_LIME
+ MENUITEM "Amarelo" ID_COLOR_YELLOW
+ MENUITEM "Azul" ID_COLOR_BLUE
+ MENUITEM "Fúcsia" ID_COLOR_FUCHSIA
+ MENUITEM "Azul-piscina" ID_COLOR_AQUA
+ MENUITEM "Branco" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Data e hora"
@@ -222,7 +246,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Página anterior"
STRING_PREVIEW_TWOPAGES, "Duas páginas"
STRING_PREVIEW_ONEPAGE, "Uma página"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Fechar"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
@@ -248,4 +276,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "Impressão não implementada"
STRING_MAX_TAB_STOPS, "Não pode adicionar mais de 32 tabs."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/Ru.rc b/reactos/base/applications/wordpad/Ru.rc
index 3aeaf66a9d0..230003b3c61 100644
--- a/reactos/base/applications/wordpad/Ru.rc
+++ b/reactos/base/applications/wordpad/Ru.rc
@@ -49,7 +49,7 @@ BEGIN
MENUITEM "&Удалить\tDEL", ID_EDIT_CLEAR
MENUITEM "Выделить в&се\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Найти...\tCrtl+F", ID_FIND
+ MENUITEM "&Найти...\tCtrl+F", ID_FIND
MENUITEM "На&йти далее\tF3", ID_FIND_NEXT
MENUITEM "&Заменить...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -109,6 +109,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Чёрный" ID_COLOR_BLACK
+ MENUITEM "Тёмно-бордовый" ID_COLOR_MAROON
+ MENUITEM "Зелёный" ID_COLOR_GREEN
+ MENUITEM "Оливковый" ID_COLOR_OLIVE
+ MENUITEM "Тёмно-синий" ID_COLOR_NAVY
+ MENUITEM "Пурпурный" ID_COLOR_PURPLE
+ MENUITEM "Морской волны" ID_COLOR_TEAL
+ MENUITEM "Серый" ID_COLOR_GRAY
+ MENUITEM "Серебряный" ID_COLOR_SILVER
+ MENUITEM "Красный" ID_COLOR_RED
+ MENUITEM "Лимонный" ID_COLOR_LIME
+ MENUITEM "Жёлтый" ID_COLOR_YELLOW
+ MENUITEM "Синий" ID_COLOR_BLUE
+ MENUITEM "Ярко-розовый" ID_COLOR_FUCHSIA
+ MENUITEM "Голубой" ID_COLOR_AQUA
+ MENUITEM "Белый" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Дата и время"
@@ -221,7 +245,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Предыдущая страница"
STRING_PREVIEW_TWOPAGES, "Две страницы"
STRING_PREVIEW_ONEPAGE, "Одна страница"
+ STRING_PREVIEW_ZOOMIN, "Приблизить"
+ STRING_PREVIEW_ZOOMOUT, "Отдалить"
STRING_PREVIEW_CLOSE, "Закрыть"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
@@ -247,4 +275,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "Печать не поддерживается"
STRING_MAX_TAB_STOPS, "Нельзя добавить более 32 позиций табуляции."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/Si.rc b/reactos/base/applications/wordpad/Si.rc
index 4fa9cfe08c2..f7e0c722b46 100644
--- a/reactos/base/applications/wordpad/Si.rc
+++ b/reactos/base/applications/wordpad/Si.rc
@@ -48,7 +48,7 @@ BEGIN
MENUITEM "Po&briši\tDEL", ID_EDIT_CLEAR
MENUITEM "Izberi &vse\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "Na&jdi ...\tCrtl+F", ID_FIND
+ MENUITEM "Na&jdi ...\tCtrl+F", ID_FIND
MENUITEM "Najdi n&aslednje\tF3", ID_FIND_NEXT
MENUITEM "Za&menjaj ...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -108,6 +108,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Črna" ID_COLOR_BLACK
+ MENUITEM "Kostanjeva" ID_COLOR_MAROON
+ MENUITEM "Zelena" ID_COLOR_GREEN
+ MENUITEM "Olivna" ID_COLOR_OLIVE
+ MENUITEM "Mornariška" ID_COLOR_NAVY
+ MENUITEM "Vijolična" ID_COLOR_PURPLE
+ MENUITEM "Zelenomodra" ID_COLOR_TEAL
+ MENUITEM "Siva" ID_COLOR_GRAY
+ MENUITEM "Srebrna" ID_COLOR_SILVER
+ MENUITEM "Rdeča" ID_COLOR_RED
+ MENUITEM "Citronska" ID_COLOR_LIME
+ MENUITEM "Rumena" ID_COLOR_YELLOW
+ MENUITEM "Modra" ID_COLOR_BLUE
+ MENUITEM "Roza" ID_COLOR_FUCHSIA
+ MENUITEM "Akvamarin" ID_COLOR_AQUA
+ MENUITEM "Bela" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Datum in čas"
@@ -220,7 +244,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Prejšnja"
STRING_PREVIEW_TWOPAGES, "Dve strani"
STRING_PREVIEW_ONEPAGE, "Ena stran"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Zapri"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
@@ -247,4 +275,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "Tiskanje (še) ni na voljo"
STRING_MAX_TAB_STOPS, "Ne morem vstaviti več kot 32 položajev tabulatorja."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/Sv.rc b/reactos/base/applications/wordpad/Sv.rc
index f8ac17f77c6..edc35a9b24a 100644
--- a/reactos/base/applications/wordpad/Sv.rc
+++ b/reactos/base/applications/wordpad/Sv.rc
@@ -48,7 +48,7 @@ BEGIN
MENUITEM "Ta &bort\tDEL", ID_EDIT_CLEAR
MENUITEM "&Markera allt\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Sök...\tCrtl+F", ID_FIND
+ MENUITEM "&Sök...\tCtrl+F", ID_FIND
MENUITEM "Sök &nästa\tF3", ID_FIND_NEXT
MENUITEM "&Ersätt...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -108,6 +108,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Svart" ID_COLOR_BLACK
+ MENUITEM "Rödbrun" ID_COLOR_MAROON
+ MENUITEM "Grön" ID_COLOR_GREEN
+ MENUITEM "Oliv" ID_COLOR_OLIVE
+ MENUITEM "Navy" ID_COLOR_NAVY
+ MENUITEM "Lila" ID_COLOR_PURPLE
+ MENUITEM "Teal" ID_COLOR_TEAL
+ MENUITEM "Grå" ID_COLOR_GRAY
+ MENUITEM "Silver" ID_COLOR_SILVER
+ MENUITEM "Röd" ID_COLOR_RED
+ MENUITEM "Lime" ID_COLOR_LIME
+ MENUITEM "Gul" ID_COLOR_YELLOW
+ MENUITEM "Blå" ID_COLOR_BLUE
+ MENUITEM "Fuchsia" ID_COLOR_FUCHSIA
+ MENUITEM "Aqua" ID_COLOR_AQUA
+ MENUITEM "Vit" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Datum och tid"
@@ -220,7 +244,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Föregående sida"
STRING_PREVIEW_TWOPAGES, "Två sidor"
STRING_PREVIEW_ONEPAGE, "En sida"
+ STRING_PREVIEW_ZOOMIN, "Zooma in"
+ STRING_PREVIEW_ZOOMOUT, "Zooma ut"
STRING_PREVIEW_CLOSE, "Stäng"
+ STRING_PREVIEW_PAGE, "Sida"
+ STRING_PREVIEW_PAGES, "Sidor"
END
STRINGTABLE DISCARDABLE
@@ -246,4 +274,3 @@ BEGIN
STRING_PRINTING_NOT_IMPLEMENTED, "Utskrift ej implementerat."
STRING_MAX_TAB_STOPS, "Kan ej lägga till mer än 32 tabbstopp."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/Tr.rc b/reactos/base/applications/wordpad/Tr.rc
index 92290371d37..ef66aa40ad8 100644
--- a/reactos/base/applications/wordpad/Tr.rc
+++ b/reactos/base/applications/wordpad/Tr.rc
@@ -48,7 +48,7 @@ BEGIN
MENUITEM "&Sil\tDel", ID_EDIT_CLEAR
MENUITEM "&Tmn se\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "&Find...\tCrtl+F", ID_FIND
+ MENUITEM "&Find...\tCtrl+F", ID_FIND
MENUITEM "Find &next\tF3", ID_FIND_NEXT
MENUITEM "&Replace...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -108,6 +108,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Siyah" ID_COLOR_BLACK
+ MENUITEM "Koyu Krmz" ID_COLOR_MAROON
+ MENUITEM "Yeil" ID_COLOR_GREEN
+ MENUITEM "Koyu Sar" ID_COLOR_OLIVE
+ MENUITEM "Koyu Mavi" ID_COLOR_NAVY
+ MENUITEM "Mor" ID_COLOR_PURPLE
+ MENUITEM "Deniz Mavisi" ID_COLOR_TEAL
+ MENUITEM "Gri" ID_COLOR_GRAY
+ MENUITEM "Gm" ID_COLOR_SILVER
+ MENUITEM "Krmz" ID_COLOR_RED
+ MENUITEM "Parlak Yeil" ID_COLOR_LIME
+ MENUITEM "Sar" ID_COLOR_YELLOW
+ MENUITEM "Mavi" ID_COLOR_BLUE
+ MENUITEM "Pembe" ID_COLOR_FUCHSIA
+ MENUITEM "Turkuaz" ID_COLOR_AQUA
+ MENUITEM "Beyaz" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "Date and time"
@@ -220,7 +244,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "Previous page"
STRING_PREVIEW_TWOPAGES, "Two pages"
STRING_PREVIEW_ONEPAGE, "One page"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "Close"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/base/applications/wordpad/Uk.rc b/reactos/base/applications/wordpad/Uk.rc
new file mode 100644
index 00000000000..35e35977e59
--- /dev/null
+++ b/reactos/base/applications/wordpad/Uk.rc
@@ -0,0 +1,278 @@
+/*
+ * Copyright 2004 by Krzysztof Foltman
+ *
+ * Ukrainian language support
+ *
+ * Copyright (C) 2010 Igor Paliychuk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wordpad.h"
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+IDM_MAINMENU MENU DISCARDABLE
+BEGIN
+ POPUP "&File"
+ BEGIN
+ MENUITEM "&Новий...\tCtrl+N", ID_FILE_NEW
+ MENUITEM "&Відкрити...\tCtrl+O", ID_FILE_OPEN
+ MENUITEM "&Зберегти\tCtrl+S", ID_FILE_SAVE
+ MENUITEM "Зберегти &як...", ID_FILE_SAVEAS
+ MENUITEM SEPARATOR
+ MENUITEM "&Друк...\tCtrl+P", ID_PRINT
+ MENUITEM "Попередній перег&ляд...", ID_PREVIEW
+ MENUITEM "Налаштування &сторінки...", ID_PRINTSETUP
+ MENUITEM SEPARATOR
+ MENUITEM "В&ихід", ID_FILE_EXIT
+ END
+ POPUP "&Правка"
+ BEGIN
+ MENUITEM "&Відмінити\tCtrl+Z", ID_EDIT_UNDO
+ MENUITEM "Повт&орити\tCtrl+Y", ID_EDIT_REDO
+ MENUITEM SEPARATOR
+ MENUITEM "Виріза&ти\tCtrl+X", ID_EDIT_CUT
+ MENUITEM "&Копіювати\tCtrl+C", ID_EDIT_COPY
+ MENUITEM "В&ставити\tCtrl+V", ID_EDIT_PASTE
+ MENUITEM "О&чистити\tDEL", ID_EDIT_CLEAR
+ MENUITEM "Виб&рати все\tCtrl+A", ID_EDIT_SELECTALL
+ MENUITEM SEPARATOR
+ MENUITEM "&Знайти...\tCtrl+F", ID_FIND
+ MENUITEM "Знайти д&алі\tF3", ID_FIND_NEXT
+ MENUITEM "За&мінтити...\tCtrl+H", ID_REPLACE
+ MENUITEM SEPARATOR
+ MENUITEM "Лише д&ля читання", ID_EDIT_READONLY
+ MENUITEM "Зм&інений", ID_EDIT_MODIFIED
+ MENUITEM SEPARATOR
+ POPUP "Д&одатково"
+ BEGIN
+ MENUITEM "&Інформація про виділення", ID_EDIT_SELECTIONINFO
+ MENUITEM "&Формат символів", ID_EDIT_CHARFORMAT
+ MENUITEM "Формат символів &по замовчуванні", ID_EDIT_DEFCHARFORMAT
+ MENUITEM "Paragrap&h format", ID_EDIT_PARAFORMAT
+ MENUITEM "&Взяти текст", ID_EDIT_GETTEXT
+ END
+ END
+ POPUP "&Вигляд"
+ BEGIN
+ MENUITEM "Панель інс&трументів", ID_TOGGLE_TOOLBAR
+ MENUITEM "Панель &форматування", ID_TOGGLE_FORMATBAR
+ MENUITEM "&Лінійка", ID_TOGGLE_RULER
+ MENUITEM "&Рядок стану", ID_TOGGLE_STATUSBAR
+ MENUITEM SEPARATOR
+ MENUITEM "&Параметри...", ID_VIEWPROPERTIES
+ END
+ POPUP "&Вставка"
+ BEGIN
+ MENUITEM "&Дата та час...", ID_DATETIME
+ END
+ POPUP "Ф&ормат"
+ BEGIN
+ MENUITEM "&Шрифт...", ID_FONTSETTINGS
+ MENUITEM "&Bullet points" ID_BULLET
+ MENUITEM "&Абзац..." ID_PARAFORMAT
+ MENUITEM "&Табуляція..." ID_TABSTOPS
+ POPUP "&Фон"
+ BEGIN
+ MENUITEM "&Ситсемний\tCtrl+1", ID_BACK_1
+ MENUITEM "&Жовтуватий PostThat\tCtrl+2", ID_BACK_2
+ END
+ END
+ POPUP "&Довідка"
+ BEGIN
+ MENUITEM "&Про Wine Wordpad" ID_ABOUT
+ END
+END
+
+IDM_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Вир&ізати", ID_EDIT_CUT
+ MENUITEM "&Копіювати", ID_EDIT_COPY
+ MENUITEM "&Вставити", ID_EDIT_PASTE
+ MENUITEM SEPARATOR
+ MENUITEM "&Bullet points" ID_BULLET
+ MENUITEM "&Абзац..." ID_PARAFORMAT
+ END
+END
+
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "×îðíèé" ID_COLOR_BLACK
+ MENUITEM "Áðóíàòíèé" ID_COLOR_MAROON
+ MENUITEM "Çåëåíèé" ID_COLOR_GREEN
+ MENUITEM "Îëèâêîâèé" ID_COLOR_OLIVE
+ MENUITEM "Ñèí³é" ID_COLOR_NAVY
+ MENUITEM "Ïóðïóðíèé" ID_COLOR_PURPLE
+ MENUITEM "Çåëåíî-ñèí³é" ID_COLOR_TEAL
+ MENUITEM "ѳðèé" ID_COLOR_GRAY
+ MENUITEM "Ñð³áíèé" ID_COLOR_SILVER
+ MENUITEM "×åðâîíèé" ID_COLOR_RED
+ MENUITEM "Ñàëàòîâèé" ID_COLOR_LIME
+ MENUITEM "Æîâòèé" ID_COLOR_YELLOW
+ MENUITEM "Ãîëóáèé" ID_COLOR_BLUE
+ MENUITEM "Ô³îëåòîâèé" ID_COLOR_FUCHSIA
+ MENUITEM "Àêâàìàðèí" ID_COLOR_AQUA
+ MENUITEM "Á³ëèé" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
+IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "Дата та час"
+FONT 10, "MS Sans Serif"
+BEGIN
+ LTEXT "Доступні формати",-1,3,2,100,15
+ LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT | LBS_NOTIFY
+ PUSHBUTTON "&OK",IDOK,87,12,40,12
+ PUSHBUTTON "&Скасувати",IDCANCEL,87,26,40,12
+END
+
+IDD_NEWFILE DIALOG DISCARDABLE 30, 20, 140, 80
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "Новий"
+FONT 10, "MS Sans Serif"
+BEGIN
+ LTEXT "Тип нового документу",-1,3,2,100,15
+ LISTBOX IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT
+ PUSHBUTTON "&OK",IDOK,97,12,40,12
+ PUSHBUTTON "&Скасувати",IDCANCEL,97,26,40,12
+END
+
+IDD_PARAFORMAT DIALOG DISCARDABLE 30, 20, 200, 110
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+Caption "Абзац"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Відступ", -1, 10, 10, 120, 68
+ LTEXT "Зліва", -1, 15, 22, 40, 13
+ EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13
+ LTEXT "Справа", -1, 15, 40, 40, 13
+ EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13
+ LTEXT "Перший рядок", -1, 15, 58, 40, 13
+ EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13
+ LTEXT "Вирівнювання", -1, 15, 87, 40, 13
+ COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST
+ PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
+ PUSHBUTTON "&Скасувати", IDCANCEL, 137, 33, 50, 15
+END
+
+IDD_TABSTOPS DIALOG DISCARDABLE 30, 20, 200, 110
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+Caption "Табуляція"
+FONT 8, "MS SHell DLg"
+BEGIN
+ GROUPBOX "Tab stops", -1, 10, 10, 120, 90
+ COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE
+ DEFPUSHBUTTON "&Додати", ID_TAB_ADD, 20, 80, 45, 15
+ PUSHBUTTON "&Видалити", ID_TAB_DEL, 72, 80, 45, 15
+ PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15
+ PUSHBUTTON "&Скасувати", IDCANCEL, 137, 33, 50, 15
+ PUSHBUTTON "Видалити в&се", ID_TAB_EMPTY, 137, 51, 50, 15
+END
+
+IDD_FORMATOPTS DIALOG DISCARDABLE 0, 0, 280, 110
+STYLE DS_SYSMODAL
+Caption ""
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Line wrapping", -1, 10, 10, 130, 85
+ RADIOBUTTON "&No line wrapping", IDC_PAGEFMT_WN, 18, 25, 117, 15
+ RADIOBUTTON "Wrap text by the &window border", IDC_PAGEFMT_WW, 18, 45, 117, 15
+ RADIOBUTTON "Wrap text by the &margin", IDC_PAGEFMT_WM, 18, 65, 117, 15
+ GROUPBOX "Toolbars", -1, 150, 10, 120, 85
+ CHECKBOX "&Toolbar", IDC_PAGEFMT_TB, 160, 20, 80, 15
+ CHECKBOX "&Formatbar", IDC_PAGEFMT_FB, 160, 38, 80, 15
+ CHECKBOX "&Лінійка", IDC_PAGEFMT_RU, 160, 56, 80, 15
+ CHECKBOX "&Рядоу стану", IDC_PAGEFMT_SB, 160, 74, 80, 15
+ LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_ALL_FILES, "Всі документи (*.*)"
+ STRING_TEXT_FILES_TXT, "Текстові документи (*.txt)"
+ STRING_TEXT_FILES_UNICODE_TXT, "Текстовий документ Unicode (*.txt)"
+ STRING_RICHTEXT_FILES_RTF, "Rich text format (*.rtf)"
+ STRING_NEWFILE_RICHTEXT, "Rich text документ"
+ STRING_NEWFILE_TXT, "Текстовий документ"
+ STRING_NEWFILE_TXT_UNICODE, "Текстовий документ Unicode"
+ STRING_PRINTER_FILES_PRN, "Printer files (*.PRN)"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_ALIGN_LEFT, "По Лівому Краю"
+ STRING_ALIGN_RIGHT, "По Правому Краю"
+ STRING_ALIGN_CENTER, "По Центру"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_VIEWPROPS_TITLE, "Налаштування"
+ STRING_VIEWPROPS_TEXT, "Текст"
+ STRING_VIEWPROPS_RICHTEXT, "Rich text"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_PREVIEW_PRINT, "Друк"
+ STRING_PREVIEW_NEXTPAGE, "Наступна сторінка"
+ STRING_PREVIEW_PREVPAGE, "Попередня сторінка"
+ STRING_PREVIEW_TWOPAGES, "Дві сторінки"
+ STRING_PREVIEW_ONEPAGE, "Одна сторінка"
+ STRING_PREVIEW_ZOOMIN, "Збільшити"
+ STRING_PREVIEW_ZOOMOUT, "Зменшити"
+ STRING_PREVIEW_CLOSE, "Закрити"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
+ STRING_UNITS_CM, "cm"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_DEFAULT_FILENAME, "Документ"
+ STRING_PROMPT_SAVE_CHANGES, "Зберегти зміни в '%s'?"
+ STRING_SEARCH_FINISHED, "Покуш документу завершено."
+ STRING_LOAD_RICHED_FAILED, "Не вдалось завантажити бібліотеку RichEdit."
+ STRING_SAVE_LOSEFORMATTING, "Ви вибрали збереження в форматі простого тексту, " \
+ "що призведе до втрати форматування. " \
+ "Ви справді цього хочете?"
+ STRING_INVALID_NUMBER, "Невірний числовий формат"
+ STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage документи не підтримуються"
+ STRING_WRITE_FAILED, "Неможливо зберегти файл."
+ STRING_WRITE_ACCESS_DENIED, "Недостатньо прав для збереження файлу."
+ STRING_OPEN_FAILED, "Не вдалось відкрити файл."
+ STRING_OPEN_ACCESS_DENIED, "Недостатньо прав для відкриття файлу."
+ STRING_PRINTING_NOT_IMPLEMENTED, "Друк не впроваджено"
+ STRING_MAX_TAB_STOPS, "Неможливо додати більше 32 позицій табуляції."
+END
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE DISCARDABLE
+BEGIN
+ STRING_ALIGN_LEFT, "По Лівому Краю"
+ STRING_ALIGN_RIGHT, "По правому Краю"
+ STRING_ALIGN_CENTER, "По Центру"
+END
diff --git a/reactos/base/applications/wordpad/Zh.rc b/reactos/base/applications/wordpad/Zh.rc
index 69531055234..6adb30af43b 100644
--- a/reactos/base/applications/wordpad/Zh.rc
+++ b/reactos/base/applications/wordpad/Zh.rc
@@ -51,7 +51,7 @@ BEGIN
MENUITEM "删除(&D)\tDEL", ID_EDIT_CLEAR
MENUITEM "全选(&S)\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "查找(&F)...\tCrtl+F", ID_FIND
+ MENUITEM "查找(&F)...\tCtrl+F", ID_FIND
MENUITEM "找下一个(&N)\tF3", ID_FIND_NEXT
MENUITEM "替换(&R)...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -111,6 +111,30 @@ BEGIN
END
END
+IDM_COLOR_POPUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Black", ID_COLOR_BLACK
+ MENUITEM "Maroon", ID_COLOR_MAROON
+ MENUITEM "Green", ID_COLOR_GREEN
+ MENUITEM "Olive" ID_COLOR_OLIVE
+ MENUITEM "Navy" ID_COLOR_NAVY
+ MENUITEM "Purple" ID_COLOR_PURPLE
+ MENUITEM "Teal" ID_COLOR_TEAL
+ MENUITEM "Gray" ID_COLOR_GRAY
+ MENUITEM "Silver" ID_COLOR_SILVER
+ MENUITEM "Red" ID_COLOR_RED
+ MENUITEM "Lime" ID_COLOR_LIME
+ MENUITEM "Yellow" ID_COLOR_YELLOW
+ MENUITEM "Blue" ID_COLOR_BLUE
+ MENUITEM "Fuchsia" ID_COLOR_FUCHSIA
+ MENUITEM "Aqua" ID_COLOR_AQUA
+ MENUITEM "White" ID_COLOR_WHITE
+ MENUITEM "Automatic" ID_COLOR_AUTOMATIC
+ END
+END
+
IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
CAPTION "日期和时间"
@@ -223,7 +247,11 @@ BEGIN
STRING_PREVIEW_PREVPAGE, "上一页"
STRING_PREVIEW_TWOPAGES, "双页"
STRING_PREVIEW_ONEPAGE, "单页"
+ STRING_PREVIEW_ZOOMIN, "Zoom in"
+ STRING_PREVIEW_ZOOMOUT, "Zoom out"
STRING_PREVIEW_CLOSE, "关闭"
+ STRING_PREVIEW_PAGE, "Page"
+ STRING_PREVIEW_PAGES, "Pages"
END
STRINGTABLE DISCARDABLE
@@ -276,7 +304,7 @@ BEGIN
MENUITEM "刪除(&D)\tDEL", ID_EDIT_CLEAR
MENUITEM "全選(&S)\tCtrl+A", ID_EDIT_SELECTALL
MENUITEM SEPARATOR
- MENUITEM "查找(&F)...\tCrtl+F", ID_FIND
+ MENUITEM "查找(&F)...\tCtrl+F", ID_FIND
MENUITEM "找下一個(&N)\tF3", ID_FIND_NEXT
MENUITEM "替換(&R)...\tCtrl+H", ID_REPLACE
MENUITEM SEPARATOR
@@ -471,4 +499,3 @@ BEGIN
STRING_OPEN_FAILED, "不能開啟檔案."
STRING_OPEN_ACCESS_DENIED, "你沒有開啟檔案的權力."
END
-#pragma code_page(default)
diff --git a/reactos/base/applications/wordpad/formatbar.bmp b/reactos/base/applications/wordpad/formatbar.bmp
index 9c643b11b97..310b596d92a 100644
Binary files a/reactos/base/applications/wordpad/formatbar.bmp and b/reactos/base/applications/wordpad/formatbar.bmp differ
diff --git a/reactos/base/applications/wordpad/print.c b/reactos/base/applications/wordpad/print.c
index 0a1343fbe05..71c06273fdb 100644
--- a/reactos/base/applications/wordpad/print.c
+++ b/reactos/base/applications/wordpad/print.c
@@ -27,12 +27,21 @@
typedef struct _previewinfo
{
int page;
- int pages;
+ int pages_shown;
+ int saved_pages_shown;
+ int *pageEnds, pageCapacity;
+ int textlength;
HDC hdc;
HDC hdc2;
HDC hdcSized;
HDC hdcSized2;
RECT window;
+ RECT rcPage;
+ SIZE bmSize;
+ SIZE bmScaledSize;
+ SIZE spacing;
+ float zoomratio;
+ int zoomlevel;
LPWSTR wszFileName;
} previewinfo, *ppreviewinfo;
@@ -42,7 +51,10 @@ static HGLOBAL devNames;
static RECT margins;
static previewinfo preview;
+extern const WCHAR wszPreviewWndClass[];
+
static const WCHAR var_pagemargin[] = {'P','a','g','e','M','a','r','g','i','n',0};
+static const WCHAR var_previewpages[] = {'P','r','e','v','i','e','w','P','a','g','e','s',0};
static LPWSTR get_print_file_filter(HWND hMainWnd)
{
@@ -50,7 +62,7 @@ static LPWSTR get_print_file_filter(HWND hMainWnd)
const WCHAR files_prn[] = {'*','.','P','R','N',0};
const WCHAR files_all[] = {'*','.','*','\0'};
LPWSTR p;
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
p = wszPrintFilter;
LoadStringW(hInstance, STRING_PRINTER_FILES_PRN, p, MAX_STRING_LEN);
@@ -85,10 +97,32 @@ void registry_read_pagemargins(HKEY hKey)
}
}
+void registry_set_previewpages(HKEY hKey)
+{
+ RegSetValueExW(hKey, var_previewpages, 0, REG_DWORD,
+ (LPBYTE)&preview.pages_shown, sizeof(DWORD));
+}
+
+void registry_read_previewpages(HKEY hKey)
+{
+ DWORD size = sizeof(DWORD);
+ if(!hKey ||
+ RegQueryValueExW(hKey, var_previewpages, 0, NULL,
+ (LPBYTE)&preview.pages_shown, &size) != ERROR_SUCCESS ||
+ size != sizeof(DWORD))
+ {
+ preview.pages_shown = 1;
+ } else {
+ if (preview.pages_shown < 1) preview.pages_shown = 1;
+ else if (preview.pages_shown > 2) preview.pages_shown = 2;
+ }
+}
+
+
static void AddTextButton(HWND hRebarWnd, UINT string, UINT command, UINT id)
{
REBARBANDINFOW rb;
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hRebarWnd, GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
WCHAR text[MAX_STRING_LEN];
HWND hButton;
@@ -236,22 +270,6 @@ static LPWSTR dialog_print_to_file(HWND hMainWnd)
return FALSE;
}
-static int get_num_pages(HWND hEditorWnd, FORMATRANGE fr)
-{
- int page = 0;
- fr.chrg.cpMin = 0;
-
- do
- {
- page++;
- fr.chrg.cpMin = SendMessageW(hEditorWnd, EM_FORMATRANGE, TRUE,
- (LPARAM)&fr);
- }
- while(fr.chrg.cpMin && fr.chrg.cpMin < fr.chrg.cpMax);
-
- return page;
-}
-
static void char_from_pagenum(HWND hEditorWnd, FORMATRANGE *fr, int page)
{
int i;
@@ -260,7 +278,9 @@ static void char_from_pagenum(HWND hEditorWnd, FORMATRANGE *fr, int page)
for(i = 1; i < page; i++)
{
- fr->chrg.cpMin = SendMessageW(hEditorWnd, EM_FORMATRANGE, TRUE, (LPARAM)fr);
+ int bottom = fr->rc.bottom;
+ fr->chrg.cpMin = SendMessageW(hEditorWnd, EM_FORMATRANGE, FALSE, (LPARAM)fr);
+ fr->rc.bottom = bottom;
}
}
@@ -283,212 +303,6 @@ static void update_ruler(HWND hRulerWnd)
redraw_ruler(hRulerWnd);
}
-static void print(LPPRINTDLGW pd, LPWSTR wszFileName)
-{
- FORMATRANGE fr;
- DOCINFOW di;
- HWND hEditorWnd = GetDlgItem(pd->hwndOwner, IDC_EDITOR);
- int printedPages = 0;
-
- fr.hdc = pd->hDC;
- fr.hdcTarget = pd->hDC;
-
- fr.rc = get_print_rect(fr.hdc);
- fr.rcPage.left = 0;
- fr.rcPage.right = fr.rc.right + margins.right;
- fr.rcPage.top = 0;
- fr.rcPage.bottom = fr.rc.bottom + margins.bottom;
-
- ZeroMemory(&di, sizeof(di));
- di.cbSize = sizeof(di);
- di.lpszDocName = wszFileName;
-
- if(pd->Flags & PD_PRINTTOFILE)
- {
- di.lpszOutput = dialog_print_to_file(pd->hwndOwner);
- if(!di.lpszOutput)
- return;
- }
-
- if(pd->Flags & PD_SELECTION)
- {
- SendMessageW(hEditorWnd, EM_EXGETSEL, 0, (LPARAM)&fr.chrg);
- } else
- {
- GETTEXTLENGTHEX gt;
- gt.flags = GTL_DEFAULT;
- gt.codepage = 1200;
- fr.chrg.cpMin = 0;
- fr.chrg.cpMax = SendMessageW(hEditorWnd, EM_GETTEXTLENGTHEX, (WPARAM)>, 0);
-
- if(pd->Flags & PD_PAGENUMS)
- char_from_pagenum(hEditorWnd, &fr, pd->nToPage);
- }
-
- StartDocW(fr.hdc, &di);
- do
- {
- if(StartPage(fr.hdc) <= 0)
- break;
-
- fr.chrg.cpMin = SendMessageW(hEditorWnd, EM_FORMATRANGE, TRUE, (LPARAM)&fr);
-
- if(EndPage(fr.hdc) <= 0)
- break;
-
- printedPages++;
- if((pd->Flags & PD_PAGENUMS) && (printedPages > (pd->nToPage - pd->nFromPage)))
- break;
- }
- while(fr.chrg.cpMin && fr.chrg.cpMin < fr.chrg.cpMax);
-
- EndDoc(fr.hdc);
- SendMessageW(hEditorWnd, EM_FORMATRANGE, FALSE, 0);
-}
-
-void dialog_printsetup(HWND hMainWnd)
-{
- PAGESETUPDLGW ps;
-
- ZeroMemory(&ps, sizeof(ps));
- ps.lStructSize = sizeof(ps);
- ps.hwndOwner = hMainWnd;
- ps.Flags = PSD_INHUNDREDTHSOFMILLIMETERS | PSD_MARGINS;
- ps.rtMargin.left = twips_to_centmm(margins.left);
- ps.rtMargin.right = twips_to_centmm(margins.right);
- ps.rtMargin.top = twips_to_centmm(margins.top);
- ps.rtMargin.bottom = twips_to_centmm(margins.bottom);
- ps.hDevMode = devMode;
- ps.hDevNames = devNames;
-
- if(PageSetupDlgW(&ps))
- {
- margins.left = centmm_to_twips(ps.rtMargin.left);
- margins.right = centmm_to_twips(ps.rtMargin.right);
- margins.top = centmm_to_twips(ps.rtMargin.top);
- margins.bottom = centmm_to_twips(ps.rtMargin.bottom);
- devMode = ps.hDevMode;
- devNames = ps.hDevNames;
- update_ruler(get_ruler_wnd(hMainWnd));
- }
-}
-
-void get_default_printer_opts(void)
-{
- PRINTDLGW pd;
- ZeroMemory(&pd, sizeof(pd));
-
- ZeroMemory(&pd, sizeof(pd));
- pd.lStructSize = sizeof(pd);
- pd.Flags = PD_RETURNDC | PD_RETURNDEFAULT;
- pd.hDevMode = devMode;
-
- PrintDlgW(&pd);
-
- devMode = pd.hDevMode;
- devNames = pd.hDevNames;
-}
-
-void print_quick(LPWSTR wszFileName)
-{
- PRINTDLGW pd;
-
- ZeroMemory(&pd, sizeof(pd));
- pd.hDC = make_dc();
-
- print(&pd, wszFileName);
-}
-
-void dialog_print(HWND hMainWnd, LPWSTR wszFileName)
-{
- PRINTDLGW pd;
- HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR);
- int from = 0;
- int to = 0;
-
- ZeroMemory(&pd, sizeof(pd));
- pd.lStructSize = sizeof(pd);
- pd.hwndOwner = hMainWnd;
- pd.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE;
- pd.nMinPage = 1;
- pd.nMaxPage = -1;
- pd.hDevMode = devMode;
- pd.hDevNames = devNames;
-
- SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&from, (LPARAM)&to);
- if(from == to)
- pd.Flags |= PD_NOSELECTION;
-
- if(PrintDlgW(&pd))
- {
- devMode = pd.hDevMode;
- devNames = pd.hDevNames;
- print(&pd, wszFileName);
- update_ruler(get_ruler_wnd(hMainWnd));
- }
-}
-
-static void preview_bar_show(HWND hMainWnd, BOOL show)
-{
- HWND hReBar = GetDlgItem(hMainWnd, IDC_REBAR);
- int i;
-
- if(show)
- {
- REBARBANDINFOW rb;
- HWND hStatic;
-
- AddTextButton(hReBar, STRING_PREVIEW_PRINT, ID_PRINT, BANDID_PREVIEW_BTN1);
- AddTextButton(hReBar, STRING_PREVIEW_NEXTPAGE, ID_PREVIEW_NEXTPAGE, BANDID_PREVIEW_BTN2);
- AddTextButton(hReBar, STRING_PREVIEW_PREVPAGE, ID_PREVIEW_PREVPAGE, BANDID_PREVIEW_BTN3);
- AddTextButton(hReBar, STRING_PREVIEW_TWOPAGES, ID_PREVIEW_NUMPAGES, BANDID_PREVIEW_BTN4);
- AddTextButton(hReBar, STRING_PREVIEW_CLOSE, ID_FILE_EXIT, BANDID_PREVIEW_BTN5);
-
- hStatic = CreateWindowW(WC_STATICW, NULL,
- WS_VISIBLE | WS_CHILD, 0, 0, 0, 0,
- hReBar, NULL, NULL, NULL);
-
- rb.cbSize = REBARBANDINFOW_V6_SIZE;
- rb.fMask = RBBIM_SIZE | RBBIM_CHILDSIZE | RBBIM_STYLE | RBBIM_CHILD | RBBIM_IDEALSIZE | RBBIM_ID;
- rb.fStyle = RBBS_NOGRIPPER | RBBS_VARIABLEHEIGHT;
- rb.hwndChild = hStatic;
- rb.cyChild = rb.cyMinChild = 22;
- rb.cx = rb.cxMinChild = 90;
- rb.cxIdeal = 100;
- rb.wID = BANDID_PREVIEW_BUFFER;
-
- SendMessageW(hReBar, RB_INSERTBAND, -1, (LPARAM)&rb);
- } else
- {
- for(i = 0; i <= PREVIEW_BUTTONS; i++)
- SendMessageW(hReBar, RB_DELETEBAND, SendMessageW(hReBar, RB_IDTOINDEX, BANDID_PREVIEW_BTN1+i, 0), 0);
- }
-}
-
-void init_preview(HWND hMainWnd, LPWSTR wszFileName)
-{
- preview.page = 1;
- preview.hdc = 0;
- preview.hdc2 = 0;
- preview.wszFileName = wszFileName;
- preview_bar_show(hMainWnd, TRUE);
-}
-
-void close_preview(HWND hMainWnd)
-{
- preview.window.right = 0;
- preview.window.bottom = 0;
- preview.page = 0;
- preview.pages = 0;
-
- preview_bar_show(hMainWnd, FALSE);
-}
-
-BOOL preview_isactive(void)
-{
- return preview.page != 0;
-}
-
static void add_ruler_units(HDC hdcRuler, RECT* drawRect, BOOL NewMetrics, LONG EditLeftmost)
{
static HDC hdc;
@@ -628,25 +442,296 @@ LRESULT CALLBACK ruler_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
return 0;
}
-static void draw_preview_page(HDC hdc, HDC* hdcSized, FORMATRANGE* lpFr, float ratio, int bmNewWidth, int bmNewHeight, int bmWidth, int bmHeight)
+static void print(LPPRINTDLGW pd, LPWSTR wszFileName)
+{
+ FORMATRANGE fr;
+ DOCINFOW di;
+ HWND hEditorWnd = GetDlgItem(pd->hwndOwner, IDC_EDITOR);
+ int printedPages = 0;
+
+ fr.hdc = pd->hDC;
+ fr.hdcTarget = pd->hDC;
+
+ fr.rc = get_print_rect(fr.hdc);
+ fr.rcPage.left = 0;
+ fr.rcPage.right = fr.rc.right + margins.right;
+ fr.rcPage.top = 0;
+ fr.rcPage.bottom = fr.rc.bottom + margins.bottom;
+
+ ZeroMemory(&di, sizeof(di));
+ di.cbSize = sizeof(di);
+ di.lpszDocName = wszFileName;
+
+ if(pd->Flags & PD_PRINTTOFILE)
+ {
+ di.lpszOutput = dialog_print_to_file(pd->hwndOwner);
+ if(!di.lpszOutput)
+ return;
+ }
+
+ if(pd->Flags & PD_SELECTION)
+ {
+ SendMessageW(hEditorWnd, EM_EXGETSEL, 0, (LPARAM)&fr.chrg);
+ } else
+ {
+ GETTEXTLENGTHEX gt;
+ gt.flags = GTL_DEFAULT;
+ gt.codepage = 1200;
+ fr.chrg.cpMin = 0;
+ fr.chrg.cpMax = SendMessageW(hEditorWnd, EM_GETTEXTLENGTHEX, (WPARAM)>, 0);
+
+ if(pd->Flags & PD_PAGENUMS)
+ char_from_pagenum(hEditorWnd, &fr, pd->nToPage);
+ }
+
+ StartDocW(fr.hdc, &di);
+ do
+ {
+ int bottom = fr.rc.bottom;
+ if(StartPage(fr.hdc) <= 0)
+ break;
+
+ fr.chrg.cpMin = SendMessageW(hEditorWnd, EM_FORMATRANGE, TRUE, (LPARAM)&fr);
+
+ if(EndPage(fr.hdc) <= 0)
+ break;
+ bottom = fr.rc.bottom;
+
+ printedPages++;
+ if((pd->Flags & PD_PAGENUMS) && (printedPages > (pd->nToPage - pd->nFromPage)))
+ break;
+ }
+ while(fr.chrg.cpMin && fr.chrg.cpMin < fr.chrg.cpMax);
+
+ EndDoc(fr.hdc);
+ SendMessageW(hEditorWnd, EM_FORMATRANGE, FALSE, 0);
+}
+
+void dialog_printsetup(HWND hMainWnd)
+{
+ PAGESETUPDLGW ps;
+
+ ZeroMemory(&ps, sizeof(ps));
+ ps.lStructSize = sizeof(ps);
+ ps.hwndOwner = hMainWnd;
+ ps.Flags = PSD_INHUNDREDTHSOFMILLIMETERS | PSD_MARGINS;
+ ps.rtMargin.left = twips_to_centmm(margins.left);
+ ps.rtMargin.right = twips_to_centmm(margins.right);
+ ps.rtMargin.top = twips_to_centmm(margins.top);
+ ps.rtMargin.bottom = twips_to_centmm(margins.bottom);
+ ps.hDevMode = devMode;
+ ps.hDevNames = devNames;
+
+ if(PageSetupDlgW(&ps))
+ {
+ margins.left = centmm_to_twips(ps.rtMargin.left);
+ margins.right = centmm_to_twips(ps.rtMargin.right);
+ margins.top = centmm_to_twips(ps.rtMargin.top);
+ margins.bottom = centmm_to_twips(ps.rtMargin.bottom);
+ devMode = ps.hDevMode;
+ devNames = ps.hDevNames;
+ update_ruler(get_ruler_wnd(hMainWnd));
+ }
+}
+
+void get_default_printer_opts(void)
+{
+ PRINTDLGW pd;
+ ZeroMemory(&pd, sizeof(pd));
+
+ ZeroMemory(&pd, sizeof(pd));
+ pd.lStructSize = sizeof(pd);
+ pd.Flags = PD_RETURNDC | PD_RETURNDEFAULT;
+ pd.hDevMode = devMode;
+
+ PrintDlgW(&pd);
+
+ devMode = pd.hDevMode;
+ devNames = pd.hDevNames;
+}
+
+void print_quick(HWND hMainWnd, LPWSTR wszFileName)
+{
+ PRINTDLGW pd;
+
+ ZeroMemory(&pd, sizeof(pd));
+ pd.hwndOwner = hMainWnd;
+ pd.hDC = make_dc();
+
+ print(&pd, wszFileName);
+ DeleteDC(pd.hDC);
+}
+
+void dialog_print(HWND hMainWnd, LPWSTR wszFileName)
+{
+ PRINTDLGW pd;
+ HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR);
+ int from = 0;
+ int to = 0;
+
+ ZeroMemory(&pd, sizeof(pd));
+ pd.lStructSize = sizeof(pd);
+ pd.hwndOwner = hMainWnd;
+ pd.Flags = PD_RETURNDC | PD_USEDEVMODECOPIESANDCOLLATE;
+ pd.nMinPage = 1;
+ pd.nMaxPage = -1;
+ pd.hDevMode = devMode;
+ pd.hDevNames = devNames;
+
+ SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&from, (LPARAM)&to);
+ if(from == to)
+ pd.Flags |= PD_NOSELECTION;
+
+ if(PrintDlgW(&pd))
+ {
+ devMode = pd.hDevMode;
+ devNames = pd.hDevNames;
+ print(&pd, wszFileName);
+ update_ruler(get_ruler_wnd(hMainWnd));
+ }
+}
+
+static void preview_bar_show(HWND hMainWnd, BOOL show)
+{
+ HWND hReBar = GetDlgItem(hMainWnd, IDC_REBAR);
+ int i;
+
+ if(show)
+ {
+ REBARBANDINFOW rb;
+ HWND hStatic;
+ UINT num_pages_string = preview.pages_shown > 1 ? STRING_PREVIEW_ONEPAGE :
+ STRING_PREVIEW_TWOPAGES;
+
+ AddTextButton(hReBar, STRING_PREVIEW_PRINT, ID_PRINT, BANDID_PREVIEW_BTN1);
+ AddTextButton(hReBar, STRING_PREVIEW_NEXTPAGE, ID_PREVIEW_NEXTPAGE, BANDID_PREVIEW_BTN2);
+ AddTextButton(hReBar, STRING_PREVIEW_PREVPAGE, ID_PREVIEW_PREVPAGE, BANDID_PREVIEW_BTN3);
+ AddTextButton(hReBar, num_pages_string, ID_PREVIEW_NUMPAGES, BANDID_PREVIEW_BTN4);
+ AddTextButton(hReBar, STRING_PREVIEW_ZOOMIN, ID_PREVIEW_ZOOMIN, BANDID_PREVIEW_BTN5);
+ AddTextButton(hReBar, STRING_PREVIEW_ZOOMOUT, ID_PREVIEW_ZOOMOUT, BANDID_PREVIEW_BTN6);
+ AddTextButton(hReBar, STRING_PREVIEW_CLOSE, ID_FILE_EXIT, BANDID_PREVIEW_BTN7);
+
+ hStatic = CreateWindowW(WC_STATICW, NULL,
+ WS_VISIBLE | WS_CHILD, 0, 0, 0, 0,
+ hReBar, NULL, NULL, NULL);
+
+ rb.cbSize = REBARBANDINFOW_V6_SIZE;
+ rb.fMask = RBBIM_SIZE | RBBIM_CHILDSIZE | RBBIM_STYLE | RBBIM_CHILD | RBBIM_IDEALSIZE | RBBIM_ID;
+ rb.fStyle = RBBS_NOGRIPPER | RBBS_VARIABLEHEIGHT;
+ rb.hwndChild = hStatic;
+ rb.cyChild = rb.cyMinChild = 22;
+ rb.cx = rb.cxMinChild = 90;
+ rb.cxIdeal = 100;
+ rb.wID = BANDID_PREVIEW_BUFFER;
+
+ SendMessageW(hReBar, RB_INSERTBAND, -1, (LPARAM)&rb);
+ } else
+ {
+ for(i = 0; i <= PREVIEW_BUTTONS; i++)
+ SendMessageW(hReBar, RB_DELETEBAND, SendMessageW(hReBar, RB_IDTOINDEX, BANDID_PREVIEW_BTN1+i, 0), 0);
+ }
+}
+
+static const int min_spacing = 10;
+
+static void update_preview_scrollbars(HWND hwndPreview, RECT *window)
+{
+ SCROLLINFO sbi;
+ sbi.cbSize = sizeof(sbi);
+ sbi.fMask = SIF_PAGE|SIF_RANGE;
+ sbi.nMin = 0;
+ if (preview.zoomlevel == 0)
+ {
+ /* Hide scrollbars when zoomed out. */
+ sbi.nMax = 0;
+ sbi.nPage = window->right;
+ SetScrollInfo(hwndPreview, SB_HORZ, &sbi, TRUE);
+ sbi.nPage = window->bottom;
+ SetScrollInfo(hwndPreview, SB_VERT, &sbi, TRUE);
+ } else {
+ sbi.nMax = preview.bmScaledSize.cx * preview.pages_shown +
+ min_spacing * (preview.pages_shown + 1);
+ sbi.nPage = window->right;
+ SetScrollInfo(hwndPreview, SB_HORZ, &sbi, TRUE);
+ /* Change in the horizontal scrollbar visibility affects the
+ * client rect, so update the client rect. */
+ GetClientRect(hwndPreview, window);
+ sbi.nMax = preview.bmScaledSize.cy + min_spacing * 2;
+ sbi.nPage = window->bottom;
+ SetScrollInfo(hwndPreview, SB_VERT, &sbi, TRUE);
+ }
+}
+
+static void update_preview_sizes(HWND hwndPreview, BOOL zoomLevelUpdated)
+{
+ RECT window;
+
+ GetClientRect(hwndPreview, &window);
+
+ /* The zoom ratio isn't updated for partial zoom because of resizing the window. */
+ if (zoomLevelUpdated || preview.zoomlevel != 1)
+ {
+ float ratio, ratioHeight, ratioWidth;
+ if (preview.zoomlevel == 2)
+ {
+ ratio = 1.0;
+ } else {
+ ratioHeight = (window.bottom - min_spacing * 2) / (float)preview.bmSize.cy;
+
+ ratioWidth = (float)(window.right -
+ min_spacing * (preview.pages_shown + 1)) /
+ (preview.pages_shown * preview.bmSize.cx);
+
+ if(ratioWidth > ratioHeight)
+ ratio = ratioHeight;
+ else
+ ratio = ratioWidth;
+
+ if (preview.zoomlevel == 1)
+ ratio += (1.0 - ratio) / 2;
+ }
+ preview.zoomratio = ratio;
+ }
+
+ preview.bmScaledSize.cx = preview.bmSize.cx * preview.zoomratio;
+ preview.bmScaledSize.cy = preview.bmSize.cy * preview.zoomratio;
+
+ preview.spacing.cy = max(min_spacing, (window.bottom - preview.bmScaledSize.cy) / 2);
+
+ preview.spacing.cx = (window.right -
+ preview.bmScaledSize.cx * preview.pages_shown) /
+ (preview.pages_shown + 1);
+ if (preview.spacing.cx < min_spacing)
+ preview.spacing.cx = min_spacing;
+
+ update_preview_scrollbars(hwndPreview, &window);
+}
+
+static void draw_preview_page(HDC hdc, HDC* hdcSized, FORMATRANGE* lpFr, float ratio, int bmNewWidth, int bmNewHeight, int bmWidth, int bmHeight, BOOL draw_margins)
{
HBITMAP hBitmapScaled = CreateCompatibleBitmap(hdc, bmNewWidth, bmNewHeight);
- HPEN hPen;
+ HBITMAP oldbm;
+ HPEN hPen, oldPen;
int TopMargin = (int)((float)twips_to_pixels(lpFr->rc.top, GetDeviceCaps(hdc, LOGPIXELSX)) * ratio);
int BottomMargin = (int)((float)twips_to_pixels(lpFr->rc.bottom, GetDeviceCaps(hdc, LOGPIXELSX)) * ratio);
int LeftMargin = (int)((float)twips_to_pixels(lpFr->rc.left, GetDeviceCaps(hdc, LOGPIXELSY)) * ratio);
int RightMargin = (int)((float)twips_to_pixels(lpFr->rc.right, GetDeviceCaps(hdc, LOGPIXELSY)) * ratio);
- if(*hdcSized)
- DeleteDC(*hdcSized);
- *hdcSized = CreateCompatibleDC(hdc);
- SelectObject(*hdcSized, hBitmapScaled);
+ if(*hdcSized) {
+ oldbm = SelectObject(*hdcSized, hBitmapScaled);
+ DeleteObject(oldbm);
+ } else {
+ *hdcSized = CreateCompatibleDC(hdc);
+ SelectObject(*hdcSized, hBitmapScaled);
+ }
StretchBlt(*hdcSized, 0, 0, bmNewWidth, bmNewHeight, hdc, 0, 0, bmWidth, bmHeight, SRCCOPY);
+ if (!draw_margins) return;
+
/* Draw margin lines */
hPen = CreatePen(PS_DOT, 1, RGB(0,0,0));
- SelectObject(*hdcSized, hPen);
+ oldPen = SelectObject(*hdcSized, hPen);
MoveToEx(*hdcSized, 0, TopMargin, NULL);
LineTo(*hdcSized, bmNewWidth, TopMargin);
@@ -658,168 +743,511 @@ static void draw_preview_page(HDC hdc, HDC* hdcSized, FORMATRANGE* lpFr, float r
MoveToEx(*hdcSized, RightMargin, 0, NULL);
LineTo(*hdcSized, RightMargin, bmNewHeight);
+ SelectObject(*hdcSized, oldPen);
+ DeleteObject(hPen);
}
-static void draw_preview(HWND hEditorWnd, FORMATRANGE* lpFr, int bmWidth, int bmHeight, RECT* paper, int page)
+static BOOL is_last_preview_page(int page)
{
- HBITMAP hBitmapCapture = CreateCompatibleBitmap(lpFr->hdc, bmWidth, bmHeight);
+ return preview.pageEnds[page - 1] >= preview.textlength;
+}
+
+/* Update for zoom ratio changes with same page. */
+static void update_scaled_preview(HWND hMainWnd)
+{
+ FORMATRANGE fr;
+ HWND hwndPreview;
+
+ /* This may occur on WM_CREATE before update_preview is called
+ * because a WM_SIZE message is generated from updating the
+ * scrollbars. */
+ if (!preview.hdc) return;
+
+ hwndPreview = GetDlgItem(hMainWnd, IDC_PREVIEW);
+ fr.hdcTarget = make_dc();
+ fr.rc = fr.rcPage = preview.rcPage;
+ fr.rc.left += margins.left;
+ fr.rc.top += margins.top;
+ fr.rc.bottom -= margins.bottom;
+ fr.rc.right -= margins.right;
+
+ draw_preview_page(preview.hdc, &preview.hdcSized, &fr, preview.zoomratio,
+ preview.bmScaledSize.cx, preview.bmScaledSize.cy,
+ preview.bmSize.cx, preview.bmSize.cy, TRUE);
+
+ if(preview.pages_shown > 1)
+ {
+ draw_preview_page(preview.hdc2, &preview.hdcSized2, &fr, preview.zoomratio,
+ preview.bmScaledSize.cx, preview.bmScaledSize.cy,
+ preview.bmSize.cx, preview.bmSize.cy,
+ !is_last_preview_page(preview.page));
+ }
+
+ InvalidateRect(hwndPreview, NULL, TRUE);
+ DeleteDC(fr.hdcTarget);
+}
+
+void init_preview(HWND hMainWnd, LPWSTR wszFileName)
+{
+ HWND hwndPreview;
+ HINSTANCE hInstance = GetModuleHandleW(0);
+ preview.page = 1;
+ preview.hdc = 0;
+ preview.hdc2 = 0;
+ preview.wszFileName = wszFileName;
+ preview.zoomratio = 0;
+ preview.zoomlevel = 0;
+ preview_bar_show(hMainWnd, TRUE);
+
+ hwndPreview = CreateWindowExW(0, wszPreviewWndClass, NULL,
+ WS_VISIBLE | WS_CHILD | WS_VSCROLL | WS_HSCROLL,
+ 0, 0, 200, 10, hMainWnd, (HMENU)IDC_PREVIEW, hInstance, NULL);
+}
+
+void close_preview(HWND hMainWnd)
+{
+ HWND hwndPreview = GetDlgItem(hMainWnd, IDC_PREVIEW);
+ preview.window.right = 0;
+ preview.window.bottom = 0;
+ preview.page = 0;
+ HeapFree(GetProcessHeap(), 0, preview.pageEnds);
+ preview.pageEnds = NULL;
+ preview.pageCapacity = 0;
+ if (preview.zoomlevel > 0)
+ preview.pages_shown = preview.saved_pages_shown;
+ if(preview.hdc) {
+ HBITMAP oldbm = GetCurrentObject(preview.hdc, OBJ_BITMAP);
+ DeleteDC(preview.hdc);
+ DeleteObject(oldbm);
+ preview.hdc = NULL;
+ }
+ if(preview.hdc2) {
+ HBITMAP oldbm = GetCurrentObject(preview.hdc2, OBJ_BITMAP);
+ DeleteDC(preview.hdc2);
+ DeleteObject(oldbm);
+ preview.hdc2 = NULL;
+ }
+ if(preview.hdcSized) {
+ HBITMAP oldbm = GetCurrentObject(preview.hdcSized, OBJ_BITMAP);
+ DeleteDC(preview.hdcSized);
+ DeleteObject(oldbm);
+ preview.hdcSized = NULL;
+ }
+ if(preview.hdcSized2) {
+ HBITMAP oldbm = GetCurrentObject(preview.hdcSized2, OBJ_BITMAP);
+ DeleteDC(preview.hdcSized2);
+ DeleteObject(oldbm);
+ preview.hdcSized2 = NULL;
+ }
+
+ preview_bar_show(hMainWnd, FALSE);
+ DestroyWindow(hwndPreview);
+}
+
+BOOL preview_isactive(void)
+{
+ return preview.page != 0;
+}
+
+static void draw_preview(HWND hEditorWnd, FORMATRANGE* lpFr, RECT* paper, int page)
+{
+ int bottom;
+
+ if (!preview.pageEnds)
+ {
+ preview.pageCapacity = 32;
+ preview.pageEnds = HeapAlloc(GetProcessHeap(), 0,
+ sizeof(int) * preview.pageCapacity);
+ if (!preview.pageEnds) return;
+ } else if (page >= preview.pageCapacity) {
+ int *new_buffer;
+ new_buffer = HeapReAlloc(GetProcessHeap(), 0, preview.pageEnds,
+ sizeof(int) * preview.pageCapacity * 2);
+ if (!new_buffer) return;
+ preview.pageCapacity *= 2;
+ preview.pageEnds = new_buffer;
+ }
- char_from_pagenum(hEditorWnd, lpFr, page);
- SelectObject(lpFr->hdc, hBitmapCapture);
FillRect(lpFr->hdc, paper, GetStockObject(WHITE_BRUSH));
- SendMessageW(hEditorWnd, EM_FORMATRANGE, TRUE, (LPARAM)lpFr);
- /* EM_FORMATRANGE sets fr.rc to indicate the area printed in, but we want to
- keep the original for drawing margins */
- lpFr->rc = get_print_rect(lpFr->hdcTarget);
+ if (page > 1 && is_last_preview_page(page - 1)) return;
+ lpFr->chrg.cpMin = page <= 1 ? 0 : preview.pageEnds[page-2];
+ bottom = lpFr->rc.bottom;
+ preview.pageEnds[page-1] = SendMessageW(hEditorWnd, EM_FORMATRANGE, TRUE, (LPARAM)lpFr);
+
+ /* EM_FORMATRANGE sets fr.rc.bottom to indicate the area printed in,
+ * but we want to keep the original for drawing margins */
+ lpFr->rc.bottom = bottom;
SendMessageW(hEditorWnd, EM_FORMATRANGE, FALSE, 0);
}
-LRESULT print_preview(HWND hMainWnd)
+static void update_preview_buttons(HWND hMainWnd)
+{
+ HWND hReBar = GetDlgItem(hMainWnd, IDC_REBAR);
+ EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_PREVPAGE), preview.page > 1);
+ EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_NEXTPAGE),
+ !is_last_preview_page(preview.page) &&
+ !is_last_preview_page(preview.page + preview.pages_shown - 1));
+ EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_NUMPAGES),
+ preview.pages_shown > 1 ||
+ (!is_last_preview_page(1) && preview.zoomlevel == 0));
+ EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_ZOOMIN), preview.zoomlevel < 2);
+ EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_ZOOMOUT), preview.zoomlevel > 0);
+}
+
+LRESULT print_preview(HWND hwndPreview)
{
- FORMATRANGE fr;
- GETTEXTLENGTHEX gt;
HDC hdc;
RECT window, background;
- int bmWidth, bmHeight, bmNewWidth, bmNewHeight;
- float ratioWidth, ratioHeight, ratio;
- int xOffset, yOffset;
- int barheight;
- float spacing = 20.0;
- HWND hReBar = GetDlgItem(hMainWnd, IDC_REBAR);
PAINTSTRUCT ps;
+ POINT scrollpos;
- hdc = BeginPaint(hMainWnd, &ps);
- GetClientRect(hMainWnd, &window);
+ hdc = BeginPaint(hwndPreview, &ps);
+ GetClientRect(hwndPreview, &window);
- fr.hdcTarget = make_dc();
- fr.rc = get_print_rect(fr.hdcTarget);
- fr.rcPage.left = 0;
- fr.rcPage.top = 0;
- fr.rcPage.bottom = fr.rc.bottom + margins.bottom;
- fr.rcPage.right = fr.rc.right + margins.right;
-
- bmWidth = twips_to_pixels(fr.rcPage.right, GetDeviceCaps(hdc, LOGPIXELSX));
- bmHeight = twips_to_pixels(fr.rcPage.bottom, GetDeviceCaps(hdc, LOGPIXELSY));
-
- if(!preview.hdc)
- {
- RECT paper;
- HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR);
-
- preview.hdc = CreateCompatibleDC(hdc);
-
- if(preview.hdc2)
- {
- if(preview.hdc2 != (HDC)-1)
- DeleteDC(preview.hdc2);
- preview.hdc2 = CreateCompatibleDC(hdc);
- }
-
- fr.hdc = preview.hdc;
- gt.flags = GTL_DEFAULT;
- gt.codepage = 1200;
- fr.chrg.cpMin = 0;
- fr.chrg.cpMax = SendMessageW(hEditorWnd, EM_GETTEXTLENGTHEX, (WPARAM)>, 0);
-
- paper.left = 0;
- paper.right = bmWidth;
- paper.top = 0;
- paper.bottom = bmHeight;
-
- if(!preview.pages)
- preview.pages = get_num_pages(hEditorWnd, fr);
-
- fr.hdc = preview.hdc;
- draw_preview(hEditorWnd, &fr, bmWidth, bmHeight, &paper, preview.page);
-
- if(preview.hdc2)
- {
- fr.hdc = preview.hdc2;
- draw_preview(hEditorWnd, &fr, bmWidth, bmHeight, &paper, preview.page + 1);
- }
-
- EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_PREVPAGE), preview.page > 1);
- EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_NEXTPAGE), preview.hdc2 ?
- (preview.page + 1) < preview.pages :
- preview.page < preview.pages);
- EnableWindow(GetDlgItem(hReBar, ID_PREVIEW_NUMPAGES), preview.pages > 1);
- }
-
- barheight = SendMessageW(hReBar, RB_GETBARHEIGHT, 0, 0);
- ratioHeight = ((float)window.bottom - spacing - (float)barheight) / (float)bmHeight;
-
- if(preview.hdc2)
- ratioWidth = ((float)window.right / 2.0 - spacing * 2.0) / (float)bmWidth;
- else
- ratioWidth = ((float)window.right - spacing * 3.0) / (float)bmWidth;
-
- if(ratioWidth > ratioHeight)
- ratio = ratioHeight;
- else
- ratio = ratioWidth;
-
- bmNewWidth = (int)((float)bmWidth * ratio);
- bmNewHeight = (int)((float)bmHeight * ratio);
-
- yOffset = ((window.bottom - bmNewHeight + barheight) / 2);
-
- if(!preview.hdc2)
- xOffset = (window.right - bmNewWidth) / 2;
- else
- xOffset = (window.right - bmNewWidth * 2) / 2;
-
- window.top = barheight;
FillRect(hdc, &window, GetStockObject(GRAY_BRUSH));
- background.left = xOffset - 2;
- background.right = xOffset + bmNewWidth + 2;
- background.top = yOffset - 2;
- background.bottom = yOffset + bmNewHeight + 2;
+ scrollpos.x = GetScrollPos(hwndPreview, SB_HORZ);
+ scrollpos.y = GetScrollPos(hwndPreview, SB_VERT);
+
+ background.left = preview.spacing.cx - 2 - scrollpos.x;
+ background.right = background.left + preview.bmScaledSize.cx + 4;
+ background.top = preview.spacing.cy - 2 - scrollpos.y;
+ background.bottom = background.top + preview.bmScaledSize.cy + 4;
FillRect(hdc, &background, GetStockObject(BLACK_BRUSH));
- if(window.right != preview.window.right || window.bottom != preview.window.bottom)
+ if(preview.pages_shown > 1)
{
- draw_preview_page(preview.hdc, &preview.hdcSized, &fr, ratio, bmNewWidth, bmNewHeight, bmWidth, bmHeight);
+ background.left += preview.bmScaledSize.cx + preview.spacing.cx;
+ background.right += preview.bmScaledSize.cx + preview.spacing.cx;
- if(preview.hdc2)
- {
- background.left += bmNewWidth + spacing;
- background.right += bmNewWidth + spacing;
-
- FillRect(hdc, &background, GetStockObject(BLACK_BRUSH));
-
- draw_preview_page(preview.hdc2, &preview.hdcSized2, &fr, ratio, bmNewWidth, bmNewHeight, bmWidth, bmHeight);
- }
+ FillRect(hdc, &background, GetStockObject(BLACK_BRUSH));
}
- BitBlt(hdc, xOffset, yOffset, bmNewWidth, bmNewHeight, preview.hdcSized, 0, 0, SRCCOPY);
+ BitBlt(hdc, preview.spacing.cx - scrollpos.x, preview.spacing.cy - scrollpos.y,
+ preview.bmScaledSize.cx, preview.bmScaledSize.cy,
+ preview.hdcSized, 0, 0, SRCCOPY);
- if(preview.hdc2)
+ if(preview.pages_shown > 1)
{
- BitBlt(hdc, xOffset + bmNewWidth + spacing, yOffset, bmNewWidth, bmNewHeight, preview.hdcSized2, 0, 0, SRCCOPY);
+ BitBlt(hdc, preview.spacing.cx * 2 + preview.bmScaledSize.cx - scrollpos.x,
+ preview.spacing.cy - scrollpos.y, preview.bmScaledSize.cx,
+ preview.bmScaledSize.cy, preview.hdcSized2, 0, 0, SRCCOPY);
}
- DeleteDC(fr.hdcTarget);
preview.window = window;
- EndPaint(hMainWnd, &ps);
+ EndPaint(hwndPreview, &ps);
return 0;
}
-static void update_preview(HWND hWnd)
+static void update_preview_statusbar(HWND hMainWnd)
+{
+ HWND hStatusbar = GetDlgItem(hMainWnd, IDC_STATUSBAR);
+ HINSTANCE hInst = GetModuleHandleW(0);
+ WCHAR *p;
+ WCHAR wstr[MAX_STRING_LEN];
+
+ p = wstr;
+ if (preview.pages_shown < 2 || is_last_preview_page(preview.page))
+ {
+ static const WCHAR fmt[] = {' ','%','d','\0'};
+ p += LoadStringW(hInst, STRING_PREVIEW_PAGE, wstr, MAX_STRING_LEN);
+ wsprintfW(p, fmt, preview.page);
+ } else {
+ static const WCHAR fmt[] = {' ','%','d','-','%','d','\0'};
+ p += LoadStringW(hInst, STRING_PREVIEW_PAGES, wstr, MAX_STRING_LEN);
+ wsprintfW(p, fmt, preview.page, preview.page + 1);
+ }
+ SetWindowTextW(hStatusbar, wstr);
+}
+
+/* Update for page changes. */
+static void update_preview(HWND hMainWnd)
+{
+ RECT paper;
+ HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR);
+ HWND hwndPreview = GetDlgItem(hMainWnd, IDC_PREVIEW);
+ HBITMAP hBitmapCapture;
+ FORMATRANGE fr;
+ HDC hdc = GetDC(hwndPreview);
+
+ fr.hdcTarget = make_dc();
+ fr.rc = fr.rcPage = preview.rcPage;
+ fr.rc.left += margins.left;
+ fr.rc.top += margins.top;
+ fr.rc.bottom -= margins.bottom;
+ fr.rc.right -= margins.right;
+
+ fr.chrg.cpMin = 0;
+ fr.chrg.cpMax = preview.textlength;
+
+ paper.left = 0;
+ paper.right = preview.bmSize.cx;
+ paper.top = 0;
+ paper.bottom = preview.bmSize.cy;
+
+ if (!preview.hdc) {
+ preview.hdc = CreateCompatibleDC(hdc);
+ hBitmapCapture = CreateCompatibleBitmap(hdc, preview.bmSize.cx, preview.bmSize.cy);
+ SelectObject(preview.hdc, hBitmapCapture);
+ }
+
+ fr.hdc = preview.hdc;
+ draw_preview(hEditorWnd, &fr, &paper, preview.page);
+
+ if(preview.pages_shown > 1)
+ {
+ if (!preview.hdc2)
+ {
+ preview.hdc2 = CreateCompatibleDC(hdc);
+ hBitmapCapture = CreateCompatibleBitmap(hdc,
+ preview.bmSize.cx,
+ preview.bmSize.cy);
+ SelectObject(preview.hdc2, hBitmapCapture);
+ }
+
+ fr.hdc = preview.hdc2;
+ draw_preview(hEditorWnd, &fr, &fr.rcPage, preview.page + 1);
+ }
+ DeleteDC(fr.hdcTarget);
+ ReleaseDC(hwndPreview, hdc);
+
+ update_scaled_preview(hMainWnd);
+ update_preview_buttons(hMainWnd);
+ update_preview_statusbar(hMainWnd);
+}
+
+static void toggle_num_pages(HWND hMainWnd)
+{
+ HWND hReBar = GetDlgItem(hMainWnd, IDC_REBAR);
+ WCHAR name[MAX_STRING_LEN];
+ HINSTANCE hInst = GetModuleHandleW(0);
+ int nPreviewPages;
+
+ preview.pages_shown = preview.pages_shown > 1 ? 1 : 2;
+
+ nPreviewPages = preview.zoomlevel > 0 ? preview.saved_pages_shown :
+ preview.pages_shown;
+
+ LoadStringW(hInst, nPreviewPages > 1 ? STRING_PREVIEW_ONEPAGE :
+ STRING_PREVIEW_TWOPAGES,
+ name, MAX_STRING_LEN);
+
+ SetWindowTextW(GetDlgItem(hReBar, ID_PREVIEW_NUMPAGES), name);
+ update_preview_sizes(GetDlgItem(hMainWnd, IDC_PREVIEW), TRUE);
+ update_preview(hMainWnd);
+}
+
+/* Returns the page shown that the point is in (1 or 2) or 0 if the point
+ * isn't inside either page */
+int preview_page_hittest(POINT pt)
{
RECT rc;
+ rc.left = preview.spacing.cx;
+ rc.right = rc.left + preview.bmScaledSize.cx;
+ rc.top = preview.spacing.cy;
+ rc.bottom = rc.top + preview.bmScaledSize.cy;
+ if (PtInRect(&rc, pt))
+ return 1;
- DeleteDC(preview.hdc);
- preview.hdc = 0;
+ if (preview.pages_shown <= 1)
+ return 0;
- preview.window.right = 0;
+ rc.left += preview.bmScaledSize.cx + preview.spacing.cx;
+ rc.right += preview.bmScaledSize.cx + preview.spacing.cx;
+ if (PtInRect(&rc, pt))
+ return is_last_preview_page(preview.page) ? 1 : 2;
- GetClientRect(hWnd, &rc);
- rc.top += SendMessageW(GetDlgItem(hWnd, IDC_REBAR), RB_GETBARHEIGHT, 0, 0);
- InvalidateRect(hWnd, &rc, TRUE);
+ return 0;
+}
+
+LRESULT CALLBACK preview_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch(msg)
+ {
+ case WM_CREATE:
+ {
+ HWND hMainWnd = GetParent(hWnd);
+ HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR);
+ FORMATRANGE fr;
+ GETTEXTLENGTHEX gt = {GTL_DEFAULT, 1200};
+ HDC hdc = GetDC(hWnd);
+ HDC hdcTarget = make_dc();
+
+ fr.rc = preview.rcPage = get_print_rect(hdcTarget);
+ preview.rcPage.bottom += margins.bottom;
+ preview.rcPage.right += margins.right;
+ preview.rcPage.top = preview.rcPage.left = 0;
+ fr.rcPage = preview.rcPage;
+
+ preview.bmSize.cx = twips_to_pixels(preview.rcPage.right, GetDeviceCaps(hdc, LOGPIXELSX));
+ preview.bmSize.cy = twips_to_pixels(preview.rcPage.bottom, GetDeviceCaps(hdc, LOGPIXELSY));
+
+ preview.textlength = SendMessageW(hEditorWnd, EM_GETTEXTLENGTHEX, (WPARAM)>, 0);
+
+ fr.hdc = CreateCompatibleDC(hdc);
+ fr.hdcTarget = hdcTarget;
+ fr.chrg.cpMin = 0;
+ fr.chrg.cpMax = preview.textlength;
+ DeleteDC(fr.hdc);
+ DeleteDC(hdcTarget);
+ ReleaseDC(hWnd, hdc);
+
+ update_preview_sizes(hWnd, TRUE);
+ update_preview(hMainWnd);
+ break;
+ }
+
+ case WM_PAINT:
+ return print_preview(hWnd);
+
+ case WM_SIZE:
+ {
+ update_preview_sizes(hWnd, FALSE);
+ update_scaled_preview(hWnd);
+ break;
+ }
+
+ case WM_VSCROLL:
+ case WM_HSCROLL:
+ {
+ SCROLLINFO si;
+ RECT rc;
+ int nBar = (msg == WM_VSCROLL) ? SB_VERT : SB_HORZ;
+ int origPos;
+
+ GetClientRect(hWnd, &rc);
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_ALL;
+ GetScrollInfo(hWnd, nBar, &si);
+ origPos = si.nPos;
+ switch(LOWORD(wParam))
+ {
+ case SB_TOP: /* == SB_LEFT */
+ si.nPos = si.nMin;
+ break;
+ case SB_BOTTOM: /* == SB_RIGHT */
+ si.nPos = si.nMax;
+ break;
+ case SB_LINEUP: /* == SB_LINELEFT */
+ si.nPos -= si.nPage / 10;
+ break;
+ case SB_LINEDOWN: /* == SB_LINERIGHT */
+ si.nPos += si.nPage / 10;
+ break;
+ case SB_PAGEUP: /* == SB_PAGELEFT */
+ si.nPos -= si.nPage;
+ break;
+ case SB_PAGEDOWN: /* SB_PAGERIGHT */
+ si.nPos += si.nPage;
+ break;
+ case SB_THUMBTRACK:
+ si.nPos = si.nTrackPos;
+ break;
+ }
+ si.fMask = SIF_POS;
+ SetScrollInfo(hWnd, nBar, &si, TRUE);
+ GetScrollInfo(hWnd, nBar, &si);
+ if (si.nPos != origPos)
+ {
+ int amount = origPos - si.nPos;
+ if (msg == WM_VSCROLL)
+ ScrollWindow(hWnd, 0, amount, NULL, NULL);
+ else
+ ScrollWindow(hWnd, amount, 0, NULL, NULL);
+ }
+ return 0;
+ }
+
+ case WM_SETCURSOR:
+ {
+ POINT pt;
+ RECT rc;
+ int bHittest = FALSE;
+ DWORD messagePos = GetMessagePos();
+ pt.x = (short)LOWORD(messagePos);
+ pt.y = (short)HIWORD(messagePos);
+ ScreenToClient(hWnd, &pt);
+
+ GetClientRect(hWnd, &rc);
+ if (PtInRect(&rc, pt))
+ {
+ pt.x += GetScrollPos(hWnd, SB_HORZ);
+ pt.y += GetScrollPos(hWnd, SB_VERT);
+ bHittest = preview_page_hittest(pt);
+ }
+
+ if (bHittest)
+ SetCursor(LoadCursorW(GetModuleHandleW(0),
+ MAKEINTRESOURCEW(IDC_ZOOM)));
+ else
+ SetCursor(LoadCursorW(NULL, (WCHAR*)IDC_ARROW));
+
+ return TRUE;
+ }
+
+ case WM_LBUTTONDOWN:
+ {
+ int page;
+ POINT pt;
+ pt.x = (short)LOWORD(lParam) + GetScrollPos(hWnd, SB_HORZ);
+ pt.y = (short)HIWORD(lParam) + GetScrollPos(hWnd, SB_VERT);
+ if ((page = preview_page_hittest(pt)) > 0)
+ {
+ HWND hMainWnd = GetParent(hWnd);
+
+ /* Convert point from client coordinate to unzoomed page
+ * coordinate. */
+ pt.x -= preview.spacing.cx;
+ if (page > 1)
+ pt.x -= preview.bmScaledSize.cx + preview.spacing.cx;
+ pt.y -= preview.spacing.cy;
+ pt.x /= preview.zoomratio;
+ pt.y /= preview.zoomratio;
+
+ if (preview.zoomlevel == 0)
+ preview.saved_pages_shown = preview.pages_shown;
+ preview.zoomlevel = (preview.zoomlevel + 1) % 3;
+ preview.zoomratio = 0;
+ if (preview.zoomlevel == 0 && preview.saved_pages_shown > 1)
+ {
+ toggle_num_pages(hMainWnd);
+ } else if (preview.pages_shown > 1) {
+ if (page >= 2) preview.page++;
+ toggle_num_pages(hMainWnd);
+ } else {
+ update_preview_sizes(hWnd, TRUE);
+ update_scaled_preview(hMainWnd);
+ update_preview_buttons(hMainWnd);
+ }
+
+ if (preview.zoomlevel > 0) {
+ SCROLLINFO si;
+ /* Convert the coordinate back to client coordinate. */
+ pt.x *= preview.zoomratio;
+ pt.y *= preview.zoomratio;
+ pt.x += preview.spacing.cx;
+ pt.y += preview.spacing.cy;
+ /* Scroll to center view at that point on the page */
+ si.cbSize = sizeof(si);
+ si.fMask = SIF_PAGE;
+ GetScrollInfo(hWnd, SB_HORZ, &si);
+ pt.x -= si.nPage / 2;
+ SetScrollPos(hWnd, SB_HORZ, pt.x, TRUE);
+ GetScrollInfo(hWnd, SB_VERT, &si);
+ pt.y -= si.nPage / 2;
+ SetScrollPos(hWnd, SB_VERT, pt.y, TRUE);
+ }
+ }
+ }
+
+ default:
+ return DefWindowProcW(hWnd, msg, wParam, lParam);
+ }
+
+ return 0;
}
LRESULT preview_command(HWND hWnd, WPARAM wParam)
@@ -843,29 +1271,44 @@ LRESULT preview_command(HWND hWnd, WPARAM wParam)
break;
case ID_PREVIEW_NUMPAGES:
- {
- HWND hReBar = GetDlgItem(hWnd, IDC_REBAR);
- WCHAR name[MAX_STRING_LEN];
- HINSTANCE hInst = (HINSTANCE)GetWindowLongPtrW(hWnd, GWLP_HINSTANCE);
+ toggle_num_pages(hWnd);
+ break;
- if(preview.hdc2)
+ case ID_PREVIEW_ZOOMIN:
+ if (preview.zoomlevel < 2)
{
- DeleteDC(preview.hdc2);
- preview.hdc2 = 0;
- } else
- {
- if(preview.page == preview.pages)
- preview.page--;
- preview.hdc2 = (HDC)-1;
+ if (preview.zoomlevel == 0)
+ preview.saved_pages_shown = preview.pages_shown;
+ preview.zoomlevel++;
+ preview.zoomratio = 0;
+ if (preview.pages_shown > 1)
+ {
+ /* Forced switch to one page when zooming in. */
+ toggle_num_pages(hWnd);
+ } else {
+ HWND hwndPreview = GetDlgItem(hWnd, IDC_PREVIEW);
+ update_preview_sizes(hwndPreview, TRUE);
+ update_scaled_preview(hWnd);
+ update_preview_buttons(hWnd);
+ }
}
+ break;
- LoadStringW(hInst, preview.hdc2 ? STRING_PREVIEW_ONEPAGE : STRING_PREVIEW_TWOPAGES,
- name, MAX_STRING_LEN);
-
- SetWindowTextW(GetDlgItem(hReBar, ID_PREVIEW_NUMPAGES), name);
- update_preview(hWnd);
- }
- break;
+ case ID_PREVIEW_ZOOMOUT:
+ if (preview.zoomlevel > 0)
+ {
+ HWND hwndPreview = GetDlgItem(hWnd, IDC_PREVIEW);
+ preview.zoomlevel--;
+ preview.zoomratio = 0;
+ if (preview.zoomlevel == 0 && preview.saved_pages_shown > 1) {
+ toggle_num_pages(hWnd);
+ } else {
+ update_preview_sizes(hwndPreview, TRUE);
+ update_scaled_preview(hWnd);
+ update_preview_buttons(hWnd);
+ }
+ }
+ break;
case ID_PRINT:
dialog_print(hWnd, preview.wszFileName);
diff --git a/reactos/base/applications/wordpad/registry.c b/reactos/base/applications/wordpad/registry.c
index c7edc5b1e50..7311fb68232 100644
--- a/reactos/base/applications/wordpad/registry.c
+++ b/reactos/base/applications/wordpad/registry.c
@@ -27,6 +27,7 @@
static const WCHAR key_recentfiles[] = {'R','e','c','e','n','t',' ','f','i','l','e',
' ','l','i','s','t',0};
static const WCHAR key_options[] = {'O','p','t','i','o','n','s',0};
+static const WCHAR key_settings[] = {'S','e','t','t','i','n','g','s',0};
static const WCHAR key_rtf[] = {'R','T','F',0};
static const WCHAR key_text[] = {'T','e','x','t',0};
@@ -94,9 +95,14 @@ void registry_set_options(HWND hMainWnd)
RegSetValueExW(hKey, var_maximized, 0, REG_DWORD, (LPBYTE)&isMaximized, sizeof(DWORD));
registry_set_pagemargins(hKey);
+ RegCloseKey(hKey);
}
- RegCloseKey(hKey);
+ if(registry_get_handle(&hKey, &action, key_settings) == ERROR_SUCCESS)
+ {
+ registry_set_previewpages(hKey);
+ RegCloseKey(hKey);
+ }
}
void registry_read_winrect(RECT* rc)
@@ -339,6 +345,13 @@ void registry_read_options(void)
registry_read_pagemargins(hKey);
RegCloseKey(hKey);
}
+
+ if(registry_get_handle(&hKey, 0, key_settings) != ERROR_SUCCESS) {
+ registry_read_previewpages(NULL);
+ } else {
+ registry_read_previewpages(hKey);
+ RegCloseKey(hKey);
+ }
}
static void registry_read_formatopts(int index, LPCWSTR key, DWORD barState[], DWORD wordWrap[])
diff --git a/reactos/base/applications/wordpad/rsrc.rc b/reactos/base/applications/wordpad/rsrc.rc
index 4786e66ddcc..a3f66c55e5c 100644
--- a/reactos/base/applications/wordpad/rsrc.rc
+++ b/reactos/base/applications/wordpad/rsrc.rc
@@ -1,4 +1,4 @@
-/*
+/*
* Copyright 2004 by Krzysztof Foltman
* Copyright 2007 by Alexander N. Sørnes
*
@@ -61,20 +61,28 @@ IDI_WRI ICON "wri.ico"
/* @makedep: txt.ico */
IDI_TXT ICON "txt.ico"
+/* @makedep: zoom.cur */
+IDC_ZOOM CURSOR "zoom.cur"
+
+
#include "Da.rc"
-#include "De.rc"
#include "En.rc"
-#include "Fr.rc"
#include "Hu.rc"
-#include "Ja.rc"
#include "Ko.rc"
-#include "Lt.rc"
#include "Nl.rc"
-#include "No.rc"
#include "Pl.rc"
+#include "Tr.rc"
+
+/* UTF-8 */
+#include "De.rc"
+#include "Fr.rc"
+#include "It.rc"
+#include "Ja.rc"
+#include "Lt.rc"
+#include "No.rc"
#include "Pt.rc"
#include "Ru.rc"
#include "Si.rc"
#include "Sv.rc"
-#include "Tr.rc"
+#include "Uk.rc"
#include "Zh.rc"
diff --git a/reactos/base/applications/wordpad/wordpad.c b/reactos/base/applications/wordpad/wordpad.c
index e983c5d74b7..b9e6f3716a2 100644
--- a/reactos/base/applications/wordpad/wordpad.c
+++ b/reactos/base/applications/wordpad/wordpad.c
@@ -56,10 +56,14 @@ static const WCHAR wszMainWndClass[] = {'W','O','R','D','P','A','D','T','O','P',
static const WCHAR stringFormat[] = {'%','2','d','\0'};
+const WCHAR wszPreviewWndClass[] = {'P','r','t','P','r','e','v','i','e','w',0};
+LRESULT CALLBACK preview_proc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
+
static HWND hMainWnd;
static HWND hEditorWnd;
static HWND hFindWnd;
static HMENU hPopupMenu;
+static HMENU hColorPopupMenu;
static UINT ID_FINDMSGSTRING;
@@ -85,7 +89,7 @@ static void DoLoadStrings(void)
static const WCHAR files_txt[] = {'*','.','t','x','t','\0'};
static const WCHAR files_all[] = {'*','.','*','\0'};
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
LoadStringW(hInstance, STRING_RICHTEXT_FILES_RTF, p, MAX_STRING_LEN);
p += lstrlenW(p) + 1;
@@ -683,8 +687,7 @@ static void set_bar_states(void)
static void preview_exit(HWND hMainWnd)
{
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE);
- HMENU hMenu = LoadMenuW(hInstance, MAKEINTRESOURCEW(IDM_MAINMENU));
+ HMENU hMenu = LoadMenuW(GetModuleHandleW(0), MAKEINTRESOURCEW(IDM_MAINMENU));
HWND hEditorWnd = GetDlgItem(hMainWnd, IDC_EDITOR);
set_bar_states();
@@ -701,7 +704,7 @@ static void preview_exit(HWND hMainWnd)
static void set_fileformat(WPARAM format)
{
HICON hIcon;
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
fileFormat = format;
if(format & SF_TEXT)
@@ -980,8 +983,7 @@ static void DialogOpenFile(void)
static void dialog_about(void)
{
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE);
- HICON icon = LoadImageW(hInstance, MAKEINTRESOURCEW(IDI_WORDPAD), IMAGE_ICON, 48, 48, LR_SHARED);
+ HICON icon = LoadImageW(GetModuleHandleW(0), MAKEINTRESOURCEW(IDI_WORDPAD), IMAGE_ICON, 48, 48, LR_SHARED);
ShellAboutW(hMainWnd, wszAppTitle, 0, icon);
}
@@ -1088,7 +1090,7 @@ static void dialog_viewproperties(void)
PROPSHEETPAGEW psp[2];
PROPSHEETHEADERW psh;
size_t i;
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
LPCPROPSHEETPAGEW ppsp = (LPCPROPSHEETPAGEW)&psp;
psp[0].dwSize = sizeof(PROPSHEETPAGEW);
@@ -1241,7 +1243,7 @@ static LRESULT handle_findmsg(LPFINDREPLACEW pFr)
if(pFr->Flags & FR_WHOLEWORD)
flags |= FR_WHOLEWORD;
- ret = SendMessageW(hEditorWnd, EM_FINDTEXTW, (WPARAM)flags, (LPARAM)&ft);
+ ret = SendMessageW(hEditorWnd, EM_FINDTEXTW, flags, (LPARAM)&ft);
if(ret == -1)
{
@@ -1250,7 +1252,7 @@ static LRESULT handle_findmsg(LPFINDREPLACEW pFr)
ft.chrg.cpMin = cr.cpMin = 0;
ft.chrg.cpMax = cr.cpMax = startPos;
- ret = SendMessageW(hEditorWnd, EM_FINDTEXTW, (WPARAM)flags, (LPARAM)&ft);
+ ret = SendMessageW(hEditorWnd, EM_FINDTEXTW, flags, (LPARAM)&ft);
}
}
@@ -1263,7 +1265,7 @@ static LRESULT handle_findmsg(LPFINDREPLACEW pFr)
{
end = ret + lstrlenW(pFr->lpstrFindWhat);
cr.cpMin = end;
- SendMessageW(hEditorWnd, EM_SETSEL, (WPARAM)ret, (LPARAM)end);
+ SendMessageW(hEditorWnd, EM_SETSEL, ret, end);
SendMessageW(hEditorWnd, EM_SCROLLCARET, 0, 0);
if(pFr->Flags & FR_REPLACE || pFr->Flags & FR_REPLACEALL)
@@ -1414,7 +1416,7 @@ static INT_PTR CALLBACK newfile_proc(HWND hWnd, UINT message, WPARAM wParam, LPA
{
case WM_INITDIALOG:
{
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
WCHAR buffer[MAX_STRING_LEN];
HWND hListWnd = GetDlgItem(hWnd, IDC_NEWFILE);
@@ -1459,8 +1461,7 @@ static INT_PTR CALLBACK paraformat_proc(HWND hWnd, UINT message, WPARAM wParam,
{
case WM_INITDIALOG:
{
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hMainWnd,
- GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
WCHAR buffer[MAX_STRING_LEN];
HWND hListWnd = GetDlgItem(hWnd, IDC_PARA_ALIGN);
HWND hLeftWnd = GetDlgItem(hWnd, IDC_PARA_LEFT);
@@ -1737,7 +1738,7 @@ static int context_menu(LPARAM lParam)
int from = 0, to = 0;
POINTL pt;
SendMessageW(hEditorWnd, EM_GETSEL, (WPARAM)&from, (LPARAM)&to);
- SendMessageW(hEditorWnd, EM_POSFROMCHAR, (WPARAM)&pt, (LPARAM)to);
+ SendMessageW(hEditorWnd, EM_POSFROMCHAR, (WPARAM)&pt, to);
ClientToScreen(hEditorWnd, (POINT*)&pt);
x = pt.x;
y = pt.y;
@@ -1752,7 +1753,7 @@ static int context_menu(LPARAM lParam)
static LRESULT OnCreate( HWND hWnd )
{
HWND hToolBarWnd, hFormatBarWnd, hReBarWnd, hFontListWnd, hSizeListWnd, hRulerWnd;
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
HANDLE hDLL;
TBADDBITMAP ab;
int nStdBitmaps = 0;
@@ -1836,17 +1837,18 @@ static LRESULT OnCreate( HWND hWnd )
hFormatBarWnd = CreateToolbarEx(hReBarWnd,
CCS_NOPARENTALIGN | CCS_NOMOVEY | WS_VISIBLE | TBSTYLE_TOOLTIPS | TBSTYLE_BUTTON,
- IDC_FORMATBAR, 7, hInstance, IDB_FORMATBAR, NULL, 0, 16, 16, 16, 16, sizeof(TBBUTTON));
+ IDC_FORMATBAR, 8, hInstance, IDB_FORMATBAR, NULL, 0, 16, 16, 16, 16, sizeof(TBBUTTON));
AddButton(hFormatBarWnd, 0, ID_FORMAT_BOLD);
AddButton(hFormatBarWnd, 1, ID_FORMAT_ITALIC);
AddButton(hFormatBarWnd, 2, ID_FORMAT_UNDERLINE);
+ AddButton(hFormatBarWnd, 3, ID_FORMAT_COLOR);
AddSeparator(hFormatBarWnd);
- AddButton(hFormatBarWnd, 3, ID_ALIGN_LEFT);
- AddButton(hFormatBarWnd, 4, ID_ALIGN_CENTER);
- AddButton(hFormatBarWnd, 5, ID_ALIGN_RIGHT);
+ AddButton(hFormatBarWnd, 4, ID_ALIGN_LEFT);
+ AddButton(hFormatBarWnd, 5, ID_ALIGN_CENTER);
+ AddButton(hFormatBarWnd, 6, ID_ALIGN_RIGHT);
AddSeparator(hFormatBarWnd);
- AddButton(hFormatBarWnd, 6, ID_BULLET);
+ AddButton(hFormatBarWnd, 7, ID_BULLET);
SendMessageW(hFormatBarWnd, TB_AUTOSIZE, 0, 0);
@@ -2001,6 +2003,15 @@ static LRESULT OnNotify( HWND hWnd, LPARAM lParam)
return 0;
}
+/* Copied from dlls/comdlg32/fontdlg.c */
+static const COLORREF textcolors[]=
+{
+ 0x00000000L,0x00000080L,0x00008000L,0x00008080L,
+ 0x00800000L,0x00800080L,0x00808000L,0x00808080L,
+ 0x00c0c0c0L,0x000000ffL,0x0000ff00L,0x0000ffffL,
+ 0x00ff0000L,0x00ff00ffL,0x00ffff00L,0x00FFFFFFL
+};
+
static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
{
HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
@@ -2018,7 +2029,7 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
case ID_FILE_NEW:
{
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
+ HINSTANCE hInstance = GetModuleHandleW(0);
int ret = DialogBox(hInstance, MAKEINTRESOURCE(IDD_NEWFILE), hWnd,
newfile_proc);
@@ -2098,7 +2109,7 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
break;
case ID_PRINT_QUICK:
- print_quick(wszFileName);
+ print_quick(hMainWnd, wszFileName);
target_device(hMainWnd, wordWrap[reg_formatindex(fileFormat)]);
break;
@@ -2106,7 +2117,7 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
{
int index = reg_formatindex(fileFormat);
DWORD tmp = barState[index];
- barState[index] = 0;
+ barState[index] = 1 << BANDID_STATUSBAR;
set_bar_states();
barState[index] = tmp;
ShowWindow(hEditorWnd, FALSE);
@@ -2152,6 +2163,46 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
break;
}
+ case ID_FORMAT_COLOR:
+ {
+ HWND hReBarWnd = GetDlgItem(hWnd, IDC_REBAR);
+ HWND hFormatBarWnd = GetDlgItem(hReBarWnd, IDC_FORMATBAR);
+ HMENU hPop;
+ RECT itemrc;
+ POINT pt;
+ int mid;
+ int itemidx = SendMessage(hFormatBarWnd, TB_COMMANDTOINDEX, ID_FORMAT_COLOR, 0);
+
+ SendMessage(hFormatBarWnd, TB_GETITEMRECT, itemidx, (LPARAM)&itemrc);
+ pt.x = itemrc.left;
+ pt.y = itemrc.bottom;
+ ClientToScreen(hFormatBarWnd, &pt);
+ hPop = GetSubMenu(hColorPopupMenu, 0);
+ mid = TrackPopupMenu(hPop, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON |
+ TPM_RETURNCMD | TPM_NONOTIFY,
+ pt.x, pt.y, 0, hWnd, 0);
+ if (mid >= ID_COLOR_FIRST && mid <= ID_COLOR_AUTOMATIC)
+ {
+ CHARFORMAT2W fmt;
+
+ ZeroMemory(&fmt, sizeof(fmt));
+ fmt.cbSize = sizeof(fmt);
+ SendMessageW(hwndEditor, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&fmt);
+
+ fmt.dwMask = CFM_COLOR;
+
+ if (mid < ID_COLOR_AUTOMATIC) {
+ fmt.crTextColor = textcolors[mid - ID_COLOR_FIRST];
+ fmt.dwEffects &= ~CFE_AUTOCOLOR;
+ } else {
+ fmt.dwEffects |= CFE_AUTOCOLOR;
+ }
+
+ SendMessageW(hwndEditor, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&fmt);
+ }
+ break;
+ }
+
case ID_EDIT_CUT:
PostMessageW(hwndEditor, WM_CUT, 0, 0);
break;
@@ -2334,25 +2385,15 @@ static LRESULT OnCommand( HWND hWnd, WPARAM wParam, LPARAM lParam)
break;
case ID_DATETIME:
- {
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
- DialogBoxW(hInstance, MAKEINTRESOURCEW(IDD_DATETIME), hWnd, datetime_proc);
+ DialogBoxW(GetModuleHandleW(0), MAKEINTRESOURCEW(IDD_DATETIME), hWnd, datetime_proc);
break;
- }
case ID_PARAFORMAT:
- {
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
- DialogBoxW(hInstance, MAKEINTRESOURCEW(IDD_PARAFORMAT), hWnd,
- paraformat_proc);
- }
+ DialogBoxW(GetModuleHandleW(0), MAKEINTRESOURCEW(IDD_PARAFORMAT), hWnd, paraformat_proc);
break;
case ID_TABSTOPS:
- {
- HINSTANCE hInstance = (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE);
- DialogBoxW(hInstance, MAKEINTRESOURCEW(IDD_TABSTOPS), hWnd, tabstops_proc);
- }
+ DialogBoxW(GetModuleHandleW(0), MAKEINTRESOURCEW(IDD_PARAFORMAT), hWnd, tabstops_proc);
break;
case ID_ABOUT:
@@ -2460,7 +2501,7 @@ static LRESULT OnSize( HWND hWnd, WPARAM wParam, LPARAM lParam )
{
int nStatusSize = 0;
RECT rc;
- HWND hwndEditor = GetDlgItem(hWnd, IDC_EDITOR);
+ HWND hwndEditor = preview_isactive() ? GetDlgItem(hWnd, IDC_PREVIEW) : GetDlgItem(hWnd, IDC_EDITOR);
HWND hwndStatusBar = GetDlgItem(hWnd, IDC_STATUSBAR);
HWND hwndReBar = GetDlgItem(hWnd, IDC_REBAR);
HWND hRulerWnd = GetDlgItem(hWnd, IDC_RULER);
@@ -2563,9 +2604,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPara
}
break;
case WM_PAINT:
- if(preview_isactive())
- return print_preview(hWnd);
- else
+ if(!preview_isactive())
return DefWindowProcW(hWnd, msg, wParam, lParam);
default:
@@ -2605,6 +2644,18 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdPar
wc.lpszClassName = wszMainWndClass;
RegisterClassW(&wc);
+ wc.style = CS_HREDRAW | CS_VREDRAW;
+ wc.lpfnWndProc = preview_proc;
+ wc.cbClsExtra = 0;
+ wc.cbWndExtra = 0;
+ wc.hInstance = hInstance;
+ wc.hIcon = NULL;
+ wc.hCursor = LoadCursor(NULL, IDC_IBEAM);
+ wc.hbrBackground = GetSysColorBrush(COLOR_WINDOW);
+ wc.lpszMenuName = NULL;
+ wc.lpszClassName = wszPreviewWndClass;
+ RegisterClassW(&wc);
+
registry_read_winrect(&rc);
hMainWnd = CreateWindowExW(0, wszMainWndClass, wszAppTitle, WS_CLIPCHILDREN|WS_OVERLAPPEDWINDOW,
rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, NULL, NULL, hInstance, NULL);
@@ -2618,6 +2669,7 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdPar
set_bar_states();
set_fileformat(SF_RTF);
hPopupMenu = LoadMenuW(hInstance, MAKEINTRESOURCEW(IDM_POPUP));
+ hColorPopupMenu = LoadMenuW(hInstance, MAKEINTRESOURCEW(IDM_COLOR_POPUP));
get_default_printer_opts();
target_device(hMainWnd, wordWrap[reg_formatindex(fileFormat)]);
diff --git a/reactos/base/applications/wordpad/wordpad.h b/reactos/base/applications/wordpad/wordpad.h
index b51bec8fcb0..2f774c3aff0 100644
--- a/reactos/base/applications/wordpad/wordpad.h
+++ b/reactos/base/applications/wordpad/wordpad.h
@@ -49,6 +49,8 @@
#define ID_PREVIEW_NEXTPAGE 1017
#define ID_PREVIEW_PREVPAGE 1018
#define ID_PREVIEW_NUMPAGES 1019
+#define ID_PREVIEW_ZOOMIN 1020
+#define ID_PREVIEW_ZOOMOUT 1021
#define ID_ALIGN_LEFT 1100
#define ID_ALIGN_CENTER 1101
@@ -78,13 +80,14 @@
#define ID_FORMAT_BOLD 1400
#define ID_FORMAT_ITALIC 1401
#define ID_FORMAT_UNDERLINE 1402
+#define ID_FORMAT_COLOR 1403
#define ID_TOGGLE_TOOLBAR 1500
#define ID_TOGGLE_FORMATBAR 1501
#define ID_TOGGLE_STATUSBAR 1502
#define ID_TOGGLE_RULER 1503
-#define PREVIEW_BUTTONS 5
+#define PREVIEW_BUTTONS 7
#define FILELIST_ENTRIES 4
#define FILELIST_ENTRY_LENGTH 33
@@ -101,7 +104,9 @@
#define BANDID_PREVIEW_BTN3 8
#define BANDID_PREVIEW_BTN4 9
#define BANDID_PREVIEW_BTN5 10
-#define BANDID_PREVIEW_BUFFER 11
+#define BANDID_PREVIEW_BTN6 11
+#define BANDID_PREVIEW_BTN7 12
+#define BANDID_PREVIEW_BUFFER 13
#define ID_WORDWRAP_NONE 0
#define ID_WORDWRAP_WINDOW 1
@@ -129,6 +134,25 @@
#define ID_ABOUT 1603
#define ID_VIEWPROPERTIES 1604
+#define ID_COLOR_FIRST 1800
+#define ID_COLOR_BLACK 1800
+#define ID_COLOR_MAROON 1801
+#define ID_COLOR_GREEN 1802
+#define ID_COLOR_OLIVE 1803
+#define ID_COLOR_NAVY 1804
+#define ID_COLOR_PURPLE 1805
+#define ID_COLOR_TEAL 1806
+#define ID_COLOR_GRAY 1807
+#define ID_COLOR_SILVER 1808
+#define ID_COLOR_RED 1809
+#define ID_COLOR_LIME 1810
+#define ID_COLOR_YELLOW 1811
+#define ID_COLOR_BLUE 1812
+#define ID_COLOR_FUCHSIA 1813
+#define ID_COLOR_AQUA 1814
+#define ID_COLOR_WHITE 1815
+#define ID_COLOR_AUTOMATIC 1816
+
#define IDC_STATUSBAR 2000
#define IDC_EDITOR 2001
#define IDC_TOOLBAR 2002
@@ -145,6 +169,7 @@
#define IDC_FONTLIST 2013
#define IDC_SIZELIST 2014
#define IDC_RULER 2015
+#define IDC_PREVIEW 2016
#define IDD_DATETIME 2100
#define IDD_NEWFILE 2101
@@ -154,6 +179,7 @@
#define IDM_MAINMENU 2200
#define IDM_POPUP 2201
+#define IDM_COLOR_POPUP 2202
#define IDB_TOOLBAR 100
#define IDB_FORMATBAR 101
@@ -163,6 +189,8 @@
#define IDI_WRI 104
#define IDI_TXT 105
+#define IDC_ZOOM 106
+
#define STRING_ALL_FILES 1400
#define STRING_TEXT_FILES_TXT 1401
#define STRING_TEXT_FILES_UNICODE_TXT 1402
@@ -187,9 +215,13 @@
#define STRING_PREVIEW_PREVPAGE 1450
#define STRING_PREVIEW_TWOPAGES 1451
#define STRING_PREVIEW_ONEPAGE 1452
-#define STRING_PREVIEW_CLOSE 1453
+#define STRING_PREVIEW_ZOOMIN 1453
+#define STRING_PREVIEW_ZOOMOUT 1454
+#define STRING_PREVIEW_CLOSE 1455
+#define STRING_PREVIEW_PAGE 1456
+#define STRING_PREVIEW_PAGES 1457
-#define STRING_UNITS_CM 1454
+#define STRING_UNITS_CM 1458
#define STRING_DEFAULT_FILENAME 1700
#define STRING_PROMPT_SAVE_CHANGES 1701
@@ -210,7 +242,7 @@ LPWSTR file_basename(LPWSTR);
void dialog_printsetup(HWND);
void dialog_print(HWND, LPWSTR);
void target_device(HWND, DWORD);
-void print_quick(LPWSTR);
+void print_quick(HWND, LPWSTR);
LRESULT preview_command(HWND, WPARAM);
void init_preview(HWND, LPWSTR);
void close_preview(HWND);
@@ -219,6 +251,8 @@ LRESULT print_preview(HWND);
void get_default_printer_opts(void);
void registry_set_pagemargins(HKEY);
void registry_read_pagemargins(HKEY);
+void registry_set_previewpages(HKEY hKey);
+void registry_read_previewpages(HKEY hKey);
LRESULT CALLBACK ruler_proc(HWND, UINT, WPARAM, LPARAM);
void redraw_ruler(HWND);
diff --git a/reactos/base/applications/wordpad/zoom.cur b/reactos/base/applications/wordpad/zoom.cur
new file mode 100644
index 00000000000..26d1a8fa157
Binary files /dev/null and b/reactos/base/applications/wordpad/zoom.cur differ
diff --git a/reactos/base/applications/write/De.rc b/reactos/base/applications/write/De.rc
index 83cb909c318..db175a02d56 100644
--- a/reactos/base/applications/write/De.rc
+++ b/reactos/base/applications/write/De.rc
@@ -27,4 +27,3 @@ STRINGTABLE
{
IDS_FAILED, "Der Start von Wordpad ist fehlgeschlagen"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/write/Fr.rc b/reactos/base/applications/write/Fr.rc
index 69105d9a788..a81dffda827 100644
--- a/reactos/base/applications/write/Fr.rc
+++ b/reactos/base/applications/write/Fr.rc
@@ -28,4 +28,3 @@ STRINGTABLE
{
IDS_FAILED, "Wordpad n'a pas pu être démarré"
}
-#pragma code_page(default)
diff --git a/reactos/base/system/msiexec/version.rc b/reactos/base/applications/write/It.rc
similarity index 64%
rename from reactos/base/system/msiexec/version.rc
rename to reactos/base/applications/write/It.rc
index 077759431e2..b906a7906b8 100644
--- a/reactos/base/system/msiexec/version.rc
+++ b/reactos/base/applications/write/It.rc
@@ -1,5 +1,7 @@
/*
- * Copyright (c) 2004 Mike McCormack
+ * Italian language support
+ *
+ * Copyright (C) 2010 by Luca Bennati
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -16,13 +18,14 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#define WINE_FILEDESCRIPTION_STR "Wine Installer"
-#define WINE_FILENAME_STR "msiexec.exe"
-#define WINE_FILETYPE VFT_APP
-#define WINE_FILEVERSION 3,1,4000,1823
-#define WINE_FILEVERSION_STR "3.1.4000.1823"
-#define WINE_PRODUCTVERSION 3,1,4000,1823
-#define WINE_PRODUCTVERSION_STR "3.1.4000.1823"
-#define WINE_PRODUCTNAME_STR "Wine Installer"
+#include "resources.h"
-#include "wine/wine_common_ver.rc"
+/*UTF-8*/
+#pragma code_page(65001)
+
+LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL
+
+STRINGTABLE
+{
+ IDS_FAILED, "Impossibile avviare WordPad"
+}
diff --git a/reactos/base/applications/write/Ja.rc b/reactos/base/applications/write/Ja.rc
index 6b942ce02e0..5c9a8259a97 100644
--- a/reactos/base/applications/write/Ja.rc
+++ b/reactos/base/applications/write/Ja.rc
@@ -29,4 +29,3 @@ STRINGTABLE
{
IDS_FAILED, "Wordpad の起動に失敗しました"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/write/Lt.rc b/reactos/base/applications/write/Lt.rc
index 8e3eae38569..5cef934fbc7 100644
--- a/reactos/base/applications/write/Lt.rc
+++ b/reactos/base/applications/write/Lt.rc
@@ -29,4 +29,3 @@ STRINGTABLE
{
IDS_FAILED, "Nepavyko paleisti Wordpad"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/write/Ro.rc b/reactos/base/applications/write/Ro.rc
index a871350bfda..f6a7b65665f 100644
--- a/reactos/base/applications/write/Ro.rc
+++ b/reactos/base/applications/write/Ro.rc
@@ -27,4 +27,3 @@ STRINGTABLE
{
IDS_FAILED, "Execuția Wordpad a eșuat"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/write/Ru.rc b/reactos/base/applications/write/Ru.rc
index e64003fe566..008011f2720 100644
--- a/reactos/base/applications/write/Ru.rc
+++ b/reactos/base/applications/write/Ru.rc
@@ -29,4 +29,3 @@ STRINGTABLE
{
IDS_FAILED, "Не удалось запустить Wordpad"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/write/Si.rc b/reactos/base/applications/write/Si.rc
index 3eaae9ed5ee..9d3e5fe1520 100644
--- a/reactos/base/applications/write/Si.rc
+++ b/reactos/base/applications/write/Si.rc
@@ -28,4 +28,3 @@ STRINGTABLE
{
IDS_FAILED, "Zagon programa Wordpad ni uspel"
}
-#pragma code_page(default)
diff --git a/reactos/base/applications/write/Uk.rc b/reactos/base/applications/write/Uk.rc
new file mode 100644
index 00000000000..f922210e0e3
--- /dev/null
+++ b/reactos/base/applications/write/Uk.rc
@@ -0,0 +1,33 @@
+/*
+ * Ukrainian language support
+ *
+ * Copyright (C) 2007 Mikolaj Zalewski
+ *
+ * Copyright (C) 2010 Igor Paliychuk
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "resources.h"
+
+/* UTF-8 */
+#pragma code_page(65001)
+
+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
+
+STRINGTABLE
+{
+ IDS_FAILED, "Не вдалось запустити Wordpad"
+}
diff --git a/reactos/base/applications/write/rsrc.rc b/reactos/base/applications/write/rsrc.rc
index 7c55c3001b4..45c5d308136 100644
--- a/reactos/base/applications/write/rsrc.rc
+++ b/reactos/base/applications/write/rsrc.rc
@@ -20,15 +20,21 @@
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-#include "De.rc"
#include "En.rc"
-#include "Fr.rc"
-#include "Ja.rc"
#include "Ko.rc"
-#include "Lt.rc"
#include "Nl.rc"
+#include "No.rc"
+#include "Pl.rc"
#include "Pt.rc"
+#include "Sv.rc"
+
+/* UTF-8 */
+#include "De.rc"
+#include "Fr.rc"
+#include "It.rc"
+#include "Ja.rc"
+#include "Lt.rc"
#include "Ro.rc"
#include "Ru.rc"
#include "Si.rc"
-#include "Sv.rc"
+#include "Uk.rc"
diff --git a/reactos/base/services/dhcp/dhclient.c b/reactos/base/services/dhcp/dhclient.c
index 8b18010735c..db263bc4ab5 100644
--- a/reactos/base/services/dhcp/dhclient.c
+++ b/reactos/base/services/dhcp/dhclient.c
@@ -57,6 +57,7 @@
#include
#include "dhcpd.h"
#include "privsep.h"
+#include "debug.h"
#define PERIOD 0x2e
#define hyphenchar(c) ((c) == 0x2d)
@@ -109,22 +110,106 @@ int check_arp( struct interface_info *ip, struct client_lease *lp )
time_t scripttime;
+
+static VOID CALLBACK ServiceMain(DWORD argc, LPWSTR *argv);
+static WCHAR ServiceName[] = L"DHCP";
+static SERVICE_TABLE_ENTRYW ServiceTable[] =
+{
+ {ServiceName, ServiceMain},
+ {NULL, NULL}
+};
+
+SERVICE_STATUS_HANDLE ServiceStatusHandle;
+SERVICE_STATUS ServiceStatus;
+
+
/* XXX Implement me */
int check_arp( struct interface_info *ip, struct client_lease *lp ) {
return 1;
}
-static VOID CALLBACK
-DispatchMain(DWORD argc, LPTSTR *argv)
+
+static VOID
+UpdateServiceStatus(DWORD dwState)
{
- dispatch();
+ ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+ ServiceStatus.dwCurrentState = dwState;
+
+ ServiceStatus.dwControlsAccepted = 0;
+
+ ServiceStatus.dwWin32ExitCode = 0;
+ ServiceStatus.dwServiceSpecificExitCode = 0;
+ ServiceStatus.dwCheckPoint = 0;
+
+ if (dwState == SERVICE_START_PENDING ||
+ dwState == SERVICE_STOP_PENDING ||
+ dwState == SERVICE_PAUSE_PENDING ||
+ dwState == SERVICE_CONTINUE_PENDING)
+ ServiceStatus.dwWaitHint = 10000;
+ else
+ ServiceStatus.dwWaitHint = 0;
+
+ SetServiceStatus(ServiceStatusHandle,
+ &ServiceStatus);
}
-static SERVICE_TABLE_ENTRY ServiceTable[2] =
+
+static DWORD WINAPI
+ServiceControlHandler(DWORD dwControl,
+ DWORD dwEventType,
+ LPVOID lpEventData,
+ LPVOID lpContext)
{
- {TEXT("DHCP"), DispatchMain},
- {NULL, NULL}
-};
+ switch (dwControl)
+ {
+ case SERVICE_CONTROL_STOP:
+ UpdateServiceStatus(SERVICE_STOP_PENDING);
+ UpdateServiceStatus(SERVICE_STOPPED);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_PAUSE:
+ UpdateServiceStatus(SERVICE_PAUSED);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_CONTINUE:
+ UpdateServiceStatus(SERVICE_START_PENDING);
+ UpdateServiceStatus(SERVICE_RUNNING);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_INTERROGATE:
+ SetServiceStatus(ServiceStatusHandle,
+ &ServiceStatus);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_SHUTDOWN:
+ UpdateServiceStatus(SERVICE_STOP_PENDING);
+ UpdateServiceStatus(SERVICE_STOPPED);
+ return ERROR_SUCCESS;
+
+ default :
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+}
+
+
+static VOID CALLBACK
+ServiceMain(DWORD argc, LPWSTR *argv)
+{
+ ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName,
+ ServiceControlHandler,
+ NULL);
+ if (!ServiceStatusHandle)
+ {
+ return;
+ }
+
+ UpdateServiceStatus(SERVICE_START_PENDING);
+
+ UpdateServiceStatus(SERVICE_RUNNING);
+
+ dispatch();
+}
+
int
main(int argc, char *argv[])
@@ -147,7 +232,7 @@ main(int argc, char *argv[])
DH_DbgPrint(MID_TRACE,("Going into dispatch()\n"));
- StartServiceCtrlDispatcher(ServiceTable);
+ StartServiceCtrlDispatcherW(ServiceTable);
/* not reached */
return (0);
diff --git a/reactos/base/services/dhcp/include/debug.h b/reactos/base/services/dhcp/include/debug.h
index 369b8ee049b..de374aaba45 100644
--- a/reactos/base/services/dhcp/include/debug.h
+++ b/reactos/base/services/dhcp/include/debug.h
@@ -6,8 +6,8 @@
* DEFINES: DBG - Enable debug output
* NASSERT - Disable assertions
*/
-#ifndef __DEBUG_H
-#define __DEBUG_H
+
+#pragma once
#define NORMAL_MASK 0x000000FF
#define SPECIAL_MASK 0xFFFFFF00
@@ -48,6 +48,4 @@ extern unsigned long debug_trace_level;
#endif /* DBG */
-#endif /* __DEBUG_H */
-
/* EOF */
diff --git a/reactos/base/services/dhcp/include/dhcpd.h b/reactos/base/services/dhcp/include/dhcpd.h
index 44bae6de878..d6a2fa405b8 100644
--- a/reactos/base/services/dhcp/include/dhcpd.h
+++ b/reactos/base/services/dhcp/include/dhcpd.h
@@ -39,8 +39,7 @@
* Enterprises, see ``http://www.vix.com''.
*/
-#ifndef DHCPD_H
-#define DHCPD_H
+#pragma once
#include
#include
@@ -484,5 +483,3 @@ int buf_add(struct buf *, void *, size_t);
int buf_close(int, struct buf *);
ssize_t buf_read(int, void *, size_t);
void dispatch_imsg(int);
-
-#endif/*DHCPD_H*/
diff --git a/reactos/base/services/dhcp/include/predec.h b/reactos/base/services/dhcp/include/predec.h
index 7f2515beb33..59fb94b003c 100644
--- a/reactos/base/services/dhcp/include/predec.h
+++ b/reactos/base/services/dhcp/include/predec.h
@@ -1,7 +1,4 @@
-#ifndef REACTOS_PREDEC_H
-#define REACTOS_PREDEC_H
+#pragma once
struct iaddr;
struct interface_info;
-
-#endif
diff --git a/reactos/base/services/dhcp/include/stdint.h b/reactos/base/services/dhcp/include/stdint.h
index 988c30359e9..a45def0e663 100644
--- a/reactos/base/services/dhcp/include/stdint.h
+++ b/reactos/base/services/dhcp/include/stdint.h
@@ -1,5 +1,4 @@
-#ifndef REACTOS_STDINT_H
-#define REACTOS_STDINT_H
+#pragma once
typedef signed char int8_t;
typedef unsigned char u_int8_t;
@@ -9,5 +8,3 @@ typedef int int32_t;
typedef unsigned int u_int32_t;
typedef char *caddr_t;
-
-#endif
diff --git a/reactos/base/services/eventlog/eventlog.c b/reactos/base/services/eventlog/eventlog.c
index 9a2ddab82b1..70663351ab5 100644
--- a/reactos/base/services/eventlog/eventlog.c
+++ b/reactos/base/services/eventlog/eventlog.c
@@ -13,20 +13,89 @@
/* GLOBALS ******************************************************************/
-VOID CALLBACK ServiceMain(DWORD argc, LPTSTR * argv);
-
-SERVICE_TABLE_ENTRY ServiceTable[2] =
+static VOID CALLBACK ServiceMain(DWORD, LPWSTR *);
+static WCHAR ServiceName[] = L"EventLog";
+static SERVICE_TABLE_ENTRYW ServiceTable[2] =
{
- { L"EventLog", (LPSERVICE_MAIN_FUNCTION) ServiceMain },
+ { ServiceName, ServiceMain },
{ NULL, NULL }
};
+SERVICE_STATUS ServiceStatus;
+SERVICE_STATUS_HANDLE ServiceStatusHandle;
+
BOOL onLiveCD = FALSE; // On livecd events will go to debug output only
HANDLE MyHeap = NULL;
/* FUNCTIONS ****************************************************************/
-VOID CALLBACK ServiceMain(DWORD argc, LPTSTR * argv)
+static VOID
+UpdateServiceStatus(DWORD dwState)
+{
+ ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+ ServiceStatus.dwCurrentState = dwState;
+ ServiceStatus.dwControlsAccepted = 0;
+ ServiceStatus.dwWin32ExitCode = 0;
+ ServiceStatus.dwServiceSpecificExitCode = 0;
+ ServiceStatus.dwCheckPoint = 0;
+
+ if (dwState == SERVICE_START_PENDING ||
+ dwState == SERVICE_STOP_PENDING ||
+ dwState == SERVICE_PAUSE_PENDING ||
+ dwState == SERVICE_CONTINUE_PENDING)
+ ServiceStatus.dwWaitHint = 10000;
+ else
+ ServiceStatus.dwWaitHint = 0;
+
+ SetServiceStatus(ServiceStatusHandle,
+ &ServiceStatus);
+}
+
+static DWORD WINAPI
+ServiceControlHandler(DWORD dwControl,
+ DWORD dwEventType,
+ LPVOID lpEventData,
+ LPVOID lpContext)
+{
+ DPRINT("ServiceControlHandler() called\n");
+
+ switch (dwControl)
+ {
+ case SERVICE_CONTROL_STOP:
+ DPRINT(" SERVICE_CONTROL_STOP received\n");
+ UpdateServiceStatus(SERVICE_STOPPED);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_PAUSE:
+ DPRINT(" SERVICE_CONTROL_PAUSE received\n");
+ UpdateServiceStatus(SERVICE_PAUSED);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_CONTINUE:
+ DPRINT(" SERVICE_CONTROL_CONTINUE received\n");
+ UpdateServiceStatus(SERVICE_RUNNING);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_INTERROGATE:
+ DPRINT(" SERVICE_CONTROL_INTERROGATE received\n");
+ SetServiceStatus(ServiceStatusHandle,
+ &ServiceStatus);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_SHUTDOWN:
+ DPRINT(" SERVICE_CONTROL_SHUTDOWN received\n");
+ UpdateServiceStatus(SERVICE_STOPPED);
+ return ERROR_SUCCESS;
+
+ default :
+ DPRINT1(" Control %lu received\n");
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+}
+
+
+static DWORD
+ServiceInit(VOID)
{
HANDLE hThread;
@@ -39,7 +108,10 @@ VOID CALLBACK ServiceMain(DWORD argc, LPTSTR * argv)
NULL);
if (!hThread)
+ {
DPRINT("Can't create PortThread\n");
+ return GetLastError();
+ }
else
CloseHandle(hThread);
@@ -52,11 +124,56 @@ VOID CALLBACK ServiceMain(DWORD argc, LPTSTR * argv)
NULL);
if (!hThread)
+ {
DPRINT("Can't create RpcThread\n");
+ return GetLastError();
+ }
else
CloseHandle(hThread);
+
+ return ERROR_SUCCESS;
}
+
+static VOID CALLBACK
+ServiceMain(DWORD argc,
+ LPWSTR *argv)
+{
+ DWORD dwError;
+
+ UNREFERENCED_PARAMETER(argc);
+ UNREFERENCED_PARAMETER(argv);
+
+ DPRINT("ServiceMain() called\n");
+
+ ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName,
+ ServiceControlHandler,
+ NULL);
+ if (!ServiceStatusHandle)
+ {
+ dwError = GetLastError();
+ DPRINT1("RegisterServiceCtrlHandlerW() failed! (Error %lu)\n", dwError);
+ return;
+ }
+
+ UpdateServiceStatus(SERVICE_START_PENDING);
+
+ dwError = ServiceInit();
+ if (dwError != ERROR_SUCCESS)
+ {
+ DPRINT("Service stopped (dwError: %lu\n", dwError);
+ UpdateServiceStatus(SERVICE_START_PENDING);
+ }
+ else
+ {
+ DPRINT("Service started\n");
+ UpdateServiceStatus(SERVICE_RUNNING);
+ }
+
+ DPRINT("ServiceMain() done\n");
+}
+
+
BOOL LoadLogFile(HKEY hKey, WCHAR * LogName)
{
DWORD MaxValueLen, ValueLen, Type, ExpandedLen;
diff --git a/reactos/base/services/eventlog/eventlog.h b/reactos/base/services/eventlog/eventlog.h
index 4b9c6a8c341..df0ab151c41 100644
--- a/reactos/base/services/eventlog/eventlog.h
+++ b/reactos/base/services/eventlog/eventlog.h
@@ -44,7 +44,8 @@ typedef struct _IO_ERROR_LPC
#define ELF_LOGFILE_ARCHIVE_SET 8
/* FIXME: MSDN reads that the following two structs are in winnt.h. Are they? */
-typedef struct _EVENTLOGHEADER {
+typedef struct _EVENTLOGHEADER
+{
ULONG HeaderSize;
ULONG Signature;
ULONG MajorVersion;
@@ -59,7 +60,8 @@ typedef struct _EVENTLOGHEADER {
ULONG EndHeaderSize;
} EVENTLOGHEADER, *PEVENTLOGHEADER;
-typedef struct _EVENTLOGEOF {
+typedef struct _EVENTLOGEOF
+{
ULONG RecordSizeBeginning;
ULONG Ones;
ULONG Twos;
@@ -72,13 +74,13 @@ typedef struct _EVENTLOGEOF {
ULONG RecordSizeEnd;
} EVENTLOGEOF, *PEVENTLOGEOF;
-typedef struct
+typedef struct _EVENT_OFFSET_INFO
{
ULONG EventNumber;
ULONG EventOffset;
} EVENT_OFFSET_INFO, *PEVENT_OFFSET_INFO;
-typedef struct
+typedef struct _LOGFILE
{
HANDLE hFile;
EVENTLOGHEADER Header;
diff --git a/reactos/base/services/eventlog/rpc.c b/reactos/base/services/eventlog/rpc.c
index e3ef33d1611..d399d1e600f 100644
--- a/reactos/base/services/eventlog/rpc.c
+++ b/reactos/base/services/eventlog/rpc.c
@@ -480,45 +480,29 @@ NTSTATUS ElfrOpenELA(
DWORD MinorVersion,
IELF_HANDLE *LogHandle)
{
- UNICODE_STRING UNCServerNameW = { 0, 0, NULL };
- UNICODE_STRING ModuleNameW = { 0, 0, NULL };
- UNICODE_STRING RegModuleNameW = { 0, 0, NULL };
- NTSTATUS Status;
+ UNICODE_STRING ModuleNameW;
- if (UNCServerName &&
- !RtlCreateUnicodeStringFromAsciiz(&UNCServerNameW, UNCServerName))
- {
- return STATUS_NO_MEMORY;
- }
+ if ((MajorVersion != 1) || (MinorVersion != 1))
+ return STATUS_INVALID_PARAMETER;
- if (ModuleName &&
- !RtlAnsiStringToUnicodeString(&ModuleNameW, (PANSI_STRING)ModuleName, TRUE))
- {
- RtlFreeUnicodeString(&UNCServerNameW);
- return STATUS_NO_MEMORY;
- }
+ /* RegModuleName must be an empty string */
+ if (RegModuleName->Length > 0)
+ return STATUS_INVALID_PARAMETER;
- if (RegModuleName &&
- !RtlAnsiStringToUnicodeString(&RegModuleNameW, (PANSI_STRING)RegModuleName, TRUE))
- {
- RtlFreeUnicodeString(&UNCServerNameW);
- RtlFreeUnicodeString(&ModuleNameW);
- return STATUS_NO_MEMORY;
- }
+ RtlAnsiStringToUnicodeString(&ModuleNameW, (PANSI_STRING)ModuleName, TRUE);
- Status = ElfrOpenELW(
- UNCServerName ? UNCServerNameW.Buffer : NULL,
- ModuleName ? (PRPC_UNICODE_STRING)&ModuleNameW : NULL,
- RegModuleName ? (PRPC_UNICODE_STRING)&RegModuleNameW : NULL,
- MajorVersion,
- MinorVersion,
- LogHandle);
+ /* FIXME: Must verify that caller has read access */
+
+ *LogHandle = ElfCreateEventLogHandle(ModuleNameW.Buffer, FALSE);
- RtlFreeUnicodeString(&UNCServerNameW);
RtlFreeUnicodeString(&ModuleNameW);
- RtlFreeUnicodeString(&RegModuleNameW);
- return Status;
+ if (*LogHandle == NULL)
+ {
+ return STATUS_INVALID_PARAMETER;
+ }
+
+ return STATUS_SUCCESS;
}
@@ -531,45 +515,32 @@ NTSTATUS ElfrRegisterEventSourceA(
DWORD MinorVersion,
IELF_HANDLE *LogHandle)
{
- UNICODE_STRING UNCServerNameW = { 0, 0, NULL };
UNICODE_STRING ModuleNameW = { 0, 0, NULL };
- if (UNCServerName &&
- !RtlCreateUnicodeStringFromAsciiz(&UNCServerNameW, UNCServerName))
- {
- return STATUS_NO_MEMORY;
- }
-
if (ModuleName &&
!RtlAnsiStringToUnicodeString(&ModuleNameW, (PANSI_STRING)ModuleName, TRUE))
{
- RtlFreeUnicodeString(&UNCServerNameW);
return STATUS_NO_MEMORY;
}
/* RegModuleName must be an empty string */
if (RegModuleName->Length > 0)
{
- RtlFreeUnicodeString(&UNCServerNameW);
RtlFreeUnicodeString(&ModuleNameW);
return STATUS_INVALID_PARAMETER;
}
if ((MajorVersion != 1) || (MinorVersion != 1))
{
- RtlFreeUnicodeString(&UNCServerNameW);
RtlFreeUnicodeString(&ModuleNameW);
return STATUS_INVALID_PARAMETER;
}
- /*FIXME: UNCServerName must specify the server or empty for local */
-
- /*FIXME: Must verify that caller has write access */
+ /* FIXME: Must verify that caller has write access */
*LogHandle = ElfCreateEventLogHandle(ModuleNameW.Buffer,
TRUE);
- RtlFreeUnicodeString(&UNCServerNameW);
RtlFreeUnicodeString(&ModuleNameW);
return STATUS_SUCCESS;
@@ -661,8 +632,32 @@ NTSTATUS ElfrGetLogInformation(
DWORD cbBufSize,
DWORD *pcbBytesNeeded)
{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ /* FIXME: check handle first */
+
+ switch (InfoLevel)
+ {
+ case EVENTLOG_FULL_INFO:
+ {
+ LPEVENTLOG_FULL_INFORMATION efi = (LPEVENTLOG_FULL_INFORMATION)Buffer;
+
+ *pcbBytesNeeded = sizeof(EVENTLOG_FULL_INFORMATION);
+ if (cbBufSize < sizeof(EVENTLOG_FULL_INFORMATION))
+ {
+ return STATUS_BUFFER_TOO_SMALL;
+ }
+
+ efi->dwFull = 0; /* FIXME */
+ }
+ break;
+
+ default:
+ Status = STATUS_INVALID_LEVEL;
+ break;
+ }
+
+ return Status;
}
diff --git a/reactos/base/services/rpcss/rpcss.rbuild b/reactos/base/services/rpcss/rpcss.rbuild
index 5d89e489222..04e42f81de9 100644
--- a/reactos/base/services/rpcss/rpcss.rbuild
+++ b/reactos/base/services/rpcss/rpcss.rbuild
@@ -1,5 +1,6 @@
+
.
.
@@ -23,3 +24,4 @@
irot.idl
+
diff --git a/reactos/base/services/rpcss/rpcss_main.c b/reactos/base/services/rpcss/rpcss_main.c
index 2df13c7cea1..8e6ec1f3099 100644
--- a/reactos/base/services/rpcss/rpcss_main.c
+++ b/reactos/base/services/rpcss/rpcss_main.c
@@ -58,7 +58,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(ole);
-static HANDLE exit_event;
+HANDLE exit_event;
//extern HANDLE __wine_make_process_system(void);
diff --git a/reactos/base/services/rpcss/rpcss_ros.diff b/reactos/base/services/rpcss/rpcss_ros.diff
index 02d82263cf4..f23583afd7f 100644
--- a/reactos/base/services/rpcss/rpcss_ros.diff
+++ b/reactos/base/services/rpcss/rpcss_ros.diff
@@ -1,8 +1,13 @@
Index: rpcss_main.c
===================================================================
---- rpcss_main.c (revision 37240)
-+++ rpcss_main.c (working copy)
-@@ -62,7 +62,7 @@
+--- rpcss_main.c
++++ rpcss_main.c
+@@ -58,11 +58,11 @@
+
+ WINE_DEFAULT_DEBUG_CHANNEL(ole);
+
+-static HANDLE exit_event;
++HANDLE exit_event;
//extern HANDLE __wine_make_process_system(void);
diff --git a/reactos/base/services/rpcss/service_main.c b/reactos/base/services/rpcss/service_main.c
index 7fe84a57d26..501e2a43e3b 100644
--- a/reactos/base/services/rpcss/service_main.c
+++ b/reactos/base/services/rpcss/service_main.c
@@ -9,120 +9,90 @@
#include "rpcss.h"
-BOOL RPCSS_Initialize(void);
-BOOL RPCSS_Shutdown(void);
+#define NDEBUG
+#include
+extern BOOL RPCSS_Initialize(void);
+extern BOOL RPCSS_Shutdown(void);
+extern HANDLE exit_event;
+
+static VOID WINAPI ServiceMain(DWORD, LPWSTR *);
static WCHAR ServiceName[] = L"RpcSs";
-
-typedef struct _ServiceInfo
+SERVICE_TABLE_ENTRYW ServiceTable[] =
{
- SERVICE_STATUS servStatus;
- SERVICE_STATUS_HANDLE hStatus;
-} SERVICEINFO, *PSERVICEINFO;
+ { ServiceName, ServiceMain },
+ { NULL, NULL }
+};
+static SERVICE_STATUS ServiceStatus;
+static SERVICE_STATUS_HANDLE ServiceStatusHandle;
-static VOID
-UpdateStatus(PSERVICEINFO pServInfo,
- DWORD NewStatus,
- DWORD Check)
+DWORD WINAPI
+ServiceControlHandler(DWORD dwControl,
+ DWORD dwEventType,
+ LPVOID lpEventData,
+ LPVOID lpContext)
{
- if (Check > 0)
- {
- pServInfo->servStatus.dwCheckPoint += Check;
- }
- else
- {
- pServInfo->servStatus.dwCheckPoint = Check;
- }
-
- if (NewStatus > 0)
- {
- pServInfo->servStatus.dwCurrentState = NewStatus;
- }
-
- SetServiceStatus(pServInfo->hStatus, &pServInfo->servStatus);
-}
-
-
-static BOOL
-RunService(PSERVICEINFO pServInfo)
-{
- return RPCSS_Initialize();
-}
-
-VOID WINAPI
-ServerCtrlHandler(DWORD dwControl,
- DWORD dwEventType,
- LPVOID lpEventData,
- LPVOID lpContext)
-{
- PSERVICEINFO pServInfo = (PSERVICEINFO)lpContext;
-
switch (dwControl)
{
case SERVICE_CONTROL_SHUTDOWN:
case SERVICE_CONTROL_STOP:
- RPCSS_Shutdown();
- pServInfo->servStatus.dwWin32ExitCode = 0;
- pServInfo->servStatus.dwWaitHint = 0;
- UpdateStatus(pServInfo, SERVICE_STOP_PENDING, 1);
- break;
+ SetEvent(exit_event);
+ return NO_ERROR;
+
+ case SERVICE_CONTROL_INTERROGATE:
+ return NO_ERROR;
default:
- break;
+ return ERROR_CALL_NOT_IMPLEMENTED;
}
}
VOID WINAPI
ServiceMain(DWORD argc, LPWSTR argv[])
{
- SERVICEINFO servInfo;
- HANDLE hThread;
- DWORD dwThreadId;
+ DWORD dwError;
- servInfo.servStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
- servInfo.servStatus.dwCurrentState = SERVICE_STOPPED;
- servInfo.servStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN;
- servInfo.servStatus.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
- servInfo.servStatus.dwServiceSpecificExitCode = 0;
- servInfo.servStatus.dwCheckPoint = 0;
- servInfo.servStatus.dwWaitHint = 1000;
-
- servInfo.hStatus = RegisterServiceCtrlHandlerExW(ServiceName,
- (LPHANDLER_FUNCTION_EX)ServerCtrlHandler,
- &servInfo);
- if (!servInfo.hStatus) return;
-
- UpdateStatus(&servInfo, SERVICE_START_PENDING, 1);
-
- /* Create worker thread */
- hThread = CreateThread(NULL,
- 0,
- (LPTHREAD_START_ROUTINE)RunService,
- &servInfo,
- 0,
- &dwThreadId);
- if (!hThread) return;
-
- /* Set service status to running */
- UpdateStatus(&servInfo, SERVICE_RUNNING, 0);
-
- /* Wait until thread has terminated */
- WaitForSingleObject(hThread, INFINITE);
-
- CloseHandle(hThread);
-
- UpdateStatus(&servInfo, SERVICE_STOPPED, 0);
-}
-
-
-int wmain(int argc, LPWSTR argv [])
-{
- SERVICE_TABLE_ENTRYW ServiceTable[] =
+ ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName,
+ ServiceControlHandler,
+ NULL);
+ if (!ServiceStatusHandle)
{
- {ServiceName, ServiceMain},
- {NULL, NULL }
- };
+ dwError = GetLastError();
+ DPRINT1("RegisterServiceCtrlHandlerW() failed! (Error %lu)\n", dwError);
+ return;
+ }
- return (int)(StartServiceCtrlDispatcherW(ServiceTable) != TRUE);
+ ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+ ServiceStatus.dwCurrentState = SERVICE_START_PENDING;
+ ServiceStatus.dwControlsAccepted = 0;
+ ServiceStatus.dwWin32ExitCode = NO_ERROR;
+ ServiceStatus.dwServiceSpecificExitCode = 0;
+ ServiceStatus.dwCheckPoint = 0;
+ ServiceStatus.dwWaitHint = 1000;
+ SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
+
+ if (RPCSS_Initialize())
+ {
+ ServiceStatus.dwCurrentState = SERVICE_RUNNING;
+ ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
+ SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
+
+ WaitForSingleObject(exit_event, INFINITE);
+
+ ServiceStatus.dwCurrentState = SERVICE_STOPPED;
+ SetServiceStatus(ServiceStatusHandle, &ServiceStatus);
+ RPCSS_Shutdown();
+ }
+}
+
+int wmain(int argc, LPWSTR argv[])
+{
+ if (!StartServiceCtrlDispatcherW(ServiceTable))
+ {
+ DPRINT1("StartServiceCtrlDispatcherW() failed\n");
+ return 1;
+ }
+
+ return 0;
}
diff --git a/reactos/base/services/spoolsv/spoolsv.c b/reactos/base/services/spoolsv/spoolsv.c
index 98b890d9020..398e565e54a 100644
--- a/reactos/base/services/spoolsv/spoolsv.c
+++ b/reactos/base/services/spoolsv/spoolsv.c
@@ -18,7 +18,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(spoolsv);
/* GLOBALS ******************************************************************/
-#define SERVICE_NAME TEXT("Spooler")
+static VOID CALLBACK ServiceMain(DWORD argc, LPWSTR *argv);
+static WCHAR ServiceName[] = L"Spooler";
+static SERVICE_TABLE_ENTRYW ServiceTable[] =
+{
+ {ServiceName, ServiceMain},
+ {NULL, NULL}
+};
SERVICE_STATUS_HANDLE ServiceStatusHandle;
SERVICE_STATUS ServiceStatus;
@@ -100,14 +106,14 @@ ServiceControlHandler(DWORD dwControl,
static VOID CALLBACK
-ServiceMain(DWORD argc, LPTSTR *argv)
+ServiceMain(DWORD argc, LPWSTR *argv)
{
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
TRACE("ServiceMain() called\n");
- ServiceStatusHandle = RegisterServiceCtrlHandlerExW(SERVICE_NAME,
+ ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName,
ServiceControlHandler,
NULL);
@@ -123,12 +129,6 @@ ServiceMain(DWORD argc, LPTSTR *argv)
int
wmain(int argc, WCHAR *argv[])
{
- SERVICE_TABLE_ENTRY ServiceTable[2] =
- {
- {SERVICE_NAME, ServiceMain},
- {NULL, NULL}
- };
-
UNREFERENCED_PARAMETER(argc);
UNREFERENCED_PARAMETER(argv);
@@ -138,8 +138,6 @@ wmain(int argc, WCHAR *argv[])
TRACE("Spoolsv: main() done\n");
- ExitThread(0);
-
return 0;
}
diff --git a/reactos/base/services/svchost/svchost.h b/reactos/base/services/svchost/svchost.h
index 390b4d02b0b..539b5772e5f 100644
--- a/reactos/base/services/svchost/svchost.h
+++ b/reactos/base/services/svchost/svchost.h
@@ -5,8 +5,8 @@
* PURPOSE: Provide dll service loader
* PROGRAMMERS: Gregor Brunmar (gregor.brunmar@home.se)
*/
-#ifndef __SVCHOST_H__
-#define __SVCHOST_H__
+
+#pragma once
/* INCLUDES ******************************************************************/
@@ -32,7 +32,4 @@ typedef struct _SERVICE {
/* FUNCTIONS *****************************************************************/
-#endif /* __SVCHOST_H__ */
-
/* EOF */
-
diff --git a/reactos/base/services/telnetd/syslog.h b/reactos/base/services/telnetd/syslog.h
index 2dbf821961a..ca87a1cb80f 100644
--- a/reactos/base/services/telnetd/syslog.h
+++ b/reactos/base/services/telnetd/syslog.h
@@ -29,8 +29,7 @@
* @(#)syslog.h 8.1 (Berkeley) 6/2/93
*/
-#ifndef _SYS_SYSLOG_H
-#define _SYS_SYSLOG_H 1
+#pragma once
#include
@@ -193,5 +192,3 @@ extern const char* set_syslog_conf_dir( const char* dir );
#ifdef __cplusplus
}
#endif
-
-#endif /* syslog.h */
diff --git a/reactos/base/services/telnetd/telnetd.h b/reactos/base/services/telnetd/telnetd.h
index afb1199ce05..fe5bd138610 100644
--- a/reactos/base/services/telnetd/telnetd.h
+++ b/reactos/base/services/telnetd/telnetd.h
@@ -1,5 +1,4 @@
-#ifndef __TELNETD_H
-#define __TELNETD_H
+#pragma once
#define _CRT_SECURE_NO_WARNINGS
@@ -82,6 +81,3 @@ static DWORD WINAPI ReadFromPipeThread(LPVOID);
static void TerminateShell(client_t *client);
static VOID ErrorExit(LPTSTR);
int kickoff_telnetd(void);
-
-#endif /* __TELNETD_H */
-
diff --git a/reactos/base/services/umpnpmgr/umpnpmgr.c b/reactos/base/services/umpnpmgr/umpnpmgr.c
index 8dc8a16e031..2352efe703f 100644
--- a/reactos/base/services/umpnpmgr/umpnpmgr.c
+++ b/reactos/base/services/umpnpmgr/umpnpmgr.c
@@ -51,15 +51,17 @@
/* GLOBALS ******************************************************************/
-static VOID CALLBACK
-ServiceMain(DWORD argc, LPTSTR *argv);
-
-static SERVICE_TABLE_ENTRY ServiceTable[2] =
+static VOID CALLBACK ServiceMain(DWORD argc, LPWSTR *argv);
+static WCHAR ServiceName[] = L"PlugPlay";
+static SERVICE_TABLE_ENTRYW ServiceTable[] =
{
- {TEXT("PlugPlay"), ServiceMain},
+ {ServiceName, ServiceMain},
{NULL, NULL}
};
+static SERVICE_STATUS_HANDLE ServiceStatusHandle;
+static SERVICE_STATUS ServiceStatus;
+
static WCHAR szRootDeviceId[] = L"HTREE\\ROOT\\0";
static HKEY hEnumKey = NULL;
@@ -2446,6 +2448,72 @@ PnpEventThread(LPVOID lpParameter)
}
+static VOID
+UpdateServiceStatus(DWORD dwState)
+{
+ ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+ ServiceStatus.dwCurrentState = dwState;
+ ServiceStatus.dwControlsAccepted = 0;
+ ServiceStatus.dwWin32ExitCode = 0;
+ ServiceStatus.dwServiceSpecificExitCode = 0;
+ ServiceStatus.dwCheckPoint = 0;
+
+ if (dwState == SERVICE_START_PENDING ||
+ dwState == SERVICE_STOP_PENDING ||
+ dwState == SERVICE_PAUSE_PENDING ||
+ dwState == SERVICE_CONTINUE_PENDING)
+ ServiceStatus.dwWaitHint = 10000;
+ else
+ ServiceStatus.dwWaitHint = 0;
+
+ SetServiceStatus(ServiceStatusHandle,
+ &ServiceStatus);
+}
+
+
+static DWORD WINAPI
+ServiceControlHandler(DWORD dwControl,
+ DWORD dwEventType,
+ LPVOID lpEventData,
+ LPVOID lpContext)
+{
+ DPRINT1("ServiceControlHandler() called\n");
+
+ switch (dwControl)
+ {
+ case SERVICE_CONTROL_STOP:
+ DPRINT1(" SERVICE_CONTROL_STOP received\n");
+ UpdateServiceStatus(SERVICE_STOPPED);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_PAUSE:
+ DPRINT1(" SERVICE_CONTROL_PAUSE received\n");
+ UpdateServiceStatus(SERVICE_PAUSED);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_CONTINUE:
+ DPRINT1(" SERVICE_CONTROL_CONTINUE received\n");
+ UpdateServiceStatus(SERVICE_RUNNING);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_INTERROGATE:
+ DPRINT1(" SERVICE_CONTROL_INTERROGATE received\n");
+ SetServiceStatus(ServiceStatusHandle,
+ &ServiceStatus);
+ return ERROR_SUCCESS;
+
+ case SERVICE_CONTROL_SHUTDOWN:
+ DPRINT1(" SERVICE_CONTROL_SHUTDOWN received\n");
+ UpdateServiceStatus(SERVICE_STOPPED);
+ return ERROR_SUCCESS;
+
+ default :
+ DPRINT1(" Control %lu received\n");
+ return ERROR_CALL_NOT_IMPLEMENTED;
+ }
+}
+
+
static VOID CALLBACK
ServiceMain(DWORD argc, LPTSTR *argv)
{
@@ -2457,6 +2525,17 @@ ServiceMain(DWORD argc, LPTSTR *argv)
DPRINT("ServiceMain() called\n");
+ ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName,
+ ServiceControlHandler,
+ NULL);
+ if (!ServiceStatusHandle)
+ {
+ DPRINT1("RegisterServiceCtrlHandlerExW() failed! (Error %lu)\n", GetLastError());
+ return;
+ }
+
+ UpdateServiceStatus(SERVICE_START_PENDING);
+
hThread = CreateThread(NULL,
0,
PnpEventThread,
@@ -2484,6 +2563,8 @@ ServiceMain(DWORD argc, LPTSTR *argv)
if (hThread != NULL)
CloseHandle(hThread);
+ UpdateServiceStatus(SERVICE_RUNNING);
+
DPRINT("ServiceMain() done\n");
}
diff --git a/reactos/base/services/wlansvc/rpcserver.c b/reactos/base/services/wlansvc/rpcserver.c
index b6475257b5e..bb010368669 100644
--- a/reactos/base/services/wlansvc/rpcserver.c
+++ b/reactos/base/services/wlansvc/rpcserver.c
@@ -14,7 +14,7 @@
#define NDEBUG
#include
-
+//#define GET_IF_ENTRY2_IMPLEMENTED 1
DWORD _RpcOpenHandle(
wchar_t *arg_1,
diff --git a/reactos/base/services/wlansvc/wlansvc.c b/reactos/base/services/wlansvc/wlansvc.c
index 86302f68a9e..5f0e1e6d95e 100644
--- a/reactos/base/services/wlansvc/wlansvc.c
+++ b/reactos/base/services/wlansvc/wlansvc.c
@@ -21,6 +21,7 @@
SERVICE_STATUS_HANDLE ServiceStatusHandle;
SERVICE_STATUS SvcStatus;
+static WCHAR ServiceName[] = L"WlanSvc";
/* FUNCTIONS *****************************************************************/
static DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter)
@@ -94,13 +95,14 @@ ServiceMain(DWORD argc, LPWSTR *argv)
DPRINT("ServiceMain() called\n");
SvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
+ SvcStatus.dwCurrentState = SERVICE_START_PENDING;
SvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
SvcStatus.dwCheckPoint = 0;
- SvcStatus.dwWin32ExitCode = 0;
+ SvcStatus.dwWin32ExitCode = NO_ERROR;
SvcStatus.dwServiceSpecificExitCode = 0;
SvcStatus.dwWaitHint = 4000;
- ServiceStatusHandle = RegisterServiceCtrlHandlerExW(SERVICE_NAME,
+ ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName,
ServiceControlHandler,
NULL);
@@ -115,15 +117,15 @@ ServiceMain(DWORD argc, LPWSTR *argv)
NULL);
if (!hThread)
+ {
DPRINT("Can't create RpcThread\n");
+ UpdateServiceStatus(ServiceStatusHandle, SERVICE_STOPPED, 0);
+ }
else
{
- WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
}
- UpdateServiceStatus(ServiceStatusHandle, SERVICE_STOPPED, 0);
-
DPRINT("ServiceMain() done\n");
}
@@ -132,7 +134,7 @@ wmain(int argc, WCHAR *argv[])
{
SERVICE_TABLE_ENTRYW ServiceTable[2] =
{
- {SERVICE_NAME, ServiceMain},
+ {ServiceName, ServiceMain},
{NULL, NULL}
};
diff --git a/reactos/base/services/wlansvc/wlansvc.rbuild b/reactos/base/services/wlansvc/wlansvc.rbuild
index da8bf8259ff..4f656380d58 100644
--- a/reactos/base/services/wlansvc/wlansvc.rbuild
+++ b/reactos/base/services/wlansvc/wlansvc.rbuild
@@ -8,6 +8,7 @@
advapi32
rpcrt4
pseh
+ iphlpapi
wlansvc.c
rpcserver.c
diff --git a/reactos/base/setup/reactos/lang/de-DE.rc b/reactos/base/setup/reactos/lang/de-DE.rc
index c37399228b7..4c44f64b83c 100644
--- a/reactos/base/setup/reactos/lang/de-DE.rc
+++ b/reactos/base/setup/reactos/lang/de-DE.rc
@@ -4,17 +4,17 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
IDD_STARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Setup"
+CAPTION "ReactOS-Setup"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Willkommen beim ReactOS Setup Assistenten.", IDC_STARTTITLE, 115, 8, 195, 24
+ LTEXT "Willkommen beim ReactOS-Setup-Assistenten.", IDC_STARTTITLE, 115, 8, 195, 24
LTEXT "ReactOS kann noch nicht direkt von dieser CD installiert werden! Bitte starten Sie Ihren Computer mit dieser CD um ReactOS zu installieren.", IDC_STATIC, 115, 40, 195, 100
LTEXT "Klicken Sie auf Beenden um das Setup zu verlassen.", IDC_STATIC, 115, 169, 195, 17
END
IDD_LANGSELPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Setup"
+CAPTION "ReactOS-Setup"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "IDB_LOGO", IDB_ROSLOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 0, 290, 99
@@ -27,7 +27,7 @@ END
IDD_TYPEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Setup"
+CAPTION "ReactOS-Setup"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Setuptyp", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172
@@ -38,7 +38,7 @@ END
IDD_DEVICEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Setup"
+CAPTION "ReactOS-Setup"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Gerteeinstellungen", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172
@@ -53,7 +53,7 @@ END
IDD_DRIVEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Setup"
+CAPTION "ReactOS-Setup"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Partition fr die ReactOS-Installation", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176
@@ -99,7 +99,7 @@ END
IDD_SUMMARYPAGE DIALOGEX 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Setup"
+CAPTION "ReactOS-Setup"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Installationszusammenfassung", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172
@@ -108,7 +108,7 @@ END
IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Setup"
+CAPTION "ReactOS-Setup"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "Installationsaktion", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172
@@ -121,13 +121,13 @@ END
IDD_RESTARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Vervollstndige ReactOS Setup"
+CAPTION "Vervollstndige ReactOS-Setup"
FONT 8, "MS Shell Dlg"
BEGIN
- CONTROL "Abschlieen der ersten Stufe des ReactOS Setup", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172
- LTEXT "Sie haben die erste Stufe des ReactOS Setup erfolgreich abgeschlossen.", IDC_STATIC, 20, 50, 277, 10
+ CONTROL "Abschlieen der ersten Stufe der ReactOS-Installation", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172
+ LTEXT "Sie haben die erste Stufe des ReactOS-Setup erfolgreich abgeschlossen.", IDC_STATIC, 20, 50, 277, 10
- LTEXT "Wenn Sie auf Beenden klicken wird der Computer neugestartet.", IDC_STATIC, 20, 80, 277, 10
+ LTEXT "Wenn Sie auf Beenden klicken, wird der Computer neu gestartet.", IDC_STATIC, 20, 80, 277, 10
CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8
LTEXT "Wenn eine CD im Laufwerk ist, entfernen Sie sie. Klicken Sie zum Neustart auf Beenden.", IDC_STATIC, 10, 180, 297, 20
END
@@ -137,7 +137,7 @@ STRINGTABLE
BEGIN
IDS_LANGTITLE "Sprachauswahl"
IDS_LANGSUBTITLE "Whlen Sie eine Sprache fr das Setup und das Endsystem aus."
- IDS_TYPETITLE "Willkommen zum ReactOS Setup"
+ IDS_TYPETITLE "Willkommen zum ReactOS-Setup"
IDS_TYPESUBTITLE "Whlen Sie einen Setuptyp."
IDS_DEVICETITLE "Einstellen der Basisgerte"
IDS_DEVICESUBTITLE "Einstellungen der Anzeigegerte und der Tastatur."
@@ -149,7 +149,7 @@ BEGIN
IDS_RESTARTSUBTITLE "Die erste Stufe des Setup wurde abgeschlossen, starten Sie den Rechner neu, um mit der zweiten Stufe fortzufahren."
IDS_SUMMARYTITLE "Installationszusammenfassung"
IDS_SUMMARYSUBTITLE "Liste alle Installationseinstellungen vor Anwendung auf die Gerte auf"
- IDS_ABORTSETUP "ReactOS ist nicht vollstndig auf Ihrem Computer installiert. Wenn Sie das Setup verlassen, dann mssen Sie das Setup nochmal ausfhren, um ReactOS zu installieren. Wirklich beenden?"
+ IDS_ABORTSETUP "ReactOS ist nicht vollstndig auf Ihrem Computer installiert. Wenn Sie das Setup verlassen, dann mssen Sie das Setup nochmals ausfhren, um ReactOS zu installieren. Wirklich beenden?"
IDS_ABORTSETUP2 "Installation abbrechen?"
END
/* EOF */
diff --git a/reactos/base/setup/reactos/lang/pl-PL.rc b/reactos/base/setup/reactos/lang/pl-PL.rc
index 97cff875b7d..31c951397cf 100644
--- a/reactos/base/setup/reactos/lang/pl-PL.rc
+++ b/reactos/base/setup/reactos/lang/pl-PL.rc
@@ -66,25 +66,25 @@ BEGIN
LISTBOX IDC_PARTITION, 20,12,278,142,LBS_HASSTRINGS | WS_VSCROLL
PUSHBUTTON "&Stwrz", IDC_PARTCREATE, 20,155,50,15
PUSHBUTTON "&Usu", IDC_PARTDELETE, 76,155,50,15
- PUSHBUTTON "D&river", IDC_DEVICEDRIVER, 162,155,50,15, WS_DISABLED
+ PUSHBUTTON "s&terownik", IDC_DEVICEDRIVER, 162,155,50,15, WS_DISABLED
PUSHBUTTON "&Opcje zaawansowane...", IDC_PARTMOREOPTS, 218,155,80,15
LTEXT "Nacinij Dalej aby rozpocz proces instalacji.", IDC_STATIC, 10, 180 ,277, 20
END
IDD_PARTITION DIALOGEX DISCARDABLE 0, 0, 145, 90
STYLE WS_VISIBLE|WS_CAPTION|WS_THICKFRAME
-CAPTION "Create Partition"
+CAPTION "Stwrz partycj"
FONT 8, "MS Shell Dlg"
BEGIN
CONTROL "",IDC_UPDOWN1,"msctls_updown32", WS_VISIBLE,104,22,9,13
- CONTROL "Create and format partition",IDC_STATIC,"Button",BS_GROUPBOX,7,5,129,57
- LTEXT "Size:",IDC_STATIC, 13,24,27,9
+ CONTROL "Stwrz i sformatuj partycj",IDC_STATIC,"Button",BS_GROUPBOX,7,5,129,57
+ LTEXT "Rozmiar:",IDC_STATIC, 13,24,27,9
EDITTEXT IDC_PARTSIZE,52,23,53,13, WS_VISIBLE|WS_TABSTOP
LTEXT "GB",IDC_UNIT, 117,24,14,9
- LTEXT "Filesystem:",IDC_STATIC,13,46,35,9
+ LTEXT "System plikw:",IDC_STATIC,13,46,35,9
CONTROL "",IDC_FSTYPE,"ComboBox",WS_VISIBLE|WS_TABSTOP|CBS_DROPDOWNLIST,52,42,79,50
PUSHBUTTON "&OK",IDOK,35,68,47,15, WS_VISIBLE|WS_TABSTOP
- PUSHBUTTON "&Cancel",IDCANCEL,87,68,47,15, WS_VISIBLE|WS_TABSTOP
+ PUSHBUTTON "&Anuluj",IDCANCEL,87,68,47,15, WS_VISIBLE|WS_TABSTOP
END
IDD_BOOTOPTIONS DIALOGEX DISCARDABLE 0, 0, 305, 105
@@ -105,11 +105,11 @@ END
IDD_SUMMARYPAGE DIALOGEX 0, 0, 317, 193
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "ReactOS Setup"
+CAPTION "Instalator ReactOS"
FONT 8, "MS Shell Dlg"
BEGIN
- CONTROL "Installation summary", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172
- LTEXT "Click Next to start the installation process.", IDC_STATIC, 10, 180 ,277, 20
+ CONTROL "Podsumowanie instalacji", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172
+ LTEXT "Kliknij Dalej aby rozpocz proces instalacji.", IDC_STATIC, 10, 180 ,277, 20
END
IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193
@@ -151,8 +151,8 @@ BEGIN
IDS_PROCESSSUBTITLE "Przygotuj i sformatuj partycj, skopiuj pliki, skopiuj i zainstaluj bootloader"
IDS_RESTARTTITLE "Pierwszy etap instalacji zakoczony sukcesem"
IDS_RESTARTSUBTITLE "Pierwszy etap instalacji zosta zakoczony, uruchom ponownie komputer aby przej do drugiego etapu"
- IDS_SUMMARYTITLE "Installation Summary"
- IDS_SUMMARYSUBTITLE "List installation properties to check before apply to the installation device"
+ IDS_SUMMARYTITLE "Podsumowanie instalacji"
+ IDS_SUMMARYSUBTITLE "Sprawd ustawienia instalacji przed dokonaniem zmian na dysku"
IDS_ABORTSETUP "Instalacja ReactOS nie zostaa ukoczona na tym komputerze. Jeli teraz zakoczysz instalacj, bdziesz musia uruchomi Instalator ponownie, aby zainstalowa Reactos. Na pewno zakoczy?"
IDS_ABORTSETUP2 "Przerwa instalacj?"
END
diff --git a/reactos/base/setup/reactos/resource.h b/reactos/base/setup/reactos/resource.h
index f8259b7ce93..f4d6b2210bf 100644
--- a/reactos/base/setup/reactos/resource.h
+++ b/reactos/base/setup/reactos/resource.h
@@ -1,5 +1,4 @@
-#ifndef RESOURCE_H
-#define RESOURCE_H
+#pragma once
#define IDB_WATERMARK 100
#define IDB_HEADER 101
@@ -61,5 +60,3 @@
#define IDC_DEVICEDRIVER 2051
#define IDI_MAIN 3000
-
-#endif
diff --git a/reactos/base/setup/usetup/bootsup.h b/reactos/base/setup/usetup/bootsup.h
index 1303b5be695..a0b012ed32b 100644
--- a/reactos/base/setup/usetup/bootsup.h
+++ b/reactos/base/setup/usetup/bootsup.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __BOOTSUP_H__
-#define __BOOTSUP_H__
+#pragma once
NTSTATUS
CreateFreeLoaderIniForDos(PWCHAR IniPath,
@@ -83,6 +82,4 @@ NTSTATUS
InstallFatBootcodeToFloppy(PUNICODE_STRING SourceRootPath,
PUNICODE_STRING DestinationArcPath);
-#endif /* __BOOTSUP_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/cabinet.c b/reactos/base/setup/usetup/cabinet.c
index c44521a541a..0f7b0ef7a64 100644
--- a/reactos/base/setup/usetup/cabinet.c
+++ b/reactos/base/setup/usetup/cabinet.c
@@ -20,19 +20,19 @@
#define SEEK_END 2
#endif
-typedef struct __DOSTIME
+typedef struct _DOSTIME
{
- WORD Second:5;
- WORD Minute:6;
- WORD Hour:5;
+ WORD Second:5;
+ WORD Minute:6;
+ WORD Hour:5;
} DOSTIME, *PDOSTIME;
-typedef struct __DOSDATE
+typedef struct _DOSDATE
{
- WORD Day:5;
- WORD Month:4;
- WORD Year:5;
+ WORD Day:5;
+ WORD Month:4;
+ WORD Year:5;
} DOSDATE, *PDOSDATE;
static WCHAR CabinetName[256]; // Filename of current cabinet
@@ -57,7 +57,7 @@ static ULONG DataReserved = 0;
static ULONG CodecId;
static PCABINET_CODEC_UNCOMPRESS CodecUncompress = NULL;
static BOOL CodecSelected = FALSE;
-static ULONG LastFileOffset = 0; // Uncompressed offset of last extracted file
+static ULONG LastFileOffset = 0; // Uncompressed offset of last extracted file
static PCABINET_OVERWRITE OverwriteHandler = NULL;
static PCABINET_EXTRACT ExtractHandler = NULL;
static PCABINET_DISK_CHANGE DiskChangeHandler = NULL;
@@ -66,38 +66,26 @@ static PVOID CabinetReservedArea = NULL;
/* Needed by zlib, but we don't want the dependency on msvcrt.dll */
-
-/* round to 16 bytes + alloc at minimum 16 bytes */
-#define ROUND_SIZE(size) (max(16, ROUND_UP(size, 16)))
-
-void* __cdecl malloc(size_t _size)
+void *__cdecl
+malloc(size_t size)
{
- size_t nSize = ROUND_SIZE(_size);
-
- if (nSize<_size)
- return NULL;
-
- return RtlAllocateHeap(ProcessHeap, HEAP_ZERO_MEMORY, nSize);
+ return RtlAllocateHeap(ProcessHeap, HEAP_ZERO_MEMORY, size);
}
-
-void __cdecl free(void* _ptr)
+void __cdecl
+free(void *ptr)
{
- RtlFreeHeap(ProcessHeap, 0, _ptr);
+ RtlFreeHeap(ProcessHeap, 0, ptr);
}
-void* __cdecl calloc(size_t _nmemb, size_t _size)
+void *__cdecl
+calloc(size_t nmemb, size_t size)
{
- return (void*)RtlAllocateHeap (ProcessHeap, HEAP_ZERO_MEMORY, _size);
+ return (void *)RtlAllocateHeap(ProcessHeap, HEAP_ZERO_MEMORY, nmemb * size);
}
/* RAW codec */
-ULONG
-RawCodecUncompress(PVOID OutputBuffer,
- PVOID InputBuffer,
- PLONG InputLength,
- PLONG OutputLength)
/*
* FUNCTION: Uncompresses data in a buffer
* ARGUMENTS:
@@ -108,21 +96,22 @@ RawCodecUncompress(PVOID OutputBuffer,
* OutputLength = Length of output buffer before, amount filled after
* Negative to indicate that this is not the end of the block
*/
+ULONG
+RawCodecUncompress(PVOID OutputBuffer,
+ PVOID InputBuffer,
+ PLONG InputLength,
+ PLONG OutputLength)
{
- LONG In = abs(*InputLength), Out = abs(*OutputLength);
- memcpy(OutputBuffer, InputBuffer, In < Out ? In : Out);
- *InputLength = *OutputLength = In < Out ? In : Out;
- return CS_SUCCESS;
-}
+ LONG Len = min(abs(*InputLength), abs(*OutputLength));
+ memcpy(OutputBuffer, InputBuffer, Len);
+ *InputLength = *OutputLength = Len;
+
+ return CS_SUCCESS;
+}
/* MSZIP codec */
-ULONG
-MSZipCodecUncompress(PVOID OutputBuffer,
- PVOID InputBuffer,
- PLONG InputLength,
- PLONG OutputLength)
/*
* FUNCTION: Uncompresses data in a buffer
* ARGUMENTS:
@@ -133,140 +122,146 @@ MSZipCodecUncompress(PVOID OutputBuffer,
* OutputLength = Length of output buffer before, amount filled after
* Negative to indicate that this is not the end of the block
*/
+ULONG
+MSZipCodecUncompress(PVOID OutputBuffer,
+ PVOID InputBuffer,
+ PLONG InputLength,
+ PLONG OutputLength)
{
- USHORT Magic;
- INT Status;
+ USHORT Magic;
+ INT Status;
- DPRINT("MSZipCodecUncompress( OutputBuffer = %x, InputBuffer = %x, InputLength = %d, OutputLength = %d.\n", OutputBuffer, InputBuffer, *InputLength, *OutputLength);
- if( *InputLength > 0 )
- {
- Magic = *((PUSHORT)InputBuffer);
+ DPRINT("MSZipCodecUncompress(OutputBuffer = %x, InputBuffer = %x, "
+ "InputLength = %d, OutputLength = %d)\n", OutputBuffer,
+ InputBuffer, *InputLength, *OutputLength);
+ if (*InputLength > 0)
+ {
+ Magic = *(PUSHORT)InputBuffer;
- if (Magic != MSZIP_MAGIC)
- {
- DPRINT("Bad MSZIP block header magic (0x%X)\n", Magic);
- return CS_BADSTREAM;
- }
+ if (Magic != MSZIP_MAGIC)
+ {
+ DPRINT("Bad MSZIP block header magic (0x%X)\n", Magic);
+ return CS_BADSTREAM;
+ }
- ZStream.next_in = ((PUCHAR)InputBuffer )+ 2;
- ZStream.avail_in = *InputLength - 2;
- ZStream.next_out = (PUCHAR)OutputBuffer;
- ZStream.avail_out = abs(*OutputLength);
+ ZStream.next_in = (PUCHAR)InputBuffer + 2;
+ ZStream.avail_in = *InputLength - 2;
+ ZStream.next_out = (PUCHAR)OutputBuffer;
+ ZStream.avail_out = abs(*OutputLength);
- /* WindowBits is passed < 0 to tell that there is no zlib header.
- * Note that in this case inflate *requires* an extra "dummy" byte
- * after the compressed stream in order to complete decompression and
- * return Z_STREAM_END.
- */
- Status = inflateInit2(&ZStream, -MAX_WBITS);
- if (Status != Z_OK)
- {
- DPRINT("inflateInit2() returned (%d).\n", Status);
- return CS_BADSTREAM;
- }
- ZStream.total_in = 2;
- }
- else {
- ZStream.avail_in = -*InputLength;
- ZStream.next_in = (PUCHAR)InputBuffer;
- ZStream.next_out = (PUCHAR)OutputBuffer;
- ZStream.avail_out = abs(*OutputLength);
- ZStream.total_in = 0;
- }
- ZStream.total_out = 0;
- Status = inflate(&ZStream, Z_SYNC_FLUSH );
- if (Status != Z_OK && Status != Z_STREAM_END)
- {
- DPRINT("inflate() returned (%d) (%s).\n", Status, ZStream.msg);
- if (Status == Z_MEM_ERROR)
- return CS_NOMEMORY;
- return CS_BADSTREAM;
- }
+ /* WindowBits is passed < 0 to tell that there is no zlib header.
+ * Note that in this case inflate *requires* an extra "dummy" byte
+ * after the compressed stream in order to complete decompression and
+ * return Z_STREAM_END.
+ */
+ Status = inflateInit2(&ZStream, -MAX_WBITS);
+ if (Status != Z_OK)
+ {
+ DPRINT("inflateInit2() returned (%d)\n", Status);
+ return CS_BADSTREAM;
+ }
+ ZStream.total_in = 2;
+ }
+ else
+ {
+ ZStream.avail_in = -*InputLength;
+ ZStream.next_in = (PUCHAR)InputBuffer;
+ ZStream.next_out = (PUCHAR)OutputBuffer;
+ ZStream.avail_out = abs(*OutputLength);
+ ZStream.total_in = 0;
+ }
- if( *OutputLength > 0 )
- {
- Status = inflateEnd(&ZStream);
- if (Status != Z_OK)
- {
- DPRINT("inflateEnd() returned (%d).\n", Status);
- return CS_BADSTREAM;
- }
- }
- *OutputLength = ZStream.total_out;
- *InputLength = ZStream.total_in;
- return CS_SUCCESS;
+ ZStream.total_out = 0;
+ Status = inflate(&ZStream, Z_SYNC_FLUSH);
+ if (Status != Z_OK && Status != Z_STREAM_END)
+ {
+ DPRINT("inflate() returned (%d) (%s)\n", Status, ZStream.msg);
+ if (Status == Z_MEM_ERROR)
+ return CS_NOMEMORY;
+ return CS_BADSTREAM;
+ }
+
+ if (*OutputLength > 0)
+ {
+ Status = inflateEnd(&ZStream);
+ if (Status != Z_OK)
+ {
+ DPRINT("inflateEnd() returned (%d)\n", Status);
+ return CS_BADSTREAM;
+ }
+ }
+
+ *OutputLength = ZStream.total_out;
+ *InputLength = ZStream.total_in;
+
+ return CS_SUCCESS;
}
-
-
/* Memory functions */
-voidpf MSZipAlloc(voidpf opaque, uInt items, uInt size)
+voidpf
+MSZipAlloc(voidpf opaque, uInt items, uInt size)
{
- return (voidpf)RtlAllocateHeap (ProcessHeap, 0, items * size);
+ return (voidpf)RtlAllocateHeap(ProcessHeap, 0, items * size);
}
-void MSZipFree (voidpf opaque, voidpf address)
+void
+MSZipFree(voidpf opaque, voidpf address)
{
- RtlFreeHeap(ProcessHeap, 0, address);
+ RtlFreeHeap(ProcessHeap, 0, address);
}
static BOOL
-ConvertSystemTimeToFileTime(
- CONST SYSTEMTIME * lpSystemTime,
- LPFILETIME lpFileTime)
+ConvertSystemTimeToFileTime(CONST SYSTEMTIME *lpSystemTime,
+ LPFILETIME lpFileTime)
{
- TIME_FIELDS TimeFields;
- LARGE_INTEGER liTime;
+ TIME_FIELDS TimeFields;
+ LARGE_INTEGER liTime;
- TimeFields.Year = lpSystemTime->wYear;
- TimeFields.Month = lpSystemTime->wMonth;
- TimeFields.Day = lpSystemTime->wDay;
- TimeFields.Hour = lpSystemTime->wHour;
- TimeFields.Minute = lpSystemTime->wMinute;
- TimeFields.Second = lpSystemTime->wSecond;
- TimeFields.Milliseconds = lpSystemTime->wMilliseconds;
+ TimeFields.Year = lpSystemTime->wYear;
+ TimeFields.Month = lpSystemTime->wMonth;
+ TimeFields.Day = lpSystemTime->wDay;
+ TimeFields.Hour = lpSystemTime->wHour;
+ TimeFields.Minute = lpSystemTime->wMinute;
+ TimeFields.Second = lpSystemTime->wSecond;
+ TimeFields.Milliseconds = lpSystemTime->wMilliseconds;
- if (RtlTimeFieldsToTime(&TimeFields, &liTime))
+ if (RtlTimeFieldsToTime(&TimeFields, &liTime))
{
- lpFileTime->dwLowDateTime = liTime.u.LowPart;
- lpFileTime->dwHighDateTime = liTime.u.HighPart;
- return TRUE;
+ lpFileTime->dwLowDateTime = liTime.u.LowPart;
+ lpFileTime->dwHighDateTime = liTime.u.HighPart;
+ return TRUE;
}
- return FALSE;
-}
+ return FALSE;
+}
static BOOL
-ConvertDosDateTimeToFileTime(
- WORD wFatDate,
- WORD wFatTime,
- LPFILETIME lpFileTime)
+ConvertDosDateTimeToFileTime(WORD wFatDate,
+ WORD wFatTime,
+ LPFILETIME lpFileTime)
{
- PDOSTIME pdtime = (PDOSTIME) &wFatTime;
- PDOSDATE pddate = (PDOSDATE) &wFatDate;
- SYSTEMTIME SystemTime;
+ PDOSTIME pdtime = (PDOSTIME)&wFatTime;
+ PDOSDATE pddate = (PDOSDATE)&wFatDate;
+ SYSTEMTIME SystemTime;
- if (lpFileTime == NULL)
- return FALSE;
+ if (lpFileTime == NULL)
+ return FALSE;
- SystemTime.wMilliseconds = 0;
- SystemTime.wSecond = pdtime->Second;
- SystemTime.wMinute = pdtime->Minute;
- SystemTime.wHour = pdtime->Hour;
+ SystemTime.wMilliseconds = 0;
+ SystemTime.wSecond = pdtime->Second;
+ SystemTime.wMinute = pdtime->Minute;
+ SystemTime.wHour = pdtime->Hour;
- SystemTime.wDay = pddate->Day;
- SystemTime.wMonth = pddate->Month;
- SystemTime.wYear = 1980 + pddate->Year;
+ SystemTime.wDay = pddate->Day;
+ SystemTime.wMonth = pddate->Month;
+ SystemTime.wYear = 1980 + pddate->Year;
- ConvertSystemTimeToFileTime(&SystemTime,lpFileTime);
+ ConvertSystemTimeToFileTime(&SystemTime, lpFileTime);
- return TRUE;
+ return TRUE;
}
-
-static PWCHAR
-GetFileName(PWCHAR Path)
/*
* FUNCTION: Returns a pointer to file name
* ARGUMENTS:
@@ -274,43 +269,45 @@ GetFileName(PWCHAR Path)
* RETURNS:
* Pointer to filename
*/
+static PWCHAR
+GetFileName(PWCHAR Path)
{
- ULONG i, j;
+ ULONG i, j;
- j = i = 0;
+ j = i = 0;
- while (Path [i++])
+ while (Path[i++])
{
- if (Path[i - 1] == L'\\') j = i;
+ if (Path[i - 1] == L'\\')
+ j = i;
}
- return Path + j;
+
+ return Path + j;
}
-
-static VOID
-RemoveFileName(PWCHAR Path)
/*
* FUNCTION: Removes a file name from a path
* ARGUMENTS:
* Path = Pointer to string with path
*/
+static VOID
+RemoveFileName(PWCHAR Path)
{
- PWCHAR FileName;
- DWORD i;
+ PWCHAR FileName;
+ DWORD i;
- i = 0;
- FileName = GetFileName(Path + i);
+ i = 0;
+ FileName = GetFileName(Path + i);
- if ((FileName != (Path + i)) && (FileName [-1] == L'\\'))
- FileName--;
- if ((FileName == (Path + i)) && (FileName [0] == L'\\'))
- FileName++;
- FileName[0] = 0;
+ if (FileName != Path + i && FileName[-1] == L'\\')
+ FileName--;
+
+ if (FileName == Path + i && FileName[0] == L'\\')
+ FileName++;
+
+ FileName[0] = 0;
}
-
-static BOOL
-SetAttributesOnFile(PCFFILE File, HANDLE hFile)
/*
* FUNCTION: Sets attributes on a file
* ARGUMENTS:
@@ -318,113 +315,110 @@ SetAttributesOnFile(PCFFILE File, HANDLE hFile)
* RETURNS:
* Status of operation
*/
+static BOOL
+SetAttributesOnFile(PCFFILE File,
+ HANDLE hFile)
{
- FILE_BASIC_INFORMATION FileBasic;
- IO_STATUS_BLOCK IoStatusBlock;
- NTSTATUS NtStatus;
- ULONG Attributes = 0;
+ FILE_BASIC_INFORMATION FileBasic;
+ IO_STATUS_BLOCK IoStatusBlock;
+ NTSTATUS NtStatus;
+ ULONG Attributes = 0;
- if (File->Attributes & CAB_ATTRIB_READONLY)
- Attributes |= FILE_ATTRIBUTE_READONLY;
+ if (File->Attributes & CAB_ATTRIB_READONLY)
+ Attributes |= FILE_ATTRIBUTE_READONLY;
- if (File->Attributes & CAB_ATTRIB_HIDDEN)
- Attributes |= FILE_ATTRIBUTE_HIDDEN;
+ if (File->Attributes & CAB_ATTRIB_HIDDEN)
+ Attributes |= FILE_ATTRIBUTE_HIDDEN;
- if (File->Attributes & CAB_ATTRIB_SYSTEM)
- Attributes |= FILE_ATTRIBUTE_SYSTEM;
+ if (File->Attributes & CAB_ATTRIB_SYSTEM)
+ Attributes |= FILE_ATTRIBUTE_SYSTEM;
- if (File->Attributes & CAB_ATTRIB_DIRECTORY)
- Attributes |= FILE_ATTRIBUTE_DIRECTORY;
+ if (File->Attributes & CAB_ATTRIB_DIRECTORY)
+ Attributes |= FILE_ATTRIBUTE_DIRECTORY;
- if (File->Attributes & CAB_ATTRIB_ARCHIVE)
- Attributes |= FILE_ATTRIBUTE_ARCHIVE;
+ if (File->Attributes & CAB_ATTRIB_ARCHIVE)
+ Attributes |= FILE_ATTRIBUTE_ARCHIVE;
- NtStatus = NtQueryInformationFile(hFile,
- &IoStatusBlock,
- &FileBasic,
- sizeof(FILE_BASIC_INFORMATION),
- FileBasicInformation);
- if (!NT_SUCCESS(NtStatus))
+ NtStatus = NtQueryInformationFile(hFile,
+ &IoStatusBlock,
+ &FileBasic,
+ sizeof(FILE_BASIC_INFORMATION),
+ FileBasicInformation);
+ if (!NT_SUCCESS(NtStatus))
{
- DPRINT("NtQueryInformationFile() failed (%x).\n", NtStatus);
+ DPRINT("NtQueryInformationFile() failed (%x)\n", NtStatus);
}
- else
+ else
{
- FileBasic.FileAttributes = Attributes;
+ FileBasic.FileAttributes = Attributes;
- NtStatus = NtSetInformationFile(hFile,
- &IoStatusBlock,
- &FileBasic,
- sizeof(FILE_BASIC_INFORMATION),
- FileBasicInformation);
- if (!NT_SUCCESS(NtStatus))
+ NtStatus = NtSetInformationFile(hFile,
+ &IoStatusBlock,
+ &FileBasic,
+ sizeof(FILE_BASIC_INFORMATION),
+ FileBasicInformation);
+ if (!NT_SUCCESS(NtStatus))
{
- DPRINT("NtSetInformationFile() failed (%x).\n", NtStatus);
+ DPRINT("NtSetInformationFile() failed (%x)\n", NtStatus);
}
}
- return NT_SUCCESS(NtStatus);
+ return NT_SUCCESS(NtStatus);
}
-static ULONG
-CloseCabinet(VOID)
/*
* FUNCTION: Closes the current cabinet
* RETURNS:
* Status of operation
*/
+static ULONG
+CloseCabinet(VOID)
{
- if (FileBuffer)
+ if (FileBuffer)
{
- NtUnmapViewOfSection( NtCurrentProcess(), FileBuffer );
- NtClose( FileSectionHandle );
- NtClose( FileHandle );
- FileBuffer = NULL;
+ NtUnmapViewOfSection(NtCurrentProcess(), FileBuffer);
+ NtClose(FileSectionHandle);
+ NtClose(FileHandle);
+ FileBuffer = NULL;
}
- return 0;
+ return 0;
}
-
-VOID
-CabinetInitialize(VOID)
/*
* FUNCTION: Initialize archiver
*/
+VOID
+CabinetInitialize(VOID)
{
- ZStream.zalloc = MSZipAlloc;
- ZStream.zfree = MSZipFree;
- ZStream.opaque = (voidpf)0;
+ ZStream.zalloc = MSZipAlloc;
+ ZStream.zfree = MSZipFree;
+ ZStream.opaque = (voidpf)0;
- FileOpen = FALSE;
- wcscpy(DestPath, L"");
+ FileOpen = FALSE;
+ wcscpy(DestPath, L"");
- CodecId = CAB_CODEC_RAW;
- CodecSelected = TRUE;
+ CodecId = CAB_CODEC_RAW;
+ CodecSelected = TRUE;
- FolderUncompSize = 0;
- BytesLeftInBlock = 0;
- CabinetReserved = 0;
- FolderReserved = 0;
- DataReserved = 0;
- CabinetReservedArea = NULL;
- LastFileOffset = 0;
+ FolderUncompSize = 0;
+ BytesLeftInBlock = 0;
+ CabinetReserved = 0;
+ FolderReserved = 0;
+ DataReserved = 0;
+ CabinetReservedArea = NULL;
+ LastFileOffset = 0;
}
-
-VOID
-CabinetCleanup(VOID)
/*
* FUNCTION: Cleanup archiver
*/
+VOID
+CabinetCleanup(VOID)
{
- CabinetClose();
+ CabinetClose();
}
-
-BOOL
-CabinetNormalizePath(PWCHAR Path,
- ULONG Length)
/*
* FUNCTION: Normalizes a path
* ARGUMENTS:
@@ -433,254 +427,256 @@ CabinetNormalizePath(PWCHAR Path,
* RETURNS:
* TRUE if there was enough room in Path, or FALSE
*/
+BOOL
+CabinetNormalizePath(PWCHAR Path,
+ ULONG Length)
{
- ULONG n;
- BOOL OK = TRUE;
+ ULONG n;
+ BOOL Ok;
- if ((n = wcslen(Path)) &&
- (Path[n - 1] != L'\\') &&
- (OK = ((n + 1) < Length)))
+ n = wcslen(Path);
+ Ok = (n + 1) < Length;
+
+ if (n != 0 && Path[n - 1] != L'\\' && Ok)
{
- Path[n] = L'\\';
- Path[n + 1] = 0;
+ Path[n] = L'\\';
+ Path[n + 1] = 0;
}
- return OK;
+
+ return Ok;
}
-
-PWCHAR
-CabinetGetCabinetName()
/*
* FUNCTION: Returns pointer to cabinet file name
* RETURNS:
* Pointer to string with name of cabinet
*/
+PWCHAR
+CabinetGetCabinetName(VOID)
{
- return CabinetName;
+ return CabinetName;
}
-
-VOID
-CabinetSetCabinetName(PWCHAR FileName)
/*
* FUNCTION: Sets cabinet file name
* ARGUMENTS:
* FileName = Pointer to string with name of cabinet
*/
+VOID
+CabinetSetCabinetName(PWCHAR FileName)
{
- wcscpy(CabinetName, FileName);
+ wcscpy(CabinetName, FileName);
}
-
-VOID
-CabinetSetDestinationPath(PWCHAR DestinationPath)
/*
* FUNCTION: Sets destination path
* ARGUMENTS:
* DestinationPath = Pointer to string with name of destination path
*/
+VOID
+CabinetSetDestinationPath(PWCHAR DestinationPath)
{
- wcscpy(DestPath, DestinationPath);
- if (wcslen(DestPath) > 0)
- CabinetNormalizePath(DestPath, MAX_PATH);
+ wcscpy(DestPath, DestinationPath);
+
+ if (wcslen(DestPath) > 0)
+ CabinetNormalizePath(DestPath, MAX_PATH);
}
-
-PWCHAR
-CabinetGetDestinationPath()
/*
* FUNCTION: Returns destination path
* RETURNS:
* Pointer to string with name of destination path
*/
+PWCHAR
+CabinetGetDestinationPath(VOID)
{
- return DestPath;
+ return DestPath;
}
-
-ULONG
-CabinetOpen(VOID)
/*
* FUNCTION: Opens a cabinet file
* RETURNS:
* Status of operation
*/
+ULONG
+CabinetOpen(VOID)
{
- PUCHAR Buffer;
- UNICODE_STRING ustring;
- ANSI_STRING astring;
+ PUCHAR Buffer;
+ UNICODE_STRING ustring;
+ ANSI_STRING astring;
- if (!FileOpen)
+ if (!FileOpen)
{
- OBJECT_ATTRIBUTES ObjectAttributes;
- IO_STATUS_BLOCK IoStatusBlock;
- UNICODE_STRING FileName;
- NTSTATUS NtStatus;
- ULONG Size;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ IO_STATUS_BLOCK IoStatusBlock;
+ UNICODE_STRING FileName;
+ NTSTATUS NtStatus;
+ ULONG Size;
- RtlInitUnicodeString(&FileName,
- CabinetName);
+ RtlInitUnicodeString(&FileName, CabinetName);
- InitializeObjectAttributes(&ObjectAttributes,
- &FileName,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
+ InitializeObjectAttributes(&ObjectAttributes,
+ &FileName,
+ OBJ_CASE_INSENSITIVE,
+ NULL, NULL);
- NtStatus = NtOpenFile(&FileHandle,
- GENERIC_READ | SYNCHRONIZE,
- &ObjectAttributes,
- &IoStatusBlock,
- FILE_SHARE_READ,
- FILE_SYNCHRONOUS_IO_NONALERT);
- if (!NT_SUCCESS(NtStatus))
+ NtStatus = NtOpenFile(&FileHandle,
+ GENERIC_READ | SYNCHRONIZE,
+ &ObjectAttributes,
+ &IoStatusBlock,
+ FILE_SHARE_READ,
+ FILE_SYNCHRONOUS_IO_NONALERT);
+
+ if (!NT_SUCCESS(NtStatus))
{
- DPRINT("Cannot open file (%S) (%x).\n", CabinetName, NtStatus);
- return CAB_STATUS_CANNOT_OPEN;
+ DPRINT("Cannot open file (%S) (%x)\n", CabinetName, NtStatus);
+ return CAB_STATUS_CANNOT_OPEN;
}
- FileOpen = TRUE;
- NtStatus = NtCreateSection(&FileSectionHandle,
- SECTION_ALL_ACCESS,
- 0,
- 0,
- PAGE_READONLY,
- SEC_COMMIT,
- FileHandle);
- if(!NT_SUCCESS(NtStatus))
- {
- DPRINT("NtCreateSection failed: %x\n", NtStatus);
- return CAB_STATUS_NOMEMORY;
- }
- FileBuffer = 0;
- FileSize = 0;
- NtStatus = NtMapViewOfSection(FileSectionHandle,
- NtCurrentProcess(),
- (PVOID *)&FileBuffer,
- 0,
- 0,
- 0,
- &FileSize,
- ViewUnmap,
- 0,
- PAGE_READONLY);
- if(!NT_SUCCESS(NtStatus))
- {
- DPRINT("NtMapViewOfSection failed: %x\n", NtStatus);
- return CAB_STATUS_NOMEMORY;
- }
- DPRINT( "Cabinet file %S opened and mapped to %x\n", CabinetName, FileBuffer );
- PCABHeader = (PCFHEADER)FileBuffer;
+ FileOpen = TRUE;
- /* Check header */
- if(FileSize <= sizeof(CFHEADER) ||
- PCABHeader->Signature != CAB_SIGNATURE ||
- PCABHeader->Version != CAB_VERSION ||
- PCABHeader->FolderCount == 0 ||
- PCABHeader->FileCount == 0 ||
- PCABHeader->FileTableOffset < sizeof(CFHEADER))
- {
- CloseCabinet();
- DPRINT("File has invalid header.\n");
- return CAB_STATUS_INVALID_CAB;
- }
+ NtStatus = NtCreateSection(&FileSectionHandle,
+ SECTION_ALL_ACCESS,
+ 0, 0,
+ PAGE_READONLY,
+ SEC_COMMIT,
+ FileHandle);
- Size = 0;
- Buffer = (PUCHAR)(PCABHeader+1);
- /* Read/skip any reserved bytes */
- if (PCABHeader->Flags & CAB_FLAG_RESERVE)
+ if (!NT_SUCCESS(NtStatus))
{
- CabinetReserved = *(PUSHORT)Buffer;
- Buffer += 2;
- FolderReserved = *Buffer;
- Buffer++;
- DataReserved = *Buffer;
- Buffer++;
- if (CabinetReserved > 0)
+ DPRINT("NtCreateSection failed: %x\n", NtStatus);
+ return CAB_STATUS_NOMEMORY;
+ }
+
+ FileBuffer = 0;
+ FileSize = 0;
+
+ NtStatus = NtMapViewOfSection(FileSectionHandle,
+ NtCurrentProcess(),
+ (PVOID *)&FileBuffer,
+ 0, 0, 0,
+ &FileSize,
+ ViewUnmap,
+ 0,
+ PAGE_READONLY);
+
+ if (!NT_SUCCESS(NtStatus))
+ {
+ DPRINT("NtMapViewOfSection failed: %x\n", NtStatus);
+ return CAB_STATUS_NOMEMORY;
+ }
+
+ DPRINT("Cabinet file %S opened and mapped to %x\n", CabinetName, FileBuffer);
+ PCABHeader = (PCFHEADER) FileBuffer;
+
+ /* Check header */
+ if (FileSize <= sizeof(CFHEADER) ||
+ PCABHeader->Signature != CAB_SIGNATURE ||
+ PCABHeader->Version != CAB_VERSION ||
+ PCABHeader->FolderCount == 0 ||
+ PCABHeader->FileCount == 0 ||
+ PCABHeader->FileTableOffset < sizeof(CFHEADER))
+ {
+ CloseCabinet();
+ DPRINT("File has invalid header\n");
+ return CAB_STATUS_INVALID_CAB;
+ }
+
+ Size = 0;
+ Buffer = (PUCHAR)(PCABHeader + 1);
+
+ /* Read/skip any reserved bytes */
+ if (PCABHeader->Flags & CAB_FLAG_RESERVE)
+ {
+ CabinetReserved = *(PUSHORT)Buffer;
+ Buffer += 2;
+ FolderReserved = *Buffer;
+ Buffer++;
+ DataReserved = *Buffer;
+ Buffer++;
+
+ if (CabinetReserved > 0)
{
- CabinetReservedArea = Buffer;
- Buffer += CabinetReserved;
+ CabinetReservedArea = Buffer;
+ Buffer += CabinetReserved;
}
}
- if (PCABHeader->Flags & CAB_FLAG_HASPREV)
+ if (PCABHeader->Flags & CAB_FLAG_HASPREV)
{
- /* The previous cabinet file is in the same directory as the current */
- wcscpy(CabinetPrev, CabinetName);
- RemoveFileName(CabinetPrev);
- CabinetNormalizePath(CabinetPrev, 256);
- RtlInitAnsiString( &astring, (LPSTR)Buffer );
- ustring.Length = wcslen( CabinetPrev );
- ustring.Buffer = CabinetPrev + ustring.Length;
- ustring.MaximumLength = sizeof( CabinetPrev ) - ustring.Length;
- RtlAnsiStringToUnicodeString( &ustring, &astring, FALSE );
- Buffer += astring.Length + 1;
+ /* The previous cabinet file is in
+ the same directory as the current */
+ wcscpy(CabinetPrev, CabinetName);
+ RemoveFileName(CabinetPrev);
+ CabinetNormalizePath(CabinetPrev, 256);
+ RtlInitAnsiString(&astring, (LPSTR)Buffer);
+ ustring.Length = wcslen(CabinetPrev);
+ ustring.Buffer = CabinetPrev + ustring.Length;
+ ustring.MaximumLength = sizeof(CabinetPrev) - ustring.Length;
+ RtlAnsiStringToUnicodeString(&ustring, &astring, FALSE);
+ Buffer += astring.Length + 1;
- /* Read label of prev disk */
- RtlInitAnsiString( &astring, (LPSTR)Buffer );
- ustring.Length = 0;
- ustring.Buffer = DiskPrev;
- ustring.MaximumLength = sizeof( DiskPrev );
- RtlAnsiStringToUnicodeString( &ustring, &astring, FALSE );
- Buffer += astring.Length + 1;
+ /* Read label of prev disk */
+ RtlInitAnsiString(&astring, (LPSTR)Buffer);
+ ustring.Length = 0;
+ ustring.Buffer = DiskPrev;
+ ustring.MaximumLength = sizeof(DiskPrev);
+ RtlAnsiStringToUnicodeString(&ustring, &astring, FALSE);
+ Buffer += astring.Length + 1;
}
- else
+ else
{
- wcscpy(CabinetPrev, L"");
- wcscpy(DiskPrev, L"");
+ wcscpy(CabinetPrev, L"");
+ wcscpy(DiskPrev, L"");
}
- if (PCABHeader->Flags & CAB_FLAG_HASNEXT)
+ if (PCABHeader->Flags & CAB_FLAG_HASNEXT)
{
- /* The next cabinet file is in the same directory as the previous */
- wcscpy(CabinetNext, CabinetName);
- RemoveFileName(CabinetNext);
- CabinetNormalizePath(CabinetNext, 256);
- RtlInitAnsiString( &astring, (LPSTR)Buffer );
- ustring.Length = wcslen( CabinetNext );
- ustring.Buffer = CabinetNext + ustring.Length;
- ustring.MaximumLength = sizeof( CabinetNext ) - ustring.Length;
- RtlAnsiStringToUnicodeString( &ustring, &astring, FALSE );
- Buffer += astring.Length + 1;
+ /* The next cabinet file is in
+ the same directory as the previous */
+ wcscpy(CabinetNext, CabinetName);
+ RemoveFileName(CabinetNext);
+ CabinetNormalizePath(CabinetNext, 256);
+ RtlInitAnsiString(&astring, (LPSTR)Buffer);
+ ustring.Length = wcslen(CabinetNext);
+ ustring.Buffer = CabinetNext + ustring.Length;
+ ustring.MaximumLength = sizeof(CabinetNext) - ustring.Length;
+ RtlAnsiStringToUnicodeString(&ustring, &astring, FALSE);
+ Buffer += astring.Length + 1;
- /* Read label of next disk */
- RtlInitAnsiString( &astring, (LPSTR)Buffer );
- ustring.Length = 0;
- ustring.Buffer = DiskNext;
- ustring.MaximumLength = sizeof( DiskNext );
- RtlAnsiStringToUnicodeString( &ustring, &astring, FALSE );
- Buffer += astring.Length + 1;
+ /* Read label of next disk */
+ RtlInitAnsiString(&astring, (LPSTR)Buffer);
+ ustring.Length = 0;
+ ustring.Buffer = DiskNext;
+ ustring.MaximumLength = sizeof(DiskNext);
+ RtlAnsiStringToUnicodeString(&ustring, &astring, FALSE);
+ Buffer += astring.Length + 1;
}
- else
+ else
{
- wcscpy(CabinetNext, L"");
- wcscpy(DiskNext, L"");
+ wcscpy(CabinetNext, L"");
+ wcscpy(DiskNext, L"");
}
- CabinetFolders = (PCFFOLDER)Buffer;
+ CabinetFolders = (PCFFOLDER)Buffer;
}
- DPRINT( "CabinetOpen returning SUCCESS\n" );
- return CAB_STATUS_SUCCESS;
+
+ DPRINT("CabinetOpen returning SUCCESS\n");
+ return CAB_STATUS_SUCCESS;
}
-
-VOID
-CabinetClose(VOID)
/*
* FUNCTION: Closes the cabinet file
*/
+VOID
+CabinetClose(VOID)
{
- if (FileOpen)
+ if (FileOpen)
{
- CloseCabinet();
-
- FileOpen = FALSE;
+ CloseCabinet();
+ FileOpen = FALSE;
}
}
-
-ULONG
-CabinetFindFirst(PWCHAR FileName,
- PCAB_SEARCH Search)
/*
* FUNCTION: Finds the first file in the cabinet that matches a search criteria
* ARGUMENTS:
@@ -689,17 +685,17 @@ CabinetFindFirst(PWCHAR FileName,
* RETURNS:
* Status of operation
*/
+ULONG
+CabinetFindFirst(PWCHAR FileName,
+ PCAB_SEARCH Search)
{
- DPRINT( "CabinetFindFirst( FileName = %S )\n", FileName );
- wcsncpy(Search->Search, FileName, MAX_PATH);
- wcsncpy(Search->Cabinet, CabinetName, MAX_PATH);
- Search->File = 0;
- return CabinetFindNext(Search);
+ DPRINT("CabinetFindFirst( FileName = %S )\n", FileName);
+ wcsncpy(Search->Search, FileName, MAX_PATH);
+ wcsncpy(Search->Cabinet, CabinetName, MAX_PATH);
+ Search->File = 0;
+ return CabinetFindNext(Search);
}
-
-ULONG
-CabinetFindNext(PCAB_SEARCH Search)
/*
* FUNCTION: Finds next file in the cabinet that matches a search criteria
* ARGUMENTS:
@@ -707,99 +703,116 @@ CabinetFindNext(PCAB_SEARCH Search)
* RETURNS:
* Status of operation
*/
+ULONG
+CabinetFindNext(PCAB_SEARCH Search)
{
- ULONG Status;
- PCFFILE Prev;
- ANSI_STRING AnsiString;
- UNICODE_STRING UnicodeString;
- WCHAR FileName[MAX_PATH] = {L'\0'};
+ ULONG Status;
+ PCFFILE Prev;
+ ANSI_STRING AnsiString;
+ UNICODE_STRING UnicodeString;
+ WCHAR FileName[MAX_PATH];
- if( wcscmp( Search->Cabinet, CabinetName ) != 0 )
- Search->File = 0; // restart search of cabinet has changed since last find
- if( !Search->File )
- {
- // starting new search or cabinet
- Search->File = (PCFFILE)(FileBuffer + PCABHeader->FileTableOffset);
- Search->Index = 0;
- Prev = 0;
- }
- else Prev = Search->File;
- while(1)
- {
- // look at each file in the archive and see if we found a match
- if( Search->File->FolderIndex == 0xFFFD || Search->File->FolderIndex == 0xFFFF )
- {
- // skip files continued from previous cab
- DPRINT("Skipping file (%s) FileOffset (0x%X) LastFileOffset (0x%X).\n",
- (char *)(Search->File + 1), Search->File->FileOffset, LastFileOffset);
- }
- else {
- // FIXME: check for match against search criteria
- if( Search->File != Prev )
- {
- // don't match the file we started with
- if( wcscmp( Search->Search, L"*" ) == 0 )
- {
- // take any file
- break;
- }
- else {
- // otherwise, try to match the exact file name
- RtlInitAnsiString( &AnsiString, Search->File->FileName );
- UnicodeString.Buffer = FileName;
- UnicodeString.Length = 0;
- UnicodeString.MaximumLength = sizeof( FileName );
- RtlAnsiStringToUnicodeString( &UnicodeString, &AnsiString, FALSE );
- if( wcscmp( Search->Search, UnicodeString.Buffer ) == 0 )
- break;
- }
- }
- }
- // if we make it here we found no match, so move to the next file
- Search->Index++;
- if( Search->Index >= PCABHeader->FileCount )
- {
- // we have reached the end of this cabinet, try to open the next
- DPRINT( "End of cabinet reached\n" );
- if (wcslen(DiskNext) > 0)
- {
- CloseCabinet();
+ if (wcscmp(Search->Cabinet, CabinetName) != 0)
+ {
+ /* restart search of cabinet has changed since last find */
+ Search->File = 0;
+ }
- CabinetSetCabinetName(CabinetNext);
- wcscpy( Search->Cabinet, CabinetName );
+ if (!Search->File)
+ {
+ /* starting new search or cabinet */
+ Search->File = (PCFFILE)(FileBuffer + PCABHeader->FileTableOffset);
+ Search->Index = 0;
+ Prev = 0;
+ }
+ else
+ Prev = Search->File;
- if (DiskChangeHandler != NULL)
- {
- DiskChangeHandler(CabinetNext, DiskNext);
- }
+ while (TRUE)
+ {
+ /* look at each file in the archive and see if we found a match */
+ if (Search->File->FolderIndex == 0xFFFD ||
+ Search->File->FolderIndex == 0xFFFF)
+ {
+ /* skip files continued from previous cab */
+ DPRINT("Skipping file (%s): FileOffset (0x%X), "
+ "LastFileOffset (0x%X)\n", (char *)(Search->File + 1),
+ Search->File->FileOffset, LastFileOffset);
+ }
+ else
+ {
+ // FIXME: check for match against search criteria
+ if (Search->File != Prev)
+ {
+ /* don't match the file we started with */
+ if (wcscmp(Search->Search, L"*") == 0)
+ {
+ /* take any file */
+ break;
+ }
+ else
+ {
+ /* otherwise, try to match the exact file name */
+ RtlInitAnsiString(&AnsiString, Search->File->FileName);
+ UnicodeString.Buffer = FileName;
+ UnicodeString.Buffer[0] = 0;
+ UnicodeString.Length = 0;
+ UnicodeString.MaximumLength = sizeof(FileName);
+ RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE);
+ if (wcscmp(Search->Search, UnicodeString.Buffer) == 0)
+ break;
+ }
+ }
+ }
- Status = CabinetOpen();
- if (Status != CAB_STATUS_SUCCESS)
- return Status;
+ /* if we make it here we found no match, so move to the next file */
+ Search->Index++;
+ if (Search->Index >= PCABHeader->FileCount)
+ {
+ /* we have reached the end of this cabinet, try to open the next */
+ DPRINT("End of cabinet reached\n");
+ if (wcslen(DiskNext) > 0)
+ {
+ CloseCabinet();
- }
- else
- {
- return CAB_STATUS_NOFILE;
- }
- // starting new search or cabinet
- Search->File = (PCFFILE)(FileBuffer + PCABHeader->FileTableOffset);
- Search->Index = 0;
- Prev = 0;
- }
- else Search->File = (PCFFILE)(strchr( (char *)(Search->File + 1), 0 ) + 1);
- }
- DPRINT( "Found file %s\n", Search->File->FileName );
- return CAB_STATUS_SUCCESS;
+ CabinetSetCabinetName(CabinetNext);
+ wcscpy(Search->Cabinet, CabinetName);
+
+ if (DiskChangeHandler != NULL)
+ {
+ DiskChangeHandler(CabinetNext, DiskNext);
+ }
+
+ Status = CabinetOpen();
+ if (Status != CAB_STATUS_SUCCESS)
+ return Status;
+ }
+ else
+ {
+ return CAB_STATUS_NOFILE;
+ }
+
+ /* starting new search or cabinet */
+ Search->File = (PCFFILE)(FileBuffer + PCABHeader->FileTableOffset);
+ Search->Index = 0;
+ Prev = 0;
+ }
+ else
+ Search->File = (PCFFILE)(strchr((char *)(Search->File + 1), 0) + 1);
+ }
+
+ DPRINT("Found file %s\n", Search->File->FileName);
+ return CAB_STATUS_SUCCESS;
}
-
-int Validate()
+#if 0
+int
+Validate()
{
- return (int)RtlValidateHeap(ProcessHeap, 0, 0);
+ return (int)RtlValidateHeap(ProcessHeap, 0, 0);
}
+#endif
-ULONG CabinetExtractFile( PCAB_SEARCH Search )
/*
* FUNCTION: Extracts a file from the cabinet
* ARGUMENTS:
@@ -807,309 +820,339 @@ ULONG CabinetExtractFile( PCAB_SEARCH Search )
* RETURNS
* Status of operation
*/
+ULONG
+CabinetExtractFile(PCAB_SEARCH Search)
{
- ULONG Size; // remaining file bytes to decompress
- ULONG CurrentOffset; // current uncompressed offset within the folder
- PUCHAR CurrentBuffer; // current pointer to compressed data in the block
- LONG RemainingBlock; // remaining comp data in the block
- HANDLE DestFile;
- HANDLE DestFileSection;
- PVOID DestFileBuffer; // mapped view of dest file
- PVOID CurrentDestBuffer; // pointer to the current position in the dest view
- PCFDATA CFData; // current data block
- ULONG Status;
- FILETIME FileTime;
- WCHAR DestName[MAX_PATH];
- NTSTATUS NtStatus;
- UNICODE_STRING UnicodeString;
- ANSI_STRING AnsiString;
- IO_STATUS_BLOCK IoStatusBlock;
- OBJECT_ATTRIBUTES ObjectAttributes;
- FILE_BASIC_INFORMATION FileBasic;
- PCFFOLDER CurrentFolder;
- LARGE_INTEGER MaxDestFileSize;
- LONG InputLength, OutputLength;
- char Junk[512];
+ ULONG Size; // remaining file bytes to decompress
+ ULONG CurrentOffset; // current uncompressed offset within the folder
+ PUCHAR CurrentBuffer; // current pointer to compressed data in the block
+ LONG RemainingBlock; // remaining comp data in the block
+ HANDLE DestFile;
+ HANDLE DestFileSection;
+ PVOID DestFileBuffer; // mapped view of dest file
+ PVOID CurrentDestBuffer; // pointer to the current position in the dest view
+ PCFDATA CFData; // current data block
+ ULONG Status;
+ FILETIME FileTime;
+ WCHAR DestName[MAX_PATH];
+ NTSTATUS NtStatus;
+ UNICODE_STRING UnicodeString;
+ ANSI_STRING AnsiString;
+ IO_STATUS_BLOCK IoStatusBlock;
+ OBJECT_ATTRIBUTES ObjectAttributes;
+ FILE_BASIC_INFORMATION FileBasic;
+ PCFFOLDER CurrentFolder;
+ LARGE_INTEGER MaxDestFileSize;
+ LONG InputLength, OutputLength;
+ char Junk[512];
- if( wcscmp( Search->Cabinet, CabinetName ) != 0 )
- {
- // the file is not in the current cabinet
- DPRINT( "File is not in this cabinet ( %S != %S )\n", Search->Cabinet, CabinetName );
- return CAB_STATUS_NOFILE;
- }
- // look up the folder that the file specifies
- if( Search->File->FolderIndex == 0xFFFD || Search->File->FolderIndex == 0xFFFF )
- {
- // folder is continued from previous cabinet, that shouldn't happen here
- return CAB_STATUS_NOFILE;
- }
- else if( Search->File->FolderIndex == 0xFFFE )
- {
- // folder is the last in this cabinet and continues into next
- CurrentFolder = &CabinetFolders[PCABHeader->FolderCount-1];
- }
- else {
- // folder is completely contained within this cabinet
- CurrentFolder = &CabinetFolders[Search->File->FolderIndex];
- }
- switch (CurrentFolder->CompressionType & CAB_COMP_MASK)
+ if (wcscmp(Search->Cabinet, CabinetName) != 0)
{
- case CAB_COMP_NONE:
- CabinetSelectCodec(CAB_CODEC_RAW);
- break;
- case CAB_COMP_MSZIP:
- CabinetSelectCodec(CAB_CODEC_MSZIP);
- break;
- default:
- return CAB_STATUS_UNSUPPCOMP;
+ /* the file is not in the current cabinet */
+ DPRINT("File is not in this cabinet (%S != %S)\n",
+ Search->Cabinet, CabinetName);
+ return CAB_STATUS_NOFILE;
}
- DPRINT("Extracting file at uncompressed offset (0x%X) Size (%d bytes)).\n",
- (UINT)Search->File->FileOffset,
- (UINT)Search->File->FileSize);
- RtlInitAnsiString( &AnsiString, Search->File->FileName );
- wcscpy( DestName, DestPath );
- UnicodeString.MaximumLength = sizeof( DestName ) - wcslen( DestName );
- UnicodeString.Buffer = DestName + wcslen( DestName );
- UnicodeString.Length = 0;
- RtlAnsiStringToUnicodeString( &UnicodeString, &AnsiString, FALSE );
-
- /* Create destination file, fail if it already exists */
- RtlInitUnicodeString(&UnicodeString,
- DestName);
-
-
- InitializeObjectAttributes(&ObjectAttributes,
- &UnicodeString,
- OBJ_CASE_INSENSITIVE,
- NULL,
- NULL);
-
- NtStatus = NtCreateFile(&DestFile,
- GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
- &ObjectAttributes,
- &IoStatusBlock,
- NULL,
- FILE_ATTRIBUTE_NORMAL,
- 0,
- FILE_CREATE,
- FILE_SYNCHRONOUS_IO_NONALERT,
- NULL,
- 0);
- if (!NT_SUCCESS(NtStatus))
+ /* look up the folder that the file specifies */
+ if (Search->File->FolderIndex == 0xFFFD ||
+ Search->File->FolderIndex == 0xFFFF)
{
- DPRINT("NtCreateFile() failed (%S) (%x).\n", DestName, NtStatus);
+ /* folder is continued from previous cabinet,
+ that shouldn't happen here */
+ return CAB_STATUS_NOFILE;
+ }
+ else if (Search->File->FolderIndex == 0xFFFE)
+ {
+ /* folder is the last in this cabinet and continues into next */
+ CurrentFolder = &CabinetFolders[PCABHeader->FolderCount - 1];
+ }
+ else
+ {
+ /* folder is completely contained within this cabinet */
+ CurrentFolder = &CabinetFolders[Search->File->FolderIndex];
+ }
- /* If file exists, ask to overwrite file */
- if (OverwriteHandler == NULL || OverwriteHandler(Search->File, DestName))
+ switch (CurrentFolder->CompressionType & CAB_COMP_MASK)
+ {
+ case CAB_COMP_NONE:
+ CabinetSelectCodec(CAB_CODEC_RAW);
+ break;
+ case CAB_COMP_MSZIP:
+ CabinetSelectCodec(CAB_CODEC_MSZIP);
+ break;
+ default:
+ return CAB_STATUS_UNSUPPCOMP;
+ }
+
+ DPRINT("Extracting file at uncompressed offset (0x%X) Size (%d bytes)\n",
+ (UINT)Search->File->FileOffset, (UINT)Search->File->FileSize);
+
+ RtlInitAnsiString(&AnsiString, Search->File->FileName);
+ wcscpy(DestName, DestPath);
+ UnicodeString.MaximumLength = sizeof(DestName) - wcslen(DestName);
+ UnicodeString.Buffer = DestName + wcslen(DestName);
+ UnicodeString.Length = 0;
+ RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE);
+
+ /* Create destination file, fail if it already exists */
+ RtlInitUnicodeString(&UnicodeString, DestName);
+
+ InitializeObjectAttributes(&ObjectAttributes,
+ &UnicodeString,
+ OBJ_CASE_INSENSITIVE,
+ NULL, NULL);
+
+ NtStatus = NtCreateFile(&DestFile,
+ GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
+ &ObjectAttributes,
+ &IoStatusBlock,
+ NULL,
+ FILE_ATTRIBUTE_NORMAL,
+ 0,
+ FILE_CREATE,
+ FILE_SYNCHRONOUS_IO_NONALERT,
+ NULL, 0);
+
+ if (!NT_SUCCESS(NtStatus))
+ {
+ DPRINT("NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
+
+ /* If file exists, ask to overwrite file */
+ if (OverwriteHandler == NULL || OverwriteHandler(Search->File, DestName))
{
- /* Create destination file, overwrite if it already exists */
- NtStatus = NtCreateFile(&DestFile,
- GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
- &ObjectAttributes,
- &IoStatusBlock,
- NULL,
- FILE_ATTRIBUTE_NORMAL,
- 0,
- FILE_OVERWRITE,
- FILE_SYNCHRONOUS_IO_ALERT,
- NULL,
- 0);
- if (!NT_SUCCESS(NtStatus))
+ /* Create destination file, overwrite if it already exists */
+ NtStatus = NtCreateFile(&DestFile,
+ GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
+ &ObjectAttributes,
+ &IoStatusBlock,
+ NULL,
+ FILE_ATTRIBUTE_NORMAL,
+ 0,
+ FILE_OVERWRITE,
+ FILE_SYNCHRONOUS_IO_ALERT,
+ NULL, 0);
+
+ if (!NT_SUCCESS(NtStatus))
{
- DPRINT("NtCreateFile() failed 2 (%S) (%x).\n", DestName, NtStatus);
- return CAB_STATUS_CANNOT_CREATE;
+ DPRINT("NtCreateFile() failed (%S) (%x)\n", DestName, NtStatus);
+ return CAB_STATUS_CANNOT_CREATE;
}
}
- else
+ else
{
- DPRINT("File (%S) exists.\n", DestName);
- return CAB_STATUS_FILE_EXISTS;
- }
- }
- MaxDestFileSize.QuadPart = Search->File->FileSize;
- NtStatus = NtCreateSection(&DestFileSection,
- SECTION_ALL_ACCESS,
- 0,
- &MaxDestFileSize,
- PAGE_READWRITE,
- SEC_COMMIT,
- DestFile);
- if(!NT_SUCCESS(NtStatus))
- {
- DPRINT("NtCreateSection failed: %x\n", NtStatus);
- Status = CAB_STATUS_NOMEMORY;
- goto CloseDestFile;
- }
- DestFileBuffer = 0;
- DestFileSize = 0;
- NtStatus = NtMapViewOfSection(DestFileSection,
- NtCurrentProcess(),
- &DestFileBuffer,
- 0,
- 0,
- 0,
- &DestFileSize,
- ViewUnmap,
- 0,
- PAGE_READWRITE);
- if(!NT_SUCCESS(NtStatus))
- {
- DPRINT("NtMapViewOfSection failed: %x\n", NtStatus);
- Status = CAB_STATUS_NOMEMORY;
- goto CloseDestFileSection;
- }
- CurrentDestBuffer = DestFileBuffer;
- if (!ConvertDosDateTimeToFileTime(Search->File->FileDate, Search->File->FileTime, &FileTime))
- {
- DPRINT("DosDateTimeToFileTime() failed.\n");
- Status = CAB_STATUS_CANNOT_WRITE;
- goto UnmapDestFile;
- }
-
- NtStatus = NtQueryInformationFile(DestFile,
- &IoStatusBlock,
- &FileBasic,
- sizeof(FILE_BASIC_INFORMATION),
- FileBasicInformation);
- if (!NT_SUCCESS(NtStatus))
- {
- DPRINT("NtQueryInformationFile() failed (%x).\n", NtStatus);
- }
- else
- {
- memcpy(&FileBasic.LastAccessTime, &FileTime, sizeof(FILETIME));
-
- NtStatus = NtSetInformationFile(DestFile,
- &IoStatusBlock,
- &FileBasic,
- sizeof(FILE_BASIC_INFORMATION),
- FileBasicInformation);
- if (!NT_SUCCESS(NtStatus))
- {
- DPRINT("NtSetInformationFile() failed (%x).\n", NtStatus);
+ DPRINT("File (%S) exists\n", DestName);
+ return CAB_STATUS_FILE_EXISTS;
}
}
- SetAttributesOnFile(Search->File, DestFile);
+ MaxDestFileSize.QuadPart = Search->File->FileSize;
+ NtStatus = NtCreateSection(&DestFileSection,
+ SECTION_ALL_ACCESS,
+ 0,
+ &MaxDestFileSize,
+ PAGE_READWRITE,
+ SEC_COMMIT,
+ DestFile);
- /* Call extract event handler */
- if (ExtractHandler != NULL)
+ if (!NT_SUCCESS(NtStatus))
{
- ExtractHandler(Search->File, DestName);
+ DPRINT("NtCreateSection failed: %x\n", NtStatus);
+ Status = CAB_STATUS_NOMEMORY;
+ goto CloseDestFile;
}
- // find the starting block of the file
- // start with the first data block of the folder
- CFData = (PCFDATA)(CabinetFolders[Search->File->FolderIndex].DataOffset + FileBuffer);
- CurrentOffset = 0;
- while( CurrentOffset + CFData->UncompSize <= Search->File->FileOffset )
- {
- // walk the data blocks until we reach the one containing the start of the file
- CurrentOffset += CFData->UncompSize;
- CFData = (PCFDATA)((char *)(CFData+1) + DataReserved + CFData->CompSize);
- }
- // now decompress and discard any data in the block before the start of the file
- CurrentBuffer = ((unsigned char *)(CFData+1)) + DataReserved; // start of comp data
- RemainingBlock = CFData->CompSize;
- InputLength = RemainingBlock;
- while( CurrentOffset < Search->File->FileOffset )
- {
- // compute remaining uncomp bytes to start of file, bounded by sizeof junk
- OutputLength = Search->File->FileOffset - CurrentOffset;
- if( OutputLength > (LONG)sizeof( Junk ) )
- OutputLength = sizeof( Junk );
- OutputLength = -OutputLength; // negate to signal NOT end of block
- CodecUncompress( Junk,
- CurrentBuffer,
- &InputLength,
- &OutputLength );
- CurrentOffset += OutputLength; // add the uncomp bytes extracted to current folder offset
- CurrentBuffer += InputLength; // add comp bytes consumed to CurrentBuffer
- RemainingBlock -= InputLength; // subtract bytes consumed from bytes remaining in block
- InputLength = -RemainingBlock; // neg for resume decompression of the same block
- }
- // now CurrentBuffer points to the first comp byte of the file, so we can begin decompressing
- Size = Search->File->FileSize; // Size = remaining uncomp bytes of the file to decompress
- while(Size > 0)
+ DestFileBuffer = 0;
+ DestFileSize = 0;
+ NtStatus = NtMapViewOfSection(DestFileSection,
+ NtCurrentProcess(),
+ &DestFileBuffer,
+ 0, 0, 0,
+ &DestFileSize,
+ ViewUnmap,
+ 0,
+ PAGE_READWRITE);
+
+ if (!NT_SUCCESS(NtStatus))
{
- OutputLength = Size;
- DPRINT( "Decompressing block at %x with RemainingBlock = %d, Size = %d\n", CurrentBuffer, RemainingBlock, Size );
- Status = CodecUncompress(CurrentDestBuffer,
- CurrentBuffer,
- &InputLength,
- &OutputLength);
- if (Status != CS_SUCCESS)
- {
- DPRINT("Cannot uncompress block.\n");
- if(Status == CS_NOMEMORY)
- Status = CAB_STATUS_NOMEMORY;
- Status = CAB_STATUS_INVALID_CAB;
- goto UnmapDestFile;
- }
- CurrentDestBuffer = (PVOID)((ULONG_PTR)CurrentDestBuffer + OutputLength); // advance dest buffer by bytes produced
- CurrentBuffer += InputLength; // advance src buffer by bytes consumed
- Size -= OutputLength; // reduce remaining file bytes by bytes produced
- RemainingBlock -= InputLength; // reduce remaining block size by bytes consumed
- if( RemainingBlock == 0 )
- {
- // used up this block, move on to the next
- DPRINT( "Out of block data\n" );
- CFData = (PCFDATA)CurrentBuffer;
- RemainingBlock = CFData->CompSize;
- CurrentBuffer = ((unsigned char *)(CFData+1) + DataReserved);
- InputLength = RemainingBlock;
- }
- }
- Status = CAB_STATUS_SUCCESS;
- UnmapDestFile:
- NtUnmapViewOfSection(NtCurrentProcess(), DestFileBuffer);
- CloseDestFileSection:
- NtClose(DestFileSection);
- CloseDestFile:
- NtClose(DestFile);
+ DPRINT("NtMapViewOfSection failed: %x\n", NtStatus);
+ Status = CAB_STATUS_NOMEMORY;
+ goto CloseDestFileSection;
+ }
- return Status;
+ CurrentDestBuffer = DestFileBuffer;
+ if (!ConvertDosDateTimeToFileTime(Search->File->FileDate,
+ Search->File->FileTime,
+ &FileTime))
+ {
+ DPRINT("DosDateTimeToFileTime() failed\n");
+ Status = CAB_STATUS_CANNOT_WRITE;
+ goto UnmapDestFile;
+ }
+
+ NtStatus = NtQueryInformationFile(DestFile,
+ &IoStatusBlock,
+ &FileBasic,
+ sizeof(FILE_BASIC_INFORMATION),
+ FileBasicInformation);
+ if (!NT_SUCCESS(NtStatus))
+ {
+ DPRINT("NtQueryInformationFile() failed (%x)\n", NtStatus);
+ }
+ else
+ {
+ memcpy(&FileBasic.LastAccessTime, &FileTime, sizeof(FILETIME));
+
+ NtStatus = NtSetInformationFile(DestFile,
+ &IoStatusBlock,
+ &FileBasic,
+ sizeof(FILE_BASIC_INFORMATION),
+ FileBasicInformation);
+ if (!NT_SUCCESS(NtStatus))
+ {
+ DPRINT("NtSetInformationFile() failed (%x)\n", NtStatus);
+ }
+ }
+
+ SetAttributesOnFile(Search->File, DestFile);
+
+ /* Call extract event handler */
+ if (ExtractHandler != NULL)
+ {
+ ExtractHandler(Search->File, DestName);
+ }
+
+ /* find the starting block of the file
+ start with the first data block of the folder */
+ CFData = (PCFDATA)(CabinetFolders[Search->File->FolderIndex].DataOffset + FileBuffer);
+ CurrentOffset = 0;
+ while (CurrentOffset + CFData->UncompSize <= Search->File->FileOffset)
+ {
+ /* walk the data blocks until we reach
+ the one containing the start of the file */
+ CurrentOffset += CFData->UncompSize;
+ CFData = (PCFDATA)((char *)(CFData + 1) + DataReserved + CFData->CompSize);
+ }
+
+ /* now decompress and discard any data in
+ the block before the start of the file */
+
+ /* start of comp data */
+ CurrentBuffer = ((unsigned char *)(CFData + 1)) + DataReserved;
+ RemainingBlock = CFData->CompSize;
+ InputLength = RemainingBlock;
+
+ while (CurrentOffset < Search->File->FileOffset)
+ {
+ /* compute remaining uncomp bytes to start
+ of file, bounded by sizeof junk */
+ OutputLength = Search->File->FileOffset - CurrentOffset;
+ if (OutputLength > (LONG)sizeof(Junk))
+ OutputLength = sizeof (Junk);
+
+ /* negate to signal NOT end of block */
+ OutputLength = -OutputLength;
+ CodecUncompress(Junk, CurrentBuffer, &InputLength, &OutputLength);
+ /* add the uncomp bytes extracted to current folder offset */
+ CurrentOffset += OutputLength;
+ /* add comp bytes consumed to CurrentBuffer */
+ CurrentBuffer += InputLength;
+ /* subtract bytes consumed from bytes remaining in block */
+ RemainingBlock -= InputLength;
+ /* neg for resume decompression of the same block */
+ InputLength = -RemainingBlock;
+ }
+
+ /* now CurrentBuffer points to the first comp byte
+ of the file, so we can begin decompressing */
+
+ /* Size = remaining uncomp bytes of the file to decompress */
+ Size = Search->File->FileSize;
+ while (Size > 0)
+ {
+ OutputLength = Size;
+ DPRINT("Decompressing block at %x with RemainingBlock = %d, Size = %d\n",
+ CurrentBuffer, RemainingBlock, Size);
+
+ Status = CodecUncompress(CurrentDestBuffer,
+ CurrentBuffer,
+ &InputLength,
+ &OutputLength);
+
+ if (Status != CS_SUCCESS)
+ {
+ DPRINT("Cannot uncompress block\n");
+ if (Status == CS_NOMEMORY)
+ Status = CAB_STATUS_NOMEMORY;
+ Status = CAB_STATUS_INVALID_CAB;
+ goto UnmapDestFile;
+ }
+
+ /* advance dest buffer by bytes produced */
+ CurrentDestBuffer = (PVOID)((ULONG_PTR)CurrentDestBuffer + OutputLength);
+ /* advance src buffer by bytes consumed */
+ CurrentBuffer += InputLength;
+ /* reduce remaining file bytes by bytes produced */
+ Size -= OutputLength;
+ /* reduce remaining block size by bytes consumed */
+ RemainingBlock -= InputLength;
+ if (RemainingBlock == 0)
+ {
+ /* used up this block, move on to the next */
+ DPRINT("Out of block data\n");
+ CFData = (PCFDATA)CurrentBuffer;
+ RemainingBlock = CFData->CompSize;
+ CurrentBuffer = (unsigned char *)(CFData + 1) + DataReserved;
+ InputLength = RemainingBlock;
+ }
+ }
+
+ Status = CAB_STATUS_SUCCESS;
+
+UnmapDestFile:
+ NtUnmapViewOfSection(NtCurrentProcess(), DestFileBuffer);
+
+CloseDestFileSection:
+ NtClose(DestFileSection);
+
+CloseDestFile:
+ NtClose(DestFile);
+
+ return Status;
}
-
-VOID
-CabinetSelectCodec(ULONG Id)
/*
* FUNCTION: Selects codec engine to use
* ARGUMENTS:
* Id = Codec identifier
*/
+VOID
+CabinetSelectCodec(ULONG Id)
{
- if (CodecSelected)
+ if (CodecSelected)
{
- if (Id == CodecId)
- return;
+ if (Id == CodecId)
+ return;
- CodecSelected = FALSE;
+ CodecSelected = FALSE;
}
- switch (Id)
+ switch (Id)
{
- case CAB_CODEC_RAW:
- CodecUncompress = RawCodecUncompress;
- break;
- case CAB_CODEC_MSZIP:
- CodecUncompress = MSZipCodecUncompress;
- break;
- default:
- return;
+ case CAB_CODEC_RAW:
+ CodecUncompress = RawCodecUncompress;
+ break;
+ case CAB_CODEC_MSZIP:
+ CodecUncompress = MSZipCodecUncompress;
+ break;
+ default:
+ return;
}
- CodecId = Id;
- CodecSelected = TRUE;
+ CodecId = Id;
+ CodecSelected = TRUE;
}
-
-VOID
-CabinetSetEventHandlers(PCABINET_OVERWRITE Overwrite,
- PCABINET_EXTRACT Extract,
- PCABINET_DISK_CHANGE DiskChange)
/*
* FUNCTION: Set event handlers
* ARGUMENTS:
@@ -1117,33 +1160,38 @@ CabinetSetEventHandlers(PCABINET_OVERWRITE Overwrite,
* Extract = Handler called when a file is to be extracted
* DiskChange = Handler called when changing the disk
*/
+VOID
+CabinetSetEventHandlers(PCABINET_OVERWRITE Overwrite,
+ PCABINET_EXTRACT Extract,
+ PCABINET_DISK_CHANGE DiskChange)
{
- OverwriteHandler = Overwrite;
- ExtractHandler = Extract;
- DiskChangeHandler = DiskChange;
+ OverwriteHandler = Overwrite;
+ ExtractHandler = Extract;
+ DiskChangeHandler = DiskChange;
}
-
-PVOID
-CabinetGetCabinetReservedArea(PULONG Size)
/*
* FUNCTION: Get pointer to cabinet reserved area. NULL if none
*/
+PVOID
+CabinetGetCabinetReservedArea(PULONG Size)
{
- if (CabinetReservedArea != NULL)
+ if (CabinetReservedArea != NULL)
{
- if (Size != NULL)
+ if (Size != NULL)
{
- *Size = CabinetReserved;
+ *Size = CabinetReserved;
}
- return CabinetReservedArea;
+
+ return CabinetReservedArea;
}
- else
+ else
{
- if (Size != NULL)
+ if (Size != NULL)
{
- *Size = 0;
+ *Size = 0;
}
- return NULL;
+
+ return NULL;
}
}
diff --git a/reactos/base/setup/usetup/cabinet.h b/reactos/base/setup/usetup/cabinet.h
index 1a7884fd924..711a07f6ac2 100644
--- a/reactos/base/setup/usetup/cabinet.h
+++ b/reactos/base/setup/usetup/cabinet.h
@@ -4,8 +4,7 @@
* FILE: apps/cabman/cabinet.h
* PURPOSE: Cabinet definitions
*/
-#ifndef __CABINET_H
-#define __CABINET_H
+#pragma once
#include
@@ -204,5 +203,3 @@ VOID CabinetSetEventHandlers(PCABINET_OVERWRITE Overwrite,
PCABINET_DISK_CHANGE DiskChange);
/* Get pointer to cabinet reserved area. NULL if none */
PVOID CabinetGetCabinetReservedArea(PULONG Size);
-
-#endif /* __CABINET_H */
diff --git a/reactos/base/setup/usetup/chkdsk.h b/reactos/base/setup/usetup/chkdsk.h
index 79e21bdbfce..e21196b717d 100644
--- a/reactos/base/setup/usetup/chkdsk.h
+++ b/reactos/base/setup/usetup/chkdsk.h
@@ -23,14 +23,11 @@
* PROGRAMMER: Herv Poussineau (hpoussin@reactos.org)
*/
-#ifndef __CHKDSK_H__
-#define __CHKDSK_H__
+#pragma once
NTSTATUS
ChkdskPartition(
IN PUNICODE_STRING DriveRoot,
IN PFILE_SYSTEM_ITEM FileSystem);
-#endif /* __CHKDSK_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/drivesup.h b/reactos/base/setup/usetup/drivesup.h
index dd4b4192736..287b5a54e60 100644
--- a/reactos/base/setup/usetup/drivesup.h
+++ b/reactos/base/setup/usetup/drivesup.h
@@ -24,14 +24,11 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __DRIVESUP_H__
-#define __DRIVESUP_H__
+#pragma once
NTSTATUS
GetSourcePaths(PUNICODE_STRING SourcePath,
PUNICODE_STRING SourceRootPath,
PUNICODE_STRING SourceRootDir);
-#endif /* __DRIVESUP_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/errorcode.h b/reactos/base/setup/usetup/errorcode.h
index 90ce8ed6ffb..4ecc11d35d2 100644
--- a/reactos/base/setup/usetup/errorcode.h
+++ b/reactos/base/setup/usetup/errorcode.h
@@ -24,8 +24,7 @@
* PROGRAMMER:
*/
-#ifndef __ERROR_CODE_H__
-#define __ERROR_CODE_H__
+#pragma once
typedef enum
{
@@ -70,7 +69,4 @@ typedef enum
ERROR_LAST_ERROR_CODE
}ERROR_NUMBER;
-#endif /* __ERROR_CODE_H__ */
-
/* EOF */
-
diff --git a/reactos/base/setup/usetup/filequeue.h b/reactos/base/setup/usetup/filequeue.h
index 10eec8be767..28829a45fea 100644
--- a/reactos/base/setup/usetup/filequeue.h
+++ b/reactos/base/setup/usetup/filequeue.h
@@ -24,9 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __FILEQUEUE_H__
-#define __FILEQUEUE_H__
-
+#pragma once
#define SPFILENOTIFY_STARTQUEUE 0x1
#define SPFILENOTIFY_ENDQUEUE 0x2
@@ -104,6 +102,4 @@ SetupCommitFileQueueW(HWND Owner,
PSP_FILE_CALLBACK_W MsgHandler,
PVOID Context);
-#endif /* __FILEQUEUE_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/filesup.h b/reactos/base/setup/usetup/filesup.h
index 3ede70976e4..b7aecd8e622 100644
--- a/reactos/base/setup/usetup/filesup.h
+++ b/reactos/base/setup/usetup/filesup.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __FILESUP_H__
-#define __FILESUP_H__
+#pragma once
NTSTATUS
SetupCreateDirectory(PWCHAR DirectoryName);
@@ -43,7 +42,4 @@ BOOLEAN
DoesFileExist(PWSTR PathName,
PWSTR FileName);
-
-#endif /* __FILESUP_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/format.h b/reactos/base/setup/usetup/format.h
index 4e58c97ba93..d2784c16e61 100644
--- a/reactos/base/setup/usetup/format.h
+++ b/reactos/base/setup/usetup/format.h
@@ -24,14 +24,11 @@
* PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
*/
-#ifndef __FORMAT_H__
-#define __FORMAT_H__
+#pragma once
NTSTATUS
FormatPartition(
IN PUNICODE_STRING DriveRoot,
IN PFILE_SYSTEM_ITEM FileSystem);
-#endif /* __FILESUP_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/fslist.h b/reactos/base/setup/usetup/fslist.h
index 5ae59cd460b..1c84024eeec 100644
--- a/reactos/base/setup/usetup/fslist.h
+++ b/reactos/base/setup/usetup/fslist.h
@@ -24,8 +24,7 @@
* Casper S. Hornstrup (chorns@users.sourceforge.net)
*/
-#ifndef __FSLIST_H__
-#define __FSLIST_H__
+#pragma once
#include
@@ -76,6 +75,4 @@ VOID
ScrollUpFileSystemList(
IN PFILE_SYSTEM_LIST List);
-#endif /* __FSLIST_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/genlist.h b/reactos/base/setup/usetup/genlist.h
index 5d30d75d84c..fd5682c9819 100644
--- a/reactos/base/setup/usetup/genlist.h
+++ b/reactos/base/setup/usetup/genlist.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __GENLIST_H__
-#define __GENLIST_H__
+#pragma once
struct _GENERIC_LIST_ENTRY;
typedef struct _GENERIC_LIST_ENTRY *PGENERIC_LIST_ENTRY;
@@ -97,6 +96,4 @@ RestoreGenericListState(PGENERIC_LIST List);
VOID
GenericListKeyPress (PGENERIC_LIST List, CHAR AsciChar);
-#endif /* __GENLIST_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/inffile.h b/reactos/base/setup/usetup/inffile.h
index be4aabeb6e4..36c3bafeed4 100644
--- a/reactos/base/setup/usetup/inffile.h
+++ b/reactos/base/setup/usetup/inffile.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Herv Poussineau
*/
-#ifndef __INFFILE_H__
-#define __INFFILE_H__
+#pragma once
#ifndef __REACTOS__
@@ -115,6 +114,4 @@ INF_OpenBufferedFileA(
VOID INF_SetHeap(
IN PVOID Heap);
-#endif /* __INFFILE_H__*/
-
/* EOF */
diff --git a/reactos/base/setup/usetup/inicache.h b/reactos/base/setup/usetup/inicache.h
index 2596324b8ad..bd7dd33510c 100644
--- a/reactos/base/setup/usetup/inicache.h
+++ b/reactos/base/setup/usetup/inicache.h
@@ -25,9 +25,7 @@
* Eric Kohl
*/
-#ifndef __INICACHE_H__
-#define __INICACHE_H__
-
+#pragma once
typedef struct _INICACHEKEY
{
@@ -126,7 +124,4 @@ PINICACHESECTION
IniCacheAppendSection(PINICACHE Cache,
PWCHAR Name);
-
-#endif /* __INICACHE_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/interface/consup.h b/reactos/base/setup/usetup/interface/consup.h
index 7dc7d77531f..98be6dbf435 100644
--- a/reactos/base/setup/usetup/interface/consup.h
+++ b/reactos/base/setup/usetup/interface/consup.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __CONSUP_H__
-#define __CONSUP_H__
+#pragma once
#define FOREGROUND_WHITE (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define FOREGROUND_YELLOW (FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN)
@@ -187,6 +186,4 @@ CONSOLE_SetStyledText(
IN INT Flags,
IN LPCSTR Text);
-#endif /* __CONSOLE_H__*/
-
/* EOF */
diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c
index 0e0d2166a92..87df41628f9 100644
--- a/reactos/base/setup/usetup/interface/usetup.c
+++ b/reactos/base/setup/usetup/interface/usetup.c
@@ -1786,8 +1786,8 @@ CreatePartitionPage (PINPUT_RECORD Ir)
else
{
/* Round-up by cylinder size */
- PartSize = ROUND_UP (PartSize * 1024 * 1024,
- DiskEntry->CylinderSize);
+ PartSize = (PartSize * 1024 * 1024 + DiskEntry->CylinderSize - 1) /
+ DiskEntry->CylinderSize * DiskEntry->CylinderSize;
/* But never get larger than the unpartitioned disk space */
if (PartSize > PartEntry->UnpartitionedLength)
diff --git a/reactos/base/setup/usetup/lang/af-ZA.h b/reactos/base/setup/usetup/lang/af-ZA.h
index 7d706c9bf0b..53d9a03c96c 100644
--- a/reactos/base/setup/usetup/lang/af-ZA.h
+++ b/reactos/base/setup/usetup/lang/af-ZA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AF_ZA_H__
-#define LANG_AF_ZA_H__
+#pragma once
MUI_LAYOUTS afZALayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS afZALayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-AE.h b/reactos/base/setup/usetup/lang/ar-AE.h
index 006db05635e..82de046736a 100644
--- a/reactos/base/setup/usetup/lang/ar-AE.h
+++ b/reactos/base/setup/usetup/lang/ar-AE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_AE_H__
-#define LANG_AR_AE_H__
+#pragma once
MUI_LAYOUTS arAELayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arAELayouts[] =
{ L"3801", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-BH.h b/reactos/base/setup/usetup/lang/ar-BH.h
index 077483ffc15..4672e1fa81f 100644
--- a/reactos/base/setup/usetup/lang/ar-BH.h
+++ b/reactos/base/setup/usetup/lang/ar-BH.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_BH_H__
-#define LANG_AR_BH_H__
+#pragma once
MUI_LAYOUTS arBHLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arBHLayouts[] =
{ L"3C01", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-DZ.h b/reactos/base/setup/usetup/lang/ar-DZ.h
index 35b789a0904..b0e8ec96983 100644
--- a/reactos/base/setup/usetup/lang/ar-DZ.h
+++ b/reactos/base/setup/usetup/lang/ar-DZ.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_DZ_H__
-#define LANG_AR_DZ_H__
+#pragma once
MUI_LAYOUTS arDZLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arDZLayouts[] =
{ L"1401", L"00020401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-EG.h b/reactos/base/setup/usetup/lang/ar-EG.h
index 00a0afb448c..23488ed7cbe 100644
--- a/reactos/base/setup/usetup/lang/ar-EG.h
+++ b/reactos/base/setup/usetup/lang/ar-EG.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_EG_H__
-#define LANG_AR_EG_H__
+#pragma once
MUI_LAYOUTS arEGLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arEGLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-IQ.h b/reactos/base/setup/usetup/lang/ar-IQ.h
index 7640fe422b4..d0fb958c734 100644
--- a/reactos/base/setup/usetup/lang/ar-IQ.h
+++ b/reactos/base/setup/usetup/lang/ar-IQ.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_IQ_H__
-#define LANG_AR_IQ_H__
+#pragma once
MUI_LAYOUTS arIQLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arIQLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-JO.h b/reactos/base/setup/usetup/lang/ar-JO.h
index 997f64d6deb..cc5a4a1cb56 100644
--- a/reactos/base/setup/usetup/lang/ar-JO.h
+++ b/reactos/base/setup/usetup/lang/ar-JO.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_JO_H__
-#define LANG_AR_JO_H__
+#pragma once
MUI_LAYOUTS arJOLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arJOLayouts[] =
{ L"2C01", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-KW.h b/reactos/base/setup/usetup/lang/ar-KW.h
index 58f1823e107..d61d382decd 100644
--- a/reactos/base/setup/usetup/lang/ar-KW.h
+++ b/reactos/base/setup/usetup/lang/ar-KW.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_KW_H__
-#define LANG_AR_KW_H__
+#pragma once
MUI_LAYOUTS arKWLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arKWLayouts[] =
{ L"3401", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-LB.h b/reactos/base/setup/usetup/lang/ar-LB.h
index c4ae8956548..f43c6a66225 100644
--- a/reactos/base/setup/usetup/lang/ar-LB.h
+++ b/reactos/base/setup/usetup/lang/ar-LB.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_LB_H__
-#define LANG_AR_LB_H__
+#pragma once
MUI_LAYOUTS arLBLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arLBLayouts[] =
{ L"3001", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-LY.h b/reactos/base/setup/usetup/lang/ar-LY.h
index d06eebf0a89..8fdc9770889 100644
--- a/reactos/base/setup/usetup/lang/ar-LY.h
+++ b/reactos/base/setup/usetup/lang/ar-LY.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_LY_H__
-#define LANG_AR_LY_H__
+#pragma once
MUI_LAYOUTS arLYLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arLYLayouts[] =
{ L"1001", L"00020401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-MA.h b/reactos/base/setup/usetup/lang/ar-MA.h
index 47b8637f3b2..d6e056b9f5f 100644
--- a/reactos/base/setup/usetup/lang/ar-MA.h
+++ b/reactos/base/setup/usetup/lang/ar-MA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_MA_H__
-#define LANG_AR_MA_H__
+#pragma once
MUI_LAYOUTS arMALayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arMALayouts[] =
{ L"1801", L"00020401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-OM.h b/reactos/base/setup/usetup/lang/ar-OM.h
index ff49fc25127..183b32ee77b 100644
--- a/reactos/base/setup/usetup/lang/ar-OM.h
+++ b/reactos/base/setup/usetup/lang/ar-OM.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_OM_H__
-#define LANG_AR_OM_H__
+#pragma once
MUI_LAYOUTS arOMLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arOMLayouts[] =
{ L"2001", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-QA.h b/reactos/base/setup/usetup/lang/ar-QA.h
index c9e27ca5f70..bf6cb20f269 100644
--- a/reactos/base/setup/usetup/lang/ar-QA.h
+++ b/reactos/base/setup/usetup/lang/ar-QA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_QA_H__
-#define LANG_AR_QA_H__
+#pragma once
MUI_LAYOUTS arQALayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arQALayouts[] =
{ L"4001", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-SA.h b/reactos/base/setup/usetup/lang/ar-SA.h
index 541d9d713b6..403d2a008af 100644
--- a/reactos/base/setup/usetup/lang/ar-SA.h
+++ b/reactos/base/setup/usetup/lang/ar-SA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_SA_H__
-#define LANG_AR_SA_H__
+#pragma once
MUI_LAYOUTS arSALayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arSALayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-SY.h b/reactos/base/setup/usetup/lang/ar-SY.h
index 93dbe9b8583..8f4b9bb710e 100644
--- a/reactos/base/setup/usetup/lang/ar-SY.h
+++ b/reactos/base/setup/usetup/lang/ar-SY.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_SY_H__
-#define LANG_AR_SY_H__
+#pragma once
MUI_LAYOUTS arSYLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arSYLayouts[] =
{ L"2801", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-TN.h b/reactos/base/setup/usetup/lang/ar-TN.h
index 2d70266f965..051164872be 100644
--- a/reactos/base/setup/usetup/lang/ar-TN.h
+++ b/reactos/base/setup/usetup/lang/ar-TN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_TN_H__
-#define LANG_AR_TN_H__
+#pragma once
MUI_LAYOUTS arTNLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arTNLayouts[] =
{ L"1C01", L"00020401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ar-YE.h b/reactos/base/setup/usetup/lang/ar-YE.h
index eea30b10da3..19d029ee311 100644
--- a/reactos/base/setup/usetup/lang/ar-YE.h
+++ b/reactos/base/setup/usetup/lang/ar-YE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AR_YE_H__
-#define LANG_AR_YE_H__
+#pragma once
MUI_LAYOUTS arYELayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS arYELayouts[] =
{ L"2401", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/az-AZ.h b/reactos/base/setup/usetup/lang/az-AZ.h
index 8bee21d93a6..f2056baafe4 100644
--- a/reactos/base/setup/usetup/lang/az-AZ.h
+++ b/reactos/base/setup/usetup/lang/az-AZ.h
@@ -1,5 +1,4 @@
-#ifndef LANG_AZ_AZ_H__
-#define LANG_AZ_AZ_H__
+#pragma once
MUI_LAYOUTS azAZLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS azAZLayouts[] =
{ L"0419", L"00000419" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/be-BY.h b/reactos/base/setup/usetup/lang/be-BY.h
index f42248012b4..de08d3e0c15 100644
--- a/reactos/base/setup/usetup/lang/be-BY.h
+++ b/reactos/base/setup/usetup/lang/be-BY.h
@@ -1,5 +1,4 @@
-#ifndef LANG_BE_BY_H__
-#define LANG_BE_BY_H__
+#pragma once
MUI_LAYOUTS beBYLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS beBYLayouts[] =
{ L"0419", L"00000419" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/bg-BG.h b/reactos/base/setup/usetup/lang/bg-BG.h
index 612ccd99181..23bd1f4ebf3 100644
--- a/reactos/base/setup/usetup/lang/bg-BG.h
+++ b/reactos/base/setup/usetup/lang/bg-BG.h
@@ -1,5 +1,4 @@
-#ifndef LANG_BG_BG_H__
-#define LANG_BG_BG_H__
+#pragma once
MUI_LAYOUTS bgBGLayouts[] =
{
@@ -1706,5 +1705,3 @@ MUI_STRING bgBGStrings[] =
"ﭥ ୨ ।"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ca-ES.h b/reactos/base/setup/usetup/lang/ca-ES.h
index f8c006876c8..f2f6234ba0e 100644
--- a/reactos/base/setup/usetup/lang/ca-ES.h
+++ b/reactos/base/setup/usetup/lang/ca-ES.h
@@ -1,5 +1,4 @@
-#ifndef LANG_CA_ES_H__
-#define LANG_CA_ES_H__
+#pragma once
MUI_LAYOUTS caESLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS caESLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/cs-CZ.h b/reactos/base/setup/usetup/lang/cs-CZ.h
index d4521e253d0..b3397e14751 100644
--- a/reactos/base/setup/usetup/lang/cs-CZ.h
+++ b/reactos/base/setup/usetup/lang/cs-CZ.h
@@ -4,8 +4,7 @@
* UPDATED: 2008-06-05
*/
-#ifndef LANG_CS_CZ_H__
-#define LANG_CS_CZ_H__
+#pragma once
MUI_LAYOUTS csCZLayouts[] =
{
@@ -1702,5 +1701,3 @@ MUI_STRING csCZStrings[] =
"Pidvm rozloen klves"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/da-DK.h b/reactos/base/setup/usetup/lang/da-DK.h
index a160ad71cd1..627064a4992 100644
--- a/reactos/base/setup/usetup/lang/da-DK.h
+++ b/reactos/base/setup/usetup/lang/da-DK.h
@@ -1,5 +1,4 @@
-#ifndef LANG_DA_DK_H__
-#define LANG_DA_DK_H__
+#pragma once
MUI_LAYOUTS daDKLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS daDKLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/de-AT.h b/reactos/base/setup/usetup/lang/de-AT.h
index 3c86dfc0092..289c2080fcc 100644
--- a/reactos/base/setup/usetup/lang/de-AT.h
+++ b/reactos/base/setup/usetup/lang/de-AT.h
@@ -1,5 +1,4 @@
-#ifndef LANG_DE_AT_H__
-#define LANG_DE_AT_H__
+#pragma once
MUI_LAYOUTS deATLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS deATLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/de-CH.h b/reactos/base/setup/usetup/lang/de-CH.h
index a217cd86b9c..de472e6c532 100644
--- a/reactos/base/setup/usetup/lang/de-CH.h
+++ b/reactos/base/setup/usetup/lang/de-CH.h
@@ -1,5 +1,4 @@
-#ifndef LANG_DE_CH_H__
-#define LANG_DE_CH_H__
+#pragma once
MUI_LAYOUTS deCHLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS deCHLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/de-DE.h b/reactos/base/setup/usetup/lang/de-DE.h
index 570f2147761..e21b2ffc001 100644
--- a/reactos/base/setup/usetup/lang/de-DE.h
+++ b/reactos/base/setup/usetup/lang/de-DE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_DE_DE_H__
-#define LANG_DE_DE_H__
+#pragma once
MUI_LAYOUTS deDELayouts[] =
{
@@ -65,13 +64,13 @@ static MUI_ENTRY deDEWelcomePageEntries[] =
{
6,
8,
- "Willkommen zum ReactOS Setup",
+ "Willkommen zum ReactOS-Setup",
TEXT_STYLE_HIGHLIGHT
},
{
6,
11,
- "Dieser Teil des Setups kopiert das ReactOS Betriebssystem auf Ihren",
+ "Dieser Teil des Setups kopiert das ReactOS-Betriebssystem auf Ihren",
TEXT_STYLE_NORMAL
},
{
@@ -107,7 +106,7 @@ static MUI_ENTRY deDEWelcomePageEntries[] =
{
6,
23,
- "Fr weitere Informationen, besuchen Sie bitte:",
+ "Fr weitere Informationen besuchen Sie bitte:",
TEXT_STYLE_NORMAL
},
{
@@ -141,7 +140,7 @@ static MUI_ENTRY deDEIntroPageEntries[] =
{
6,
8,
- "Das ReactOS Setup ist noch in einer frhen Entwicklungsphase. Es unter-",
+ "Das ReactOS-Setup ist noch in einer frhen Entwicklungsphase. Es unter-",
TEXT_STYLE_NORMAL
},
{
@@ -165,7 +164,7 @@ static MUI_ENTRY deDEIntroPageEntries[] =
{
8,
14,
- "- Setup kann keine primre Partition von einer HDD lschen",
+ "- Setup kann keine primre Partition von einer HDD lschen,",
TEXT_STYLE_NORMAL
},
{
@@ -177,7 +176,7 @@ static MUI_ENTRY deDEIntroPageEntries[] =
{
8,
16,
- "- Setup kann die erste erweiterte Partition nicht von der HDD lschen",
+ "- Setup kann die erste erweiterte Partition nicht von der HDD lschen,",
TEXT_STYLE_NORMAL
},
{
@@ -189,7 +188,7 @@ static MUI_ENTRY deDEIntroPageEntries[] =
{
8,
18,
- "- Setup untersttzt nur FAT Dateisysteme.",
+ "- Setup untersttzt nur FAT-Dateisysteme.",
TEXT_STYLE_NORMAL
},
{
@@ -406,7 +405,7 @@ static MUI_ENTRY deDEDevicePageEntries[] =
{
6,
20,
- "Dann drcken Sie die Eingabetaste, um eine Einstellung abzundern.",
+ "Dann drcken Sie die Eingabetaste, um eine Einstellung zu ndern.",
TEXT_STYLE_NORMAL
},
{
@@ -452,7 +451,7 @@ static MUI_ENTRY deDERepairPageEntries[] =
{
6,
8,
- "Das ReactOS Setup ist noch in einer frhen Entwicklungsphase. Es unter-",
+ "Das ReactOS-Setup ist noch in einer frhen Entwicklungsphase. Es unter-",
TEXT_STYLE_NORMAL
},
{
@@ -488,7 +487,7 @@ static MUI_ENTRY deDERepairPageEntries[] =
{
8,
21,
- "\x07 Drcken Sie ENTER, um den Computer neuzustarten.",
+ "\x07 Drcken Sie ENTER, um den Computer neu zu starten.",
TEXT_STYLE_NORMAL
},
{
@@ -579,7 +578,7 @@ static MUI_ENTRY deDEFlushPageEntries[] =
{
10,
9,
- "Der PC wird automatisch neustarten, wenn der Vorgang beendet ist.",
+ "Der PC wird automatisch neunstarten, wenn der Vorgang beendet ist.",
TEXT_STYLE_NORMAL
},
{
@@ -895,7 +894,7 @@ static MUI_ENTRY deDEInstallDirectoryEntries[] =
{
6,
8,
- "Setup installiert die ReactOS Installationsdateien in die ausgewhlte",
+ "Setup installiert die ReactOS-Installationsdateien in die ausgewhlte",
TEXT_STYLE_NORMAL
},
{
@@ -907,13 +906,13 @@ static MUI_ENTRY deDEInstallDirectoryEntries[] =
{
6,
14,
- "Um den Vorschlag zu ndern drcken sie die 'Entf' Taste um",
+ "Um den Vorschlag zu ndern drcken sie die 'Entf'-Taste, um",
TEXT_STYLE_NORMAL
},
{
6,
15,
- "Zeichen zu lschen und gegeben sie dann den Namen des Verzeichnis ein",
+ "Zeichen zu lschen, und geben sie dann den Namen des Verzeichnis ein",
TEXT_STYLE_NORMAL
},
{
@@ -941,7 +940,7 @@ static MUI_ENTRY deDEFileCopyEntries[] =
{
0,
12,
- "Bitte warten Sie whrend ReactOS Setup die ReactOS Dateien",
+ "Bitte warten Sie, whrend das ReactOS-Setup die ReactOS-Dateien",
TEXT_STYLE_NORMAL | TEXT_ALIGN_CENTER
},
{
@@ -987,7 +986,7 @@ static MUI_ENTRY deDEBootLoaderEntries[] =
{
8,
12,
- "Boot-Loader auf der Festplatte installieren (Boot-Sektor).",
+ "Boot-Loader auf der Festplatte installieren (Bootsektor).",
TEXT_STYLE_NORMAL
},
{
@@ -1079,7 +1078,7 @@ static MUI_ENTRY deDELayoutSettingsEntries[] =
{
6,
8,
- "Bitte whlen Sie ein zu installierendes Standard Layout.",
+ "Bitte whlen Sie ein zu installierendes Standardlayout aus.",
TEXT_STYLE_NORMAL
},
{
@@ -1161,7 +1160,7 @@ static MUI_ENTRY deDESelectFSEntries[] =
{
6,
17,
- "Whlen Sie ein Dateisystem von der folgenden Liste.",
+ "Whlen Sie ein Dateisystem aus der folgenden Liste aus.",
0
},
{
@@ -1208,7 +1207,7 @@ static MUI_ENTRY deDEDeletePartitionEntries[] =
{
6,
8,
- "Sie haben sich entschieden diese Partition zu lschen",
+ "Sie haben sich entschieden, diese Partition zu lschen",
TEXT_STYLE_NORMAL
},
{
@@ -1260,7 +1259,7 @@ static MUI_ENTRY deDERegistryEntries[] =
{
0,
0,
- "Registry Hives erstellen...",
+ "Registryzweige erstellen...",
TEXT_TYPE_STATUS | TEXT_PADDING_BIG
},
{
@@ -1287,62 +1286,62 @@ MUI_ERROR deDEErrorEntries[] =
{
//ERROR_NO_HDD
"Setup konnte keine Festplatte finden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_NO_SOURCE_DRIVE
"Setup konnte das Quelllaufwerk nicht finden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_LOAD_TXTSETUPSIF
"Setup konnte TXTSETUP.SIF nicht finden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_CORRUPT_TXTSETUPSIF
- "Setup fand eine korrupte TXTSETUP.SIF.\n",
- "ENTER = Computer neustarten"
+ "Setup fand eine defekte TXTSETUP.SIF.\n",
+ "ENTER = Computer neu starten"
},
{
//ERROR_SIGNATURE_TXTSETUPSIF,
"Setup fand eine ungltige Signatur in TXTSETUP.SIF.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_DRIVE_INFORMATION
"Setup konnte keine Laufwerksinformationen abfragen.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_WRITE_BOOT,
- "Setup konnte den FAT Bootcode nicht auf der Partition installieren.",
- "ENTER = Computer neustarten"
+ "Setup konnte den FAT-Bootcode nicht auf der Partition installieren.",
+ "ENTER = Computer neu starten"
},
{
//ERROR_LOAD_COMPUTER,
"Setup konnte die Computertypenliste nicht laden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_LOAD_DISPLAY,
"Setup konnte die Displayeinstellungsliste nicht laden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_LOAD_KEYBOARD,
"Setup konnte die Tastaturtypenliste nicht laden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_LOAD_KBLAYOUT,
"Setup konnte die Tastaturlayoutliste nicht laden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_WARN_PARTITION,
"Setup hat mindestens eine Festplatte mit einer inkompatiblen Partitionstabelle\n"
- "welche nicht richtig verwendet werden knnen!\n"
+ "gefunden, die nicht richtig verwendet werden kann!\n"
"\n"
"Partitionen zu erstellen/lschen kann die Partitionstabelle zerstren.\n"
"\n"
@@ -1367,8 +1366,8 @@ MUI_ERROR deDEErrorEntries[] =
},
{
//ERROR_INSTALL_BOOTCODE,
- "Setup konnte den FAT Bootcode nicht auf der Partition installieren.",
- "ENTER = Computer neustarten"
+ "Setup konnte den FAT-Bootcode nicht auf der Partition installieren.",
+ "ENTER = Computer neu starten"
},
{
//ERROR_NO_FLOPPY,
@@ -1378,105 +1377,105 @@ MUI_ERROR deDEErrorEntries[] =
{
//ERROR_UPDATE_KBSETTINGS,
"Setup konnte das Tastaturlayout nicht aktualisieren.",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_UPDATE_DISPLAY_SETTINGS,
"Setup konnte die Display-Registrywerte nicht aktualisieren.",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_IMPORT_HIVE,
- "Setup konnte keine Hive Datei importieren.",
- "ENTER = Computer neustarten"
+ "Setup konnte keine Hive-Datei importieren.",
+ "ENTER = Computer neu starten"
},
{
//ERROR_FIND_REGISTRY
"Setup konnte die Registrydateien nicht finden.",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_CREATE_HIVE,
- "Setup konnte die Registry-Hives nicht erstellen.",
- "ENTER = Computer neustarten"
+ "Setup konnte die Registryzweige nicht erstellen.",
+ "ENTER = Computer neu starten"
},
{
//ERROR_INITIALIZE_REGISTRY,
"Setup konnte die Registry nicht initialisieren.",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_INVALID_CABINET_INF,
- "Cabinet hat keine gltige .inf Datei.\n",
- "ENTER = Computer neustarten"
+ "Cabinet hat keine gltige .inf-Datei.\n",
+ "ENTER = Computer neu starten"
},
{
//ERROR_CABINET_MISSING,
"Cabinet nicht gefunden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_CABINET_SCRIPT,
- "Cabinet enthlt kein Setup Skript.\n",
- "ENTER = Computer neustarten"
+ "Cabinet enthlt kein Setup-Skript.\n",
+ "ENTER = Computer neu starten"
},
{
//ERROR_COPY_QUEUE,
"Setup konnte die Liste mit zu kopierenden Dateien nicht finden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_CREATE_DIR,
"Setup konnte die Installationspfade nicht erstellen.",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_TXTSETUP_SECTION,
- "Setup konnte die 'Ordner' Sektion in\n"
+ "Setup konnte die 'Ordner'-Sektion in\n"
"TXTSETUP.SIF nicht finden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_CABINET_SECTION,
- "Setup konnte die 'Ordner' Sektion im\n"
+ "Setup konnte die 'Ordner'-Sektion im\n"
"Cabinet nicht finden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_CREATE_INSTALL_DIR
"Setup konnte den Installationspfad nicht erstellen.",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_FIND_SETUPDATA,
- "Setup konnte die 'SetupData' Sektion in\n"
+ "Setup konnte die 'SetupData'-Sektion in\n"
"TXTSETUP.SIF nicht finden.\n",
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_WRITE_PTABLE,
"Setup konnte die Partitionstabellen nicht schreiben.\n"
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_ADDING_CODEPAGE,
- "Setup konnte den CodePage-Eintrag nicht hinzufgen.\n"
- "ENTER = Computer neustarten"
+ "Setup konnte den Codepage-Eintrag nicht hinzufgen.\n"
+ "ENTER = Computer neu starten"
},
{
//ERROR_UPDATE_LOCALESETTINGS,
"Setup konnte die Systemsprache nicht einstellen.\n"
- "ENTER = Computer neustarten"
+ "ENTER = Computer neu starten"
},
{
//ERROR_ADDING_KBLAYOUTS,
- "Setup konnte die Tastaturlayouts nicht in Registry eintragen.\n"
- "ENTER = Computer neustarten"
+ "Setup konnte die Tastaturlayouts nicht in der Registry eintragen.\n"
+ "ENTER = Computer neu starten"
},
{
//ERROR_UPDATE_GEOID,
- "Setup konnte den geographischen Standort nicht einstellen.\n"
- "ENTER = Computer neustarten"
+ "Setup konnte den geografischen Standort nicht einstellen.\n"
+ "ENTER = Computer neu starten"
},
{
NULL,
@@ -1596,7 +1595,7 @@ MUI_STRING deDEStrings[] =
{STRING_PARTITIONSIZE,
"Gre der neuen Partition:"},
{STRING_CHOOSENEWPARTITION,
- "Sie haben beschlossen eine neue Partition zu erstellen auf"},
+ "Sie haben beschlossen, eine neue Partition zu erstellen auf"},
{STRING_HDDSIZE,
"Bitte geben Sie die Gre der neuen Partition in Megabyte ein."},
{STRING_CREATEPARTITION,
@@ -1606,21 +1605,21 @@ MUI_STRING deDEStrings[] =
{STRING_NONFORMATTEDPART,
"Sie wollen ReactOS auf einer neuen/unformatieren Partition installieren."},
{STRING_INSTALLONPART,
- "Setup installiert ReactOS auf diese Partition"},
+ "Setup installiert ReactOS auf dieser Partition"},
{STRING_CHECKINGPART,
"Setup berprft die ausgewhlte Partition."},
{STRING_QUITCONTINUE,
"F3 = Beenden ENTER = Fortsetzen"},
{STRING_REBOOTCOMPUTER,
- "ENTER = Computer neustarten"},
+ "ENTER = Computer neu starten"},
{STRING_TXTSETUPFAILED,
- "Setup konnte die '%S' Sektion\nin TXTSETUP.SIF nicht finden.\n"},
+ "Setup konnte die '%S'-Sektion\nin TXTSETUP.SIF nicht finden.\n"},
{STRING_COPYING,
"\xB3 Kopiere Datei: %S"},
{STRING_SETUPCOPYINGFILES,
"Setup kopiert Dateien..."},
{STRING_REGHIVEUPDATE,
- " Registry hives werden aktualisiert..."},
+ " Registryzweige werden aktualisiert..."},
{STRING_IMPORTFILE,
" Importiere %S..."},
{STRING_DISPLAYETTINGSUPDATE,
@@ -1628,27 +1627,27 @@ MUI_STRING deDEStrings[] =
{STRING_LOCALESETTINGSUPDATE,
" Lokalisierungseinstellungen werden aktualisiert..."},
{STRING_KEYBOARDSETTINGSUPDATE,
- " Tastaturlayout Einstellungen werden aktualisiert..."},
+ " Tastaturlayouteinstellungen werden aktualisiert..."},
{STRING_CODEPAGEINFOUPDATE,
- " Codepage Informationen werden hinzugefgt..."},
+ " Codepage-Informationen werden hinzugefgt..."},
{STRING_DONE,
" Fertig..."},
{STRING_REBOOTCOMPUTER2,
- " ENTER = Computer neustarten"},
+ " ENTER = Computer neu starten"},
{STRING_CONSOLEFAIL1,
"Konsole konnte nicht geffnet werden\n\n"},
{STRING_CONSOLEFAIL2,
- "Der hufigste Grund hierfr ist die Verwendung einer USB Tastautur\n"},
+ "Der hufigste Grund hierfr ist die Verwendung einer USB-Tastatur\n"},
{STRING_CONSOLEFAIL3,
- "USB Tastaturen werden noch nicht vollstndig untersttzt\n"},
+ "USB-Tastaturen werden noch nicht vollstndig untersttzt\n"},
{STRING_FORMATTINGDISK,
"Setup formatiert Ihre Festplatte"},
{STRING_CHECKINGDISK,
"Setup berprft Ihre Festplatte"},
{STRING_FORMATDISK1,
- " Formatiere Partition als %S Dateisystem (Schnell) "},
+ " Formatiere Partition als %S-Dateisystem (Schnell) "},
{STRING_FORMATDISK2,
- " Formatiere Partition als %S Dateisystem "},
+ " Formatiere Partition als %S-Dateisystem "},
{STRING_KEEPFORMAT,
" Dateisystem beibehalten (Keine Vernderungen) "},
{STRING_HDINFOPARTCREATE,
@@ -1695,5 +1694,3 @@ MUI_STRING deDEStrings[] =
"Tastaturlayout hinzufgen"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/de-LI.h b/reactos/base/setup/usetup/lang/de-LI.h
index b34c6834287..425688ee1c0 100644
--- a/reactos/base/setup/usetup/lang/de-LI.h
+++ b/reactos/base/setup/usetup/lang/de-LI.h
@@ -1,5 +1,4 @@
-#ifndef LANG_DE_LI_H__
-#define LANG_DE_LI_H__
+#pragma once
MUI_LAYOUTS deLILayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS deLILayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/de-LU.h b/reactos/base/setup/usetup/lang/de-LU.h
index 2c7f683b575..21956e9ff24 100644
--- a/reactos/base/setup/usetup/lang/de-LU.h
+++ b/reactos/base/setup/usetup/lang/de-LU.h
@@ -1,5 +1,4 @@
-#ifndef LANG_DE_LU_H__
-#define LANG_DE_LU_H__
+#pragma once
MUI_LAYOUTS deLULayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS deLULayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/dv-MV.h b/reactos/base/setup/usetup/lang/dv-MV.h
index 90f33c4c490..b96b1e2fda2 100644
--- a/reactos/base/setup/usetup/lang/dv-MV.h
+++ b/reactos/base/setup/usetup/lang/dv-MV.h
@@ -1,5 +1,4 @@
-#ifndef LANG_DV_MV_H__
-#define LANG_DV_MV_H__
+#pragma once
MUI_LAYOUTS dvMVLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS dvMVLayouts[] =
{ L"0465", L"00000465" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/el-GR.h b/reactos/base/setup/usetup/lang/el-GR.h
index 861bae50902..e04f530f674 100644
--- a/reactos/base/setup/usetup/lang/el-GR.h
+++ b/reactos/base/setup/usetup/lang/el-GR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_EL_GR_H__
-#define LANG_EL_GR_H__
+#pragma once
MUI_LAYOUTS elGRLayouts[] =
{
@@ -1724,5 +1723,3 @@ MUI_STRING elGRStrings[] =
"夜 㡞 ᥜ 妬"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-AU.h b/reactos/base/setup/usetup/lang/en-AU.h
index 2e50aa9ff68..ffa3b865e83 100644
--- a/reactos/base/setup/usetup/lang/en-AU.h
+++ b/reactos/base/setup/usetup/lang/en-AU.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_AU_H__
-#define LANG_EN_AU_H__
+#pragma once
MUI_LAYOUTS enAULayouts[] =
{
{ L"0C09", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-BZ.h b/reactos/base/setup/usetup/lang/en-BZ.h
index 09c3d52aa85..4c34df80e4e 100644
--- a/reactos/base/setup/usetup/lang/en-BZ.h
+++ b/reactos/base/setup/usetup/lang/en-BZ.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_BZ_H__
-#define LANG_EN_BZ_H__
+#pragma once
MUI_LAYOUTS enBZLayouts[] =
{
{ L"2809", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-CA.h b/reactos/base/setup/usetup/lang/en-CA.h
index 3c50f83d03a..98000aed71a 100644
--- a/reactos/base/setup/usetup/lang/en-CA.h
+++ b/reactos/base/setup/usetup/lang/en-CA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_EN_CA_H__
-#define LANG_EN_CA_H__
+#pragma once
MUI_LAYOUTS enCALayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS enCALayouts[] =
{ L"1009", L"00001009" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-CB.h b/reactos/base/setup/usetup/lang/en-CB.h
index 6dd41f4359d..e014b335b87 100644
--- a/reactos/base/setup/usetup/lang/en-CB.h
+++ b/reactos/base/setup/usetup/lang/en-CB.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_CB_H__
-#define LANG_EN_CB_H__
+#pragma once
MUI_LAYOUTS enCBLayouts[] =
{
{ L"2409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-GB.h b/reactos/base/setup/usetup/lang/en-GB.h
index e147fb794c1..58fe5034d9e 100644
--- a/reactos/base/setup/usetup/lang/en-GB.h
+++ b/reactos/base/setup/usetup/lang/en-GB.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_GB_H__
-#define LANG_EN_GB_H__
+#pragma once
MUI_LAYOUTS enGBLayouts[] =
{
{ L"0809", L"00000809" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-IE.h b/reactos/base/setup/usetup/lang/en-IE.h
index db9ee2462e8..e41db1e4184 100644
--- a/reactos/base/setup/usetup/lang/en-IE.h
+++ b/reactos/base/setup/usetup/lang/en-IE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_EN_IE_H__
-#define LANG_EN_IE_H__
+#pragma once
MUI_LAYOUTS enIELayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS enIELayouts[] =
{ L"1809", L"00011809" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-JM.h b/reactos/base/setup/usetup/lang/en-JM.h
index a7122f4403e..0b9567609ae 100644
--- a/reactos/base/setup/usetup/lang/en-JM.h
+++ b/reactos/base/setup/usetup/lang/en-JM.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_JM_H__
-#define LANG_EN_JM_H__
+#pragma once
MUI_LAYOUTS enJMLayouts[] =
{
{ L"2009", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-NZ.h b/reactos/base/setup/usetup/lang/en-NZ.h
index 241d8ef732a..33eb865810a 100644
--- a/reactos/base/setup/usetup/lang/en-NZ.h
+++ b/reactos/base/setup/usetup/lang/en-NZ.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_NZ_H__
-#define LANG_EN_NZ_H__
+#pragma once
MUI_LAYOUTS enNZLayouts[] =
{
{ L"1409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-PH.h b/reactos/base/setup/usetup/lang/en-PH.h
index b525130dd0e..88273d280ad 100644
--- a/reactos/base/setup/usetup/lang/en-PH.h
+++ b/reactos/base/setup/usetup/lang/en-PH.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_PH_H__
-#define LANG_EN_PH_H__
+#pragma once
MUI_LAYOUTS enPHLayouts[] =
{
{ L"3409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-TT.h b/reactos/base/setup/usetup/lang/en-TT.h
index e6866273f54..e167cfc103a 100644
--- a/reactos/base/setup/usetup/lang/en-TT.h
+++ b/reactos/base/setup/usetup/lang/en-TT.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_TT_H__
-#define LANG_EN_TT_H__
+#pragma once
MUI_LAYOUTS enTTLayouts[] =
{
{ L"2C09", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-US.h b/reactos/base/setup/usetup/lang/en-US.h
index 34d9d892b4f..ac694c98c54 100644
--- a/reactos/base/setup/usetup/lang/en-US.h
+++ b/reactos/base/setup/usetup/lang/en-US.h
@@ -1,5 +1,4 @@
-#ifndef LANG_EN_US_H__
-#define LANG_EN_US_H__
+#pragma once
MUI_LAYOUTS enUSLayouts[] =
{
@@ -1693,5 +1692,3 @@ MUI_STRING enUSStrings[] =
"Adding keyboard layouts"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-ZA.h b/reactos/base/setup/usetup/lang/en-ZA.h
index cf5d1f3e1c5..59ceabf5019 100644
--- a/reactos/base/setup/usetup/lang/en-ZA.h
+++ b/reactos/base/setup/usetup/lang/en-ZA.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_ZA_H__
-#define LANG_EN_ZA_H__
+#pragma once
MUI_LAYOUTS enZALayouts[] =
{
{ L"1C09", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/en-ZW.h b/reactos/base/setup/usetup/lang/en-ZW.h
index 23dabb7db62..917bd6c9e91 100644
--- a/reactos/base/setup/usetup/lang/en-ZW.h
+++ b/reactos/base/setup/usetup/lang/en-ZW.h
@@ -1,10 +1,7 @@
-#ifndef LANG_EN_ZW_H__
-#define LANG_EN_ZW_H__
+#pragma once
MUI_LAYOUTS enZWLayouts[] =
{
{ L"3009", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/eo-AA.h b/reactos/base/setup/usetup/lang/eo-AA.h
index 15c7c992c67..3b72dcf961d 100644
--- a/reactos/base/setup/usetup/lang/eo-AA.h
+++ b/reactos/base/setup/usetup/lang/eo-AA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_EO_AA_H__
-#define LANG_EO_AA_H__
+#pragma once
MUI_LAYOUTS eoAALayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS eoAALayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-AR.h b/reactos/base/setup/usetup/lang/es-AR.h
index c427b8d4065..4e36f4aa278 100644
--- a/reactos/base/setup/usetup/lang/es-AR.h
+++ b/reactos/base/setup/usetup/lang/es-AR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_AR_H__
-#define LANG_ES_AR_H__
+#pragma once
MUI_LAYOUTS esARLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esARLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-BO.h b/reactos/base/setup/usetup/lang/es-BO.h
index 69e4957b56a..f7e210d1283 100644
--- a/reactos/base/setup/usetup/lang/es-BO.h
+++ b/reactos/base/setup/usetup/lang/es-BO.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_BO_H__
-#define LANG_ES_BO_H__
+#pragma once
MUI_LAYOUTS esBOLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esBOLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-CL.h b/reactos/base/setup/usetup/lang/es-CL.h
index 1222675ed71..88704431994 100644
--- a/reactos/base/setup/usetup/lang/es-CL.h
+++ b/reactos/base/setup/usetup/lang/es-CL.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_CL_H__
-#define LANG_ES_CL_H__
+#pragma once
MUI_LAYOUTS esCLLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esCLLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-CO.h b/reactos/base/setup/usetup/lang/es-CO.h
index 9e6e569f39f..3b36be43327 100644
--- a/reactos/base/setup/usetup/lang/es-CO.h
+++ b/reactos/base/setup/usetup/lang/es-CO.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_CO_H__
-#define LANG_ES_CO_H__
+#pragma once
MUI_LAYOUTS esCOLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esCOLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-CR.h b/reactos/base/setup/usetup/lang/es-CR.h
index d66e39f29cc..eff1db06fba 100644
--- a/reactos/base/setup/usetup/lang/es-CR.h
+++ b/reactos/base/setup/usetup/lang/es-CR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_CR_H__
-#define LANG_ES_CR_H__
+#pragma once
MUI_LAYOUTS esCRLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esCRLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-DO.h b/reactos/base/setup/usetup/lang/es-DO.h
index 5a474dc34ae..3987c8c7317 100644
--- a/reactos/base/setup/usetup/lang/es-DO.h
+++ b/reactos/base/setup/usetup/lang/es-DO.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_DO_H__
-#define LANG_ES_DO_H__
+#pragma once
MUI_LAYOUTS esDOLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esDOLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-EC.h b/reactos/base/setup/usetup/lang/es-EC.h
index 9627211c702..ea54ab71312 100644
--- a/reactos/base/setup/usetup/lang/es-EC.h
+++ b/reactos/base/setup/usetup/lang/es-EC.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_EC_H__
-#define LANG_ES_EC_H__
+#pragma once
MUI_LAYOUTS esECLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esECLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-ES.h b/reactos/base/setup/usetup/lang/es-ES.h
index ef516888c13..d951d6b564f 100644
--- a/reactos/base/setup/usetup/lang/es-ES.h
+++ b/reactos/base/setup/usetup/lang/es-ES.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_ES_H__
-#define LANG_ES_ES_H__
+#pragma once
MUI_LAYOUTS esESLayouts[] =
{
@@ -1694,5 +1693,3 @@ MUI_STRING esESStrings[] =
"Adding keyboard layouts"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-GT.h b/reactos/base/setup/usetup/lang/es-GT.h
index 184f57a53ea..5d99a5de347 100644
--- a/reactos/base/setup/usetup/lang/es-GT.h
+++ b/reactos/base/setup/usetup/lang/es-GT.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_GT_H__
-#define LANG_ES_GT_H__
+#pragma once
MUI_LAYOUTS esGTLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esGTLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-HN.h b/reactos/base/setup/usetup/lang/es-HN.h
index 7564bc6a701..14d5ab9f6af 100644
--- a/reactos/base/setup/usetup/lang/es-HN.h
+++ b/reactos/base/setup/usetup/lang/es-HN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_HN_H__
-#define LANG_ES_HN_H__
+#pragma once
MUI_LAYOUTS esHNLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esHNLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-MX.h b/reactos/base/setup/usetup/lang/es-MX.h
index 0ebe7fc9463..da0bd621d22 100644
--- a/reactos/base/setup/usetup/lang/es-MX.h
+++ b/reactos/base/setup/usetup/lang/es-MX.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_MX_H__
-#define LANG_ES_MX_H__
+#pragma once
MUI_LAYOUTS esMXLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esMXLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-NI.h b/reactos/base/setup/usetup/lang/es-NI.h
index cf9142a00b6..c570367d9b1 100644
--- a/reactos/base/setup/usetup/lang/es-NI.h
+++ b/reactos/base/setup/usetup/lang/es-NI.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_NI_H__
-#define LANG_ES_NI_H__
+#pragma once
MUI_LAYOUTS esNILayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esNILayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-PA.h b/reactos/base/setup/usetup/lang/es-PA.h
index 38693e8bfe3..81bf70c1c98 100644
--- a/reactos/base/setup/usetup/lang/es-PA.h
+++ b/reactos/base/setup/usetup/lang/es-PA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_PA_H__
-#define LANG_ES_PA_H__
+#pragma once
MUI_LAYOUTS esPALayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esPALayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-PE.h b/reactos/base/setup/usetup/lang/es-PE.h
index 97090ac930d..970402bcf96 100644
--- a/reactos/base/setup/usetup/lang/es-PE.h
+++ b/reactos/base/setup/usetup/lang/es-PE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_PE_H__
-#define LANG_ES_PE_H__
+#pragma once
MUI_LAYOUTS esPELayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esPELayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-PR.h b/reactos/base/setup/usetup/lang/es-PR.h
index 02492dc3ae3..e9acb60cac3 100644
--- a/reactos/base/setup/usetup/lang/es-PR.h
+++ b/reactos/base/setup/usetup/lang/es-PR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_PR_H__
-#define LANG_ES_PR_H__
+#pragma once
MUI_LAYOUTS esPRLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esPRLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-PY.h b/reactos/base/setup/usetup/lang/es-PY.h
index f5c476e8482..640d700b70c 100644
--- a/reactos/base/setup/usetup/lang/es-PY.h
+++ b/reactos/base/setup/usetup/lang/es-PY.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_PY_H__
-#define LANG_ES_PY_H__
+#pragma once
MUI_LAYOUTS esPYLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esPYLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-SV.h b/reactos/base/setup/usetup/lang/es-SV.h
index d2f96b73715..18a8c9c4f93 100644
--- a/reactos/base/setup/usetup/lang/es-SV.h
+++ b/reactos/base/setup/usetup/lang/es-SV.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_SV_H__
-#define LANG_ES_SV_H__
+#pragma once
MUI_LAYOUTS esSVLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esSVLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-UY.h b/reactos/base/setup/usetup/lang/es-UY.h
index b8ae8d1780c..a007b24c39f 100644
--- a/reactos/base/setup/usetup/lang/es-UY.h
+++ b/reactos/base/setup/usetup/lang/es-UY.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_UY_H__
-#define LANG_ES_UY_H__
+#pragma once
MUI_LAYOUTS esUYLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esUYLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/es-VE.h b/reactos/base/setup/usetup/lang/es-VE.h
index 57cca1d66bb..46baa1c6f0b 100644
--- a/reactos/base/setup/usetup/lang/es-VE.h
+++ b/reactos/base/setup/usetup/lang/es-VE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ES_VE_H__
-#define LANG_ES_VE_H__
+#pragma once
MUI_LAYOUTS esVELayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS esVELayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/et-EE.h b/reactos/base/setup/usetup/lang/et-EE.h
index 29bbd51ca6e..4a1f7bda62b 100644
--- a/reactos/base/setup/usetup/lang/et-EE.h
+++ b/reactos/base/setup/usetup/lang/et-EE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ET_EE_H__
-#define LANG_ET_EE_H__
+#pragma once
MUI_LAYOUTS etEELayouts[] =
{
@@ -1691,5 +1690,3 @@ MUI_STRING etEEStrings[] =
"Klaviatuuriasetuste lisamine"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/eu-ES.h b/reactos/base/setup/usetup/lang/eu-ES.h
index ae9dd39a540..1bc40cf3f96 100644
--- a/reactos/base/setup/usetup/lang/eu-ES.h
+++ b/reactos/base/setup/usetup/lang/eu-ES.h
@@ -1,5 +1,4 @@
-#ifndef LANG_EU_ES_H__
-#define LANG_EU_ES_H__
+#pragma once
MUI_LAYOUTS euESLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS euESLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fa-IR.h b/reactos/base/setup/usetup/lang/fa-IR.h
index 219ae1c4db8..626f2bf969e 100644
--- a/reactos/base/setup/usetup/lang/fa-IR.h
+++ b/reactos/base/setup/usetup/lang/fa-IR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FA_IR_H__
-#define LANG_FA_IR_H__
+#pragma once
MUI_LAYOUTS faIRLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS faIRLayouts[] =
{ L"0429", L"00000401" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fi-FI.h b/reactos/base/setup/usetup/lang/fi-FI.h
index db363d7b1e1..096db150de0 100644
--- a/reactos/base/setup/usetup/lang/fi-FI.h
+++ b/reactos/base/setup/usetup/lang/fi-FI.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FI_FI_H__
-#define LANG_FI_FI_H__
+#pragma once
MUI_LAYOUTS fiFILayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS fiFILayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fo-FO.h b/reactos/base/setup/usetup/lang/fo-FO.h
index cede112ea52..01b190b0d17 100644
--- a/reactos/base/setup/usetup/lang/fo-FO.h
+++ b/reactos/base/setup/usetup/lang/fo-FO.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FO_FO_H__
-#define LANG_FO_FO_H__
+#pragma once
MUI_LAYOUTS foFOLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS foFOLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fr-BE.h b/reactos/base/setup/usetup/lang/fr-BE.h
index cee512f6fbb..994e4dd75bd 100644
--- a/reactos/base/setup/usetup/lang/fr-BE.h
+++ b/reactos/base/setup/usetup/lang/fr-BE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FR_BE_H__
-#define LANG_FR_BE_H__
+#pragma once
MUI_LAYOUTS frBELayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS frBELayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fr-CA.h b/reactos/base/setup/usetup/lang/fr-CA.h
index e0ff26a5d91..918a421f741 100644
--- a/reactos/base/setup/usetup/lang/fr-CA.h
+++ b/reactos/base/setup/usetup/lang/fr-CA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FR_CA_H__
-#define LANG_FR_CA_H__
+#pragma once
MUI_LAYOUTS frCALayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS frCALayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fr-CH.h b/reactos/base/setup/usetup/lang/fr-CH.h
index c6e2378ffd7..8b083c1bcad 100644
--- a/reactos/base/setup/usetup/lang/fr-CH.h
+++ b/reactos/base/setup/usetup/lang/fr-CH.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FR_CH_H__
-#define LANG_FR_CH_H__
+#pragma once
MUI_LAYOUTS frCHLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS frCHLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fr-FR.h b/reactos/base/setup/usetup/lang/fr-FR.h
index 9bea8230836..ae037aba25f 100644
--- a/reactos/base/setup/usetup/lang/fr-FR.h
+++ b/reactos/base/setup/usetup/lang/fr-FR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FR_FR_H__
-#define LANG_FR_FR_H__
+#pragma once
MUI_LAYOUTS frFRLayouts[] =
{
@@ -1707,5 +1706,3 @@ MUI_STRING frFRStrings[] =
"Adding keyboard layouts"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fr-LU.h b/reactos/base/setup/usetup/lang/fr-LU.h
index 0a50dbdd121..18fb3a7d623 100644
--- a/reactos/base/setup/usetup/lang/fr-LU.h
+++ b/reactos/base/setup/usetup/lang/fr-LU.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FR_LU_H__
-#define LANG_FR_LU_H__
+#pragma once
MUI_LAYOUTS frLULayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS frLULayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/fr-MC.h b/reactos/base/setup/usetup/lang/fr-MC.h
index 6e564feae00..1720d0a5fce 100644
--- a/reactos/base/setup/usetup/lang/fr-MC.h
+++ b/reactos/base/setup/usetup/lang/fr-MC.h
@@ -1,5 +1,4 @@
-#ifndef LANG_FR_MC_H__
-#define LANG_FR_MC_H__
+#pragma once
MUI_LAYOUTS frMCLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS frMCLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/gl-ES.h b/reactos/base/setup/usetup/lang/gl-ES.h
index 35dcf5ec1f2..31acfd370cf 100644
--- a/reactos/base/setup/usetup/lang/gl-ES.h
+++ b/reactos/base/setup/usetup/lang/gl-ES.h
@@ -1,5 +1,4 @@
-#ifndef LANG_GL_ES_H__
-#define LANG_GL_ES_H__
+#pragma once
MUI_LAYOUTS glESLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS glESLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/gu-IN.h b/reactos/base/setup/usetup/lang/gu-IN.h
index 5443e1dc3ec..c0cb2cbf21a 100644
--- a/reactos/base/setup/usetup/lang/gu-IN.h
+++ b/reactos/base/setup/usetup/lang/gu-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_GU_IN_H__
-#define LANG_GU_IN_H__
+#pragma once
MUI_LAYOUTS guINLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS guINLayouts[] =
{ L"0439", L"00000439" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/he-IL.h b/reactos/base/setup/usetup/lang/he-IL.h
index c981fe70b02..9c18824630c 100644
--- a/reactos/base/setup/usetup/lang/he-IL.h
+++ b/reactos/base/setup/usetup/lang/he-IL.h
@@ -1,5 +1,4 @@
-#ifndef LANG_HE_IL_H__
-#define LANG_HE_IL_H__
+#pragma once
MUI_LAYOUTS heILLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS heILLayouts[] =
{ L"040D", L"0000040D" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/hi-IN.h b/reactos/base/setup/usetup/lang/hi-IN.h
index b01731728fb..caf0c3d8917 100644
--- a/reactos/base/setup/usetup/lang/hi-IN.h
+++ b/reactos/base/setup/usetup/lang/hi-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_HI_IN_H__
-#define LANG_HI_IN_H__
+#pragma once
MUI_LAYOUTS hiINLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS hiINLayouts[] =
{ L"0439", L"00000439" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/hr-HR.h b/reactos/base/setup/usetup/lang/hr-HR.h
index 8622ea5339b..33a62e2873b 100644
--- a/reactos/base/setup/usetup/lang/hr-HR.h
+++ b/reactos/base/setup/usetup/lang/hr-HR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_HR_HR_H__
-#define LANG_HR_HR_H__
+#pragma once
MUI_LAYOUTS hrHRLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS hrHRLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/hu-HU.h b/reactos/base/setup/usetup/lang/hu-HU.h
index fc57399808d..a59208b6bb8 100644
--- a/reactos/base/setup/usetup/lang/hu-HU.h
+++ b/reactos/base/setup/usetup/lang/hu-HU.h
@@ -1,5 +1,4 @@
-#ifndef LANG_HU_HU_H__
-#define LANG_HU_HU_H__
+#pragma once
MUI_LAYOUTS huHULayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS huHULayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/hy-AM.h b/reactos/base/setup/usetup/lang/hy-AM.h
index 8499622fd3c..249c6d67c53 100644
--- a/reactos/base/setup/usetup/lang/hy-AM.h
+++ b/reactos/base/setup/usetup/lang/hy-AM.h
@@ -1,5 +1,4 @@
-#ifndef LANG_HY_AM_H__
-#define LANG_HY_AM_H__
+#pragma once
MUI_LAYOUTS hyAMLayouts[] =
{
@@ -9,5 +8,3 @@ MUI_LAYOUTS hyAMLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/id-ID.h b/reactos/base/setup/usetup/lang/id-ID.h
index 2346f239152..0cd4cebfa94 100644
--- a/reactos/base/setup/usetup/lang/id-ID.h
+++ b/reactos/base/setup/usetup/lang/id-ID.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ID_ID_H__
-#define LANG_ID_ID_H__
+#pragma once
MUI_LAYOUTS idIDLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS idIDLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/is-IS.h b/reactos/base/setup/usetup/lang/is-IS.h
index e23d530f496..aad013eab52 100644
--- a/reactos/base/setup/usetup/lang/is-IS.h
+++ b/reactos/base/setup/usetup/lang/is-IS.h
@@ -1,5 +1,4 @@
-#ifndef LANG_IS_IS_H__
-#define LANG_IS_IS_H__
+#pragma once
MUI_LAYOUTS isISLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS isISLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/it-CH.h b/reactos/base/setup/usetup/lang/it-CH.h
index f0cbd7c4f83..eb6748bd4bf 100644
--- a/reactos/base/setup/usetup/lang/it-CH.h
+++ b/reactos/base/setup/usetup/lang/it-CH.h
@@ -1,5 +1,4 @@
-#ifndef LANG_IT_CH_H__
-#define LANG_IT_CH_H__
+#pragma once
MUI_LAYOUTS itCHLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS itCHLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/it-IT.h b/reactos/base/setup/usetup/lang/it-IT.h
index 56f73a76890..21d3d8990bf 100644
--- a/reactos/base/setup/usetup/lang/it-IT.h
+++ b/reactos/base/setup/usetup/lang/it-IT.h
@@ -1,5 +1,4 @@
-#ifndef LANG_IT_IT_H__
-#define LANG_IT_IT_H__
+#pragma once
MUI_LAYOUTS itITLayouts[] =
{
@@ -1695,5 +1694,3 @@ MUI_STRING itITStrings[] =
"Aggiunta delle nazionalit di tastiera"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ja-JP.h b/reactos/base/setup/usetup/lang/ja-JP.h
index c444450ac62..af7ccdf2a7e 100644
--- a/reactos/base/setup/usetup/lang/ja-JP.h
+++ b/reactos/base/setup/usetup/lang/ja-JP.h
@@ -1,5 +1,4 @@
-#ifndef LANG_JA_JP_H__
-#define LANG_JA_JP_H__
+#pragma once
MUI_LAYOUTS jaJPLayouts[] =
{
@@ -1694,5 +1693,3 @@ MUI_STRING jaJPStrings[] =
"ް ڲ ² "},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ka-GE.h b/reactos/base/setup/usetup/lang/ka-GE.h
index 1c90f06b12b..c1036087b82 100644
--- a/reactos/base/setup/usetup/lang/ka-GE.h
+++ b/reactos/base/setup/usetup/lang/ka-GE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_KA_GE_H__
-#define LANG_KA_GE_H__
+#pragma once
MUI_LAYOUTS kaGELayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS kaGELayouts[] =
{ L"0419", L"00000419" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/kk-KZ.h b/reactos/base/setup/usetup/lang/kk-KZ.h
index 64d7e297fe7..86723663b94 100644
--- a/reactos/base/setup/usetup/lang/kk-KZ.h
+++ b/reactos/base/setup/usetup/lang/kk-KZ.h
@@ -1,5 +1,4 @@
-#ifndef LANG_KK_KZ_H__
-#define LANG_KK_KZ_H__
+#pragma once
MUI_LAYOUTS kkKZLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS kkKZLayouts[] =
{ L"0419", L"00000419" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/kn-IN.h b/reactos/base/setup/usetup/lang/kn-IN.h
index 241ff8700cc..1441331ed5e 100644
--- a/reactos/base/setup/usetup/lang/kn-IN.h
+++ b/reactos/base/setup/usetup/lang/kn-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_KN_IN_H__
-#define LANG_KN_IN_H__
+#pragma once
MUI_LAYOUTS knINLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS knINLayouts[] =
{ L"0439", L"00010439" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ko-KR.h b/reactos/base/setup/usetup/lang/ko-KR.h
index 4f805a88f22..799ae3ab1f1 100644
--- a/reactos/base/setup/usetup/lang/ko-KR.h
+++ b/reactos/base/setup/usetup/lang/ko-KR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_KO_KR_H__
-#define LANG_KO_KR_H__
+#pragma once
MUI_LAYOUTS koKRLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS koKRLayouts[] =
{ L"0412", L"00000412" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/kok-IN.h b/reactos/base/setup/usetup/lang/kok-IN.h
index ea9b692a2fa..cbfcab3437a 100644
--- a/reactos/base/setup/usetup/lang/kok-IN.h
+++ b/reactos/base/setup/usetup/lang/kok-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_KOK_IN_H__
-#define LANG_KOK_IN_H__
+#pragma once
MUI_LAYOUTS kokINLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS kokINLayouts[] =
{ L"0457", L"00000439" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ky-KG.h b/reactos/base/setup/usetup/lang/ky-KG.h
index b6571f61f88..e71b40cf2e9 100644
--- a/reactos/base/setup/usetup/lang/ky-KG.h
+++ b/reactos/base/setup/usetup/lang/ky-KG.h
@@ -1,5 +1,4 @@
-#ifndef LANG_KY_KG_H__
-#define LANG_KY_KG_H__
+#pragma once
MUI_LAYOUTS kyKGLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS kyKGLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/lt-LT.h b/reactos/base/setup/usetup/lang/lt-LT.h
index 7d455c2634c..a0a9eb485bf 100644
--- a/reactos/base/setup/usetup/lang/lt-LT.h
+++ b/reactos/base/setup/usetup/lang/lt-LT.h
@@ -7,8 +7,7 @@
* DATE: 2008-01-06
*/
-#ifndef LANG_LT_LT_H__
-#define LANG_LT_LT_H__
+#pragma once
MUI_LAYOUTS ltLTLayouts[] =
{
@@ -1704,5 +1703,3 @@ MUI_STRING ltLTStrings[] =
"Adding keyboard layouts"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/lv-LV.h b/reactos/base/setup/usetup/lang/lv-LV.h
index 23ca79b96ab..8371a2369bd 100644
--- a/reactos/base/setup/usetup/lang/lv-LV.h
+++ b/reactos/base/setup/usetup/lang/lv-LV.h
@@ -1,10 +1,7 @@
-#ifndef LANG_LV_LV_H__
-#define LANG_LV_LV_H__
+#pragma once
MUI_LAYOUTS lvLVLayouts[] =
{
{ L"0426", L"00010426" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/mk-MK.h b/reactos/base/setup/usetup/lang/mk-MK.h
index 1405f6438c0..4acab642d53 100644
--- a/reactos/base/setup/usetup/lang/mk-MK.h
+++ b/reactos/base/setup/usetup/lang/mk-MK.h
@@ -1,5 +1,4 @@
-#ifndef LANG_MK_MK_H__
-#define LANG_MK_MK_H__
+#pragma once
MUI_LAYOUTS mkMKLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS mkMKLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/mn-MN.h b/reactos/base/setup/usetup/lang/mn-MN.h
index f503f99c53b..6dec34de4c3 100644
--- a/reactos/base/setup/usetup/lang/mn-MN.h
+++ b/reactos/base/setup/usetup/lang/mn-MN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_MN_MN_H__
-#define LANG_MN_MN_H__
+#pragma once
MUI_LAYOUTS mnMNLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS mnMNLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/mr-IN.h b/reactos/base/setup/usetup/lang/mr-IN.h
index 58840e927bd..ff2e09ba19d 100644
--- a/reactos/base/setup/usetup/lang/mr-IN.h
+++ b/reactos/base/setup/usetup/lang/mr-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_MR_IN_H__
-#define LANG_MR_IN_H__
+#pragma once
MUI_LAYOUTS mrINLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS mrINLayouts[] =
{ L"044E", L"00000439" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ms-BN.h b/reactos/base/setup/usetup/lang/ms-BN.h
index 24ef23d8cbe..e0563c8665b 100644
--- a/reactos/base/setup/usetup/lang/ms-BN.h
+++ b/reactos/base/setup/usetup/lang/ms-BN.h
@@ -1,10 +1,7 @@
-#ifndef LANG_MS_BN_H__
-#define LANG_MS_BN_H__
+#pragma once
MUI_LAYOUTS msBNLayouts[] =
{
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ms-MY.h b/reactos/base/setup/usetup/lang/ms-MY.h
index 1abc1a33039..646eb6a90f9 100644
--- a/reactos/base/setup/usetup/lang/ms-MY.h
+++ b/reactos/base/setup/usetup/lang/ms-MY.h
@@ -1,10 +1,7 @@
-#ifndef LANG_MS_MY_H__
-#define LANG_MS_MY_H__
+#pragma once
MUI_LAYOUTS msMYLayouts[] =
{
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/my-MM.h b/reactos/base/setup/usetup/lang/my-MM.h
index f02d95e26b1..9b732ad7a92 100644
--- a/reactos/base/setup/usetup/lang/my-MM.h
+++ b/reactos/base/setup/usetup/lang/my-MM.h
@@ -1,5 +1,4 @@
-#ifndef LANG_MY_MM_H__
-#define LANG_MY_MM_H__
+#pragma once
MUI_LAYOUTS myMMLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS myMMLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/nl-BE.h b/reactos/base/setup/usetup/lang/nl-BE.h
index 233697b42c0..ebf61e67f81 100644
--- a/reactos/base/setup/usetup/lang/nl-BE.h
+++ b/reactos/base/setup/usetup/lang/nl-BE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_NL_BE_H__
-#define LANG_NL_BE_H__
+#pragma once
MUI_LAYOUTS nlBELayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS nlBELayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/nl-NL.h b/reactos/base/setup/usetup/lang/nl-NL.h
index 484b7ead78f..eba2d93ad5c 100644
--- a/reactos/base/setup/usetup/lang/nl-NL.h
+++ b/reactos/base/setup/usetup/lang/nl-NL.h
@@ -1,5 +1,4 @@
-#ifndef LANG_NL_NL_H__
-#define LANG_NL_NL_H__
+#pragma once
MUI_LAYOUTS nlNLLayouts[] =
{
@@ -1722,6 +1721,3 @@ MUI_STRING nlNLStrings[] =
"Toevoegen toetsenbord indelingen"},
{0, 0}
};
-
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/nn-NO.h b/reactos/base/setup/usetup/lang/nn-NO.h
index 4032b676814..8597b7405eb 100644
--- a/reactos/base/setup/usetup/lang/nn-NO.h
+++ b/reactos/base/setup/usetup/lang/nn-NO.h
@@ -1,5 +1,4 @@
-#ifndef LANG_NN_NO_H__
-#define LANG_NN_NO_H__
+#pragma once
MUI_LAYOUTS nnNOLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS nnNOLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/pa-IN.h b/reactos/base/setup/usetup/lang/pa-IN.h
index 44be5985a03..44cc3c30e6b 100644
--- a/reactos/base/setup/usetup/lang/pa-IN.h
+++ b/reactos/base/setup/usetup/lang/pa-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_PA_IN_H__
-#define LANG_PA_IN_H__
+#pragma once
MUI_LAYOUTS paINLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS paINLayouts[] =
{ L"0439", L"00010439" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/pl-PL.h b/reactos/base/setup/usetup/lang/pl-PL.h
index dde0dbdc8c3..8d4262d58cd 100644
--- a/reactos/base/setup/usetup/lang/pl-PL.h
+++ b/reactos/base/setup/usetup/lang/pl-PL.h
@@ -5,8 +5,7 @@
* IRC: irc.freenode.net #reactos-pl;
*/
-#ifndef LANG_PL_PL_H__
-#define LANG_PL_PL_H__
+#pragma once
MUI_LAYOUTS plPLLayouts[] =
{
@@ -1703,5 +1702,3 @@ MUI_STRING plPLStrings[] =
"Dodawanie ukadw klawiatury"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/pt-BR.h b/reactos/base/setup/usetup/lang/pt-BR.h
index f1623f9fa8f..6c545ad785a 100644
--- a/reactos/base/setup/usetup/lang/pt-BR.h
+++ b/reactos/base/setup/usetup/lang/pt-BR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_PT_BR_H__
-#define LANG_PT_BR_H__
+#pragma once
MUI_LAYOUTS ptBRLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS ptBRLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/pt-PT.h b/reactos/base/setup/usetup/lang/pt-PT.h
index 6ca8d287221..6faf386505c 100644
--- a/reactos/base/setup/usetup/lang/pt-PT.h
+++ b/reactos/base/setup/usetup/lang/pt-PT.h
@@ -1,5 +1,4 @@
-#ifndef LANG_PT_PT_H__
-#define LANG_PT_PT_H__
+#pragma once
MUI_LAYOUTS ptPTLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS ptPTLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/rm-CH.h b/reactos/base/setup/usetup/lang/rm-CH.h
index 62e9e753116..d36a5e632df 100644
--- a/reactos/base/setup/usetup/lang/rm-CH.h
+++ b/reactos/base/setup/usetup/lang/rm-CH.h
@@ -1,5 +1,4 @@
-#ifndef LANG_RM_CH_H__
-#define LANG_RM_CH_H__
+#pragma once
MUI_LAYOUTS rmCHLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS rmCHLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ro-RO.h b/reactos/base/setup/usetup/lang/ro-RO.h
index 8ee875b2585..f8f17441a26 100644
--- a/reactos/base/setup/usetup/lang/ro-RO.h
+++ b/reactos/base/setup/usetup/lang/ro-RO.h
@@ -1,5 +1,4 @@
-#ifndef LANG_RO_RO_H__
-#define LANG_RO_RO_H__
+#pragma once
MUI_LAYOUTS roROLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS roROLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ru-RU.h b/reactos/base/setup/usetup/lang/ru-RU.h
index ea25d6c10aa..7e55b9700bb 100644
--- a/reactos/base/setup/usetup/lang/ru-RU.h
+++ b/reactos/base/setup/usetup/lang/ru-RU.h
@@ -1,5 +1,4 @@
-#ifndef LANG_RU_RU_H__
-#define LANG_RU_RU_H__
+#pragma once
MUI_LAYOUTS ruRULayouts[] =
{
@@ -1695,5 +1694,3 @@ MUI_STRING ruRUStrings[] =
"Adding keyboard layouts"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/sa-IN.h b/reactos/base/setup/usetup/lang/sa-IN.h
index b186ff42fc9..8d8442dcb72 100644
--- a/reactos/base/setup/usetup/lang/sa-IN.h
+++ b/reactos/base/setup/usetup/lang/sa-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_SA_IN_H__
-#define LANG_SA_IN_H__
+#pragma once
MUI_LAYOUTS saINLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS saINLayouts[] =
{ L"044F", L"00000439" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/sk-SK.h b/reactos/base/setup/usetup/lang/sk-SK.h
index 76596451626..5078f08139f 100644
--- a/reactos/base/setup/usetup/lang/sk-SK.h
+++ b/reactos/base/setup/usetup/lang/sk-SK.h
@@ -4,8 +4,7 @@
* LastChange: 01-11-2009
*/
-#ifndef LANG_SK_SK_H__
-#define LANG_SK_SK_H__
+#pragma once
MUI_LAYOUTS skSKLayouts[] =
{
@@ -1705,5 +1704,3 @@ MUI_STRING skSKStrings[] =
"Pridvam rozloenia klvesnice"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/sl-SI.h b/reactos/base/setup/usetup/lang/sl-SI.h
index 9278ee7d728..29a0133383c 100644
--- a/reactos/base/setup/usetup/lang/sl-SI.h
+++ b/reactos/base/setup/usetup/lang/sl-SI.h
@@ -1,5 +1,4 @@
-#ifndef LANG_SL_SI_H__
-#define LANG_SL_SI_H__
+#pragma once
MUI_LAYOUTS slSILayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS slSILayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/sq-AL.h b/reactos/base/setup/usetup/lang/sq-AL.h
index 74afcc3dff2..21027ea9166 100644
--- a/reactos/base/setup/usetup/lang/sq-AL.h
+++ b/reactos/base/setup/usetup/lang/sq-AL.h
@@ -1,5 +1,4 @@
-#ifndef LANG_SQ_AL_H__
-#define LANG_SQ_AL_H__
+#pragma once
MUI_LAYOUTS sqALLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS sqALLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/sr-SP.h b/reactos/base/setup/usetup/lang/sr-SP.h
index 0a2d81a8028..022248a7fbf 100644
--- a/reactos/base/setup/usetup/lang/sr-SP.h
+++ b/reactos/base/setup/usetup/lang/sr-SP.h
@@ -1,5 +1,4 @@
-#ifndef LANG_SR_SP_H__
-#define LANG_SR_SP_H__
+#pragma once
MUI_LAYOUTS srSPLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS srSPLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/sv-FI.h b/reactos/base/setup/usetup/lang/sv-FI.h
index b377d7f7e05..c90085576e9 100644
--- a/reactos/base/setup/usetup/lang/sv-FI.h
+++ b/reactos/base/setup/usetup/lang/sv-FI.h
@@ -1,5 +1,4 @@
-#ifndef LANG_SV_FI_H__
-#define LANG_SV_FI_H__
+#pragma once
MUI_LAYOUTS svFILayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS svFILayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/sv-SE.h b/reactos/base/setup/usetup/lang/sv-SE.h
index df25e299e7d..0dbffdc453c 100644
--- a/reactos/base/setup/usetup/lang/sv-SE.h
+++ b/reactos/base/setup/usetup/lang/sv-SE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_SV_SE_H__
-#define LANG_SV_SE_H__
+#pragma once
MUI_LAYOUTS svSELayouts[] =
{
@@ -1694,5 +1693,3 @@ MUI_STRING svSEStrings[] =
"Adding keyboard layouts"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/sw-KE.h b/reactos/base/setup/usetup/lang/sw-KE.h
index c73f07d2e7d..3a58152f154 100644
--- a/reactos/base/setup/usetup/lang/sw-KE.h
+++ b/reactos/base/setup/usetup/lang/sw-KE.h
@@ -1,10 +1,7 @@
-#ifndef LANG_SW_KE_H__
-#define LANG_SW_KE_H__
+#pragma once
MUI_LAYOUTS swKELayouts[] =
{
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/syr-SY.h b/reactos/base/setup/usetup/lang/syr-SY.h
index 02435a2a520..0a5f91cc4ba 100644
--- a/reactos/base/setup/usetup/lang/syr-SY.h
+++ b/reactos/base/setup/usetup/lang/syr-SY.h
@@ -1,5 +1,4 @@
-#ifndef LANG_SYR_SY_H__
-#define LANG_SYR_SY_H__
+#pragma once
MUI_LAYOUTS syrSYLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS syrSYLayouts[] =
{ L"045A", L"0000045A" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ta-IN.h b/reactos/base/setup/usetup/lang/ta-IN.h
index a111ada8c02..9322299c4c4 100644
--- a/reactos/base/setup/usetup/lang/ta-IN.h
+++ b/reactos/base/setup/usetup/lang/ta-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_TA_IN_H__
-#define LANG_TA_IN_H__
+#pragma once
MUI_LAYOUTS taINLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS taINLayouts[] =
{ L"0449", L"00000449" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/te-IN.h b/reactos/base/setup/usetup/lang/te-IN.h
index b9072ed9c03..cd80fcc4429 100644
--- a/reactos/base/setup/usetup/lang/te-IN.h
+++ b/reactos/base/setup/usetup/lang/te-IN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_TE_IN_H__
-#define LANG_TE_IN_H__
+#pragma once
MUI_LAYOUTS teINLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS teINLayouts[] =
{ L"0439", L"00010439" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/th-TH.h b/reactos/base/setup/usetup/lang/th-TH.h
index a0f855fa076..6f50c4217d9 100644
--- a/reactos/base/setup/usetup/lang/th-TH.h
+++ b/reactos/base/setup/usetup/lang/th-TH.h
@@ -1,5 +1,4 @@
-#ifndef LANG_TH_TH_H__
-#define LANG_TH_TH_H__
+#pragma once
MUI_LAYOUTS thTHLayouts[] =
{
@@ -10,5 +9,3 @@ MUI_LAYOUTS thTHLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/tr-TR.h b/reactos/base/setup/usetup/lang/tr-TR.h
index 0920ad02d26..a3c2db5a153 100644
--- a/reactos/base/setup/usetup/lang/tr-TR.h
+++ b/reactos/base/setup/usetup/lang/tr-TR.h
@@ -1,5 +1,4 @@
-#ifndef LANG_TR_TR_H__
-#define LANG_TR_TR_H__
+#pragma once
MUI_LAYOUTS trTRLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS trTRLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/tt-TA.h b/reactos/base/setup/usetup/lang/tt-TA.h
index 93665c43068..b54ebfdc0ba 100644
--- a/reactos/base/setup/usetup/lang/tt-TA.h
+++ b/reactos/base/setup/usetup/lang/tt-TA.h
@@ -1,5 +1,4 @@
-#ifndef LANG_TT_TA_H__
-#define LANG_TT_TA_H__
+#pragma once
MUI_LAYOUTS ttTALayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS ttTALayouts[] =
{ L"0419", L"00000419" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/uk-UA.h b/reactos/base/setup/usetup/lang/uk-UA.h
index e331c0c1a2e..ba3fd009623 100644
--- a/reactos/base/setup/usetup/lang/uk-UA.h
+++ b/reactos/base/setup/usetup/lang/uk-UA.h
@@ -3,8 +3,7 @@
* http://www.reactos.org/uk/
*/
-#ifndef LANG_UK_UA_H__
-#define LANG_UK_UA_H__
+#pragma once
MUI_LAYOUTS ukUALayouts[] =
{
@@ -1700,5 +1699,3 @@ MUI_STRING ukUAStrings[] =
" i"},
{0, 0}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/ur-PK.h b/reactos/base/setup/usetup/lang/ur-PK.h
index b1129dee966..73beeee167b 100644
--- a/reactos/base/setup/usetup/lang/ur-PK.h
+++ b/reactos/base/setup/usetup/lang/ur-PK.h
@@ -1,5 +1,4 @@
-#ifndef LANG_UR_PK_H__
-#define LANG_UR_PK_H__
+#pragma once
MUI_LAYOUTS urPKLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS urPKLayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/uz-UZ.h b/reactos/base/setup/usetup/lang/uz-UZ.h
index 963c761be35..af15bb90dfb 100644
--- a/reactos/base/setup/usetup/lang/uz-UZ.h
+++ b/reactos/base/setup/usetup/lang/uz-UZ.h
@@ -1,5 +1,4 @@
-#ifndef LANG_UZ_UZ_H__
-#define LANG_UZ_UZ_H__
+#pragma once
MUI_LAYOUTS uzUZLayouts[] =
{
@@ -8,5 +7,3 @@ MUI_LAYOUTS uzUZLayouts[] =
{ L"0419", L"00000419" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/vi-VN.h b/reactos/base/setup/usetup/lang/vi-VN.h
index 9fed103cb5d..dfd3986f21c 100644
--- a/reactos/base/setup/usetup/lang/vi-VN.h
+++ b/reactos/base/setup/usetup/lang/vi-VN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_VI_VN_H__
-#define LANG_VI_VN_H__
+#pragma once
MUI_LAYOUTS viVNLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS viVNLayouts[] =
{ L"042A", L"0000042A" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/wa-BE.h b/reactos/base/setup/usetup/lang/wa-BE.h
index fbaafe4d09a..7ec2c7861fc 100644
--- a/reactos/base/setup/usetup/lang/wa-BE.h
+++ b/reactos/base/setup/usetup/lang/wa-BE.h
@@ -1,5 +1,4 @@
-#ifndef LANG_WA_BE_H__
-#define LANG_WA_BE_H__
+#pragma once
MUI_LAYOUTS waBELayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS waBELayouts[] =
{ L"0409", L"00000409" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/zh-CN.h b/reactos/base/setup/usetup/lang/zh-CN.h
index 3a1271481c4..d538e74d92a 100644
--- a/reactos/base/setup/usetup/lang/zh-CN.h
+++ b/reactos/base/setup/usetup/lang/zh-CN.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ZH_CN_H__
-#define LANG_ZH_CN_H__
+#pragma once
MUI_LAYOUTS zhCNLayouts[] =
{
@@ -11,5 +10,3 @@ MUI_LAYOUTS zhCNLayouts[] =
{ L"0804", L"E0040804" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/zh-HK.h b/reactos/base/setup/usetup/lang/zh-HK.h
index 5f99a9dce3b..82905a3a22d 100644
--- a/reactos/base/setup/usetup/lang/zh-HK.h
+++ b/reactos/base/setup/usetup/lang/zh-HK.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ZH_HK_H__
-#define LANG_ZH_HK_H__
+#pragma once
MUI_LAYOUTS zhHKLayouts[] =
{
@@ -7,5 +6,3 @@ MUI_LAYOUTS zhHKLayouts[] =
{ L"0C04", L"E0080404" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/zh-MO.h b/reactos/base/setup/usetup/lang/zh-MO.h
index 6194ed3ad64..b12866fc0d2 100644
--- a/reactos/base/setup/usetup/lang/zh-MO.h
+++ b/reactos/base/setup/usetup/lang/zh-MO.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ZH_MO_H__
-#define LANG_ZH_MO_H__
+#pragma once
MUI_LAYOUTS zhMOLayouts[] =
{
@@ -9,5 +8,3 @@ MUI_LAYOUTS zhMOLayouts[] =
{ L"0404", L"E0080404" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/zh-SG.h b/reactos/base/setup/usetup/lang/zh-SG.h
index 038762609ca..f59b1d98c49 100644
--- a/reactos/base/setup/usetup/lang/zh-SG.h
+++ b/reactos/base/setup/usetup/lang/zh-SG.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ZH_SG_H__
-#define LANG_ZH_SG_H__
+#pragma once
MUI_LAYOUTS zhSGLayouts[] =
{
@@ -10,5 +9,3 @@ MUI_LAYOUTS zhSGLayouts[] =
{ L"0804", L"E0040804" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/lang/zh-TW.h b/reactos/base/setup/usetup/lang/zh-TW.h
index 384a844ef28..a1d3dad959c 100644
--- a/reactos/base/setup/usetup/lang/zh-TW.h
+++ b/reactos/base/setup/usetup/lang/zh-TW.h
@@ -1,5 +1,4 @@
-#ifndef LANG_ZH_TW_H__
-#define LANG_ZH_TW_H__
+#pragma once
MUI_LAYOUTS zhTWLayouts[] =
{
@@ -9,5 +8,3 @@ MUI_LAYOUTS zhTWLayouts[] =
{ L"0404", L"E0010404" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/mui.h b/reactos/base/setup/usetup/mui.h
index 61722e60612..cf0f718c2e4 100644
--- a/reactos/base/setup/usetup/mui.h
+++ b/reactos/base/setup/usetup/mui.h
@@ -1,5 +1,4 @@
-#ifndef MUI_H__
-#define MUI_H__
+#pragma once
typedef struct
{
@@ -137,4 +136,3 @@ MUIGetString(ULONG Number);
#define STRING_MB 54
#define STRING_GB 55
#define STRING_ADDKBLAYOUTS 56
-#endif
diff --git a/reactos/base/setup/usetup/muifonts.h b/reactos/base/setup/usetup/muifonts.h
index 399a7eb460d..18e707a7326 100644
--- a/reactos/base/setup/usetup/muifonts.h
+++ b/reactos/base/setup/usetup/muifonts.h
@@ -1,5 +1,4 @@
-#ifndef LANG_MUI_FONTS_H__
-#define LANG_MUI_FONTS_H__
+#pragma once
MUI_SUBFONT LatinFonts[] =
{
@@ -88,5 +87,3 @@ MUI_SUBFONT UnicodeFonts[] =
{ L"Helv", L"DejaVu Sans" },
{ NULL, NULL }
};
-
-#endif
diff --git a/reactos/base/setup/usetup/muilanguages.h b/reactos/base/setup/usetup/muilanguages.h
index 59b11591397..ebf404ac306 100644
--- a/reactos/base/setup/usetup/muilanguages.h
+++ b/reactos/base/setup/usetup/muilanguages.h
@@ -1,5 +1,4 @@
-#ifndef LANG_MUI_LANGUAGES_H__
-#define LANG_MUI_LANGUAGES_H__
+#pragma once
#include "lang/af-ZA.h"
#include "lang/ar-AE.h"
@@ -281,5 +280,3 @@ const MUI_LANGUAGE LanguageList[] =
{L"00000435", L"1252", L"850", L"10000", L"Zulu", L"1", enUSPages, enUSErrorEntries, enUSStrings, LatinFonts, enUSLayouts },
{NULL, NULL, NULL, NULL, NULL, NULL}
};
-
-#endif
diff --git a/reactos/base/setup/usetup/native/host_native.h b/reactos/base/setup/usetup/native/host_native.h
index 1ce410db9b2..207927c83eb 100644
--- a/reactos/base/setup/usetup/native/host_native.h
+++ b/reactos/base/setup/usetup/native/host_native.h
@@ -1,5 +1,4 @@
-#ifndef _HOST_NATIVE_H_
-#define _HOST_NATIVE_H_
+#pragma once
#include "usetup.h"
@@ -12,5 +11,3 @@ typedef struct
#define SetupInitDefaultQueueCallback(a) NULL
#define SetupDefaultQueueCallbackW(a, b, c, d) TRUE
#define SetupTermDefaultQueueCallback(a)
-
-#endif /* _HOST_NATIVE_H_ */
diff --git a/reactos/base/setup/usetup/native/utils/console.h b/reactos/base/setup/usetup/native/utils/console.h
index e58d4f7caaf..feb89829245 100644
--- a/reactos/base/setup/usetup/native/utils/console.h
+++ b/reactos/base/setup/usetup/native/utils/console.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef _UTILS_CONSOLE_H_
-#define _UTILS_CONSOLE_H_
+#pragma once
BOOL WINAPI
AllocConsole(VOID);
@@ -113,6 +112,4 @@ SetConsoleOutputCP(
IN UINT wCodePageID
);
-#endif /* _UTILS_CONSOLE_H_ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/native/utils/keytrans.h b/reactos/base/setup/usetup/native/utils/keytrans.h
index 8a63a1eeb70..cea1aef5ad3 100644
--- a/reactos/base/setup/usetup/native/utils/keytrans.h
+++ b/reactos/base/setup/usetup/native/utils/keytrans.h
@@ -23,14 +23,11 @@
* PROGRAMMER: Tinus
*/
-#ifndef __KEYTRANS_H__
-#define __KEYTRANS_H__
+#pragma once
#include
NTSTATUS
IntTranslateKey(PKEYBOARD_INPUT_DATA InputData, KEY_EVENT_RECORD *Event);
-#endif /* __KEYTRANS_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/partlist.c b/reactos/base/setup/usetup/partlist.c
index ca0bdf7ae6a..5c553c2f537 100644
--- a/reactos/base/setup/usetup/partlist.c
+++ b/reactos/base/setup/usetup/partlist.c
@@ -846,10 +846,10 @@ AddDiskToList (HANDLE FileHandle,
DiskEntry->SectorsPerTrack = DiskGeometry.SectorsPerTrack;
DiskEntry->BytesPerSector = DiskGeometry.BytesPerSector;
- DPRINT ("Cylinders %d\n", DiskEntry->Cylinders);
- DPRINT ("TracksPerCylinder %d\n", DiskEntry->TracksPerCylinder);
- DPRINT ("SectorsPerTrack %d\n", DiskEntry->SectorsPerTrack);
- DPRINT ("BytesPerSector %d\n", DiskEntry->BytesPerSector);
+ DPRINT ("Cylinders %I64u\n", DiskEntry->Cylinders);
+ DPRINT ("TracksPerCylinder %I64u\n", DiskEntry->TracksPerCylinder);
+ DPRINT ("SectorsPerTrack %I64u\n", DiskEntry->SectorsPerTrack);
+ DPRINT ("BytesPerSector %I64u\n", DiskEntry->BytesPerSector);
DiskEntry->TrackSize =
(ULONGLONG)DiskGeometry.SectorsPerTrack *
diff --git a/reactos/base/setup/usetup/partlist.h b/reactos/base/setup/usetup/partlist.h
index 7d6f08813c4..ef3f4d2cbe0 100644
--- a/reactos/base/setup/usetup/partlist.h
+++ b/reactos/base/setup/usetup/partlist.h
@@ -23,8 +23,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __PARTLIST_H__
-#define __PARTLIST_H__
+#pragma once
/* We have to define it there, because it is not in the MS DDK */
#define PARTITION_EXT2 0x83
@@ -222,6 +221,4 @@ CheckForLinuxFdiskPartitions (PPARTLIST List);
BOOLEAN
WritePartitionsToDisk (PPARTLIST List);
-#endif /* __PARTLIST_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/progress.h b/reactos/base/setup/usetup/progress.h
index eda1f1ef0bd..53af83db6d9 100644
--- a/reactos/base/setup/usetup/progress.h
+++ b/reactos/base/setup/usetup/progress.h
@@ -24,9 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __PROGRESS_H__
-#define __PROGRESS_H__
-
+#pragma once
typedef struct _PROGRESS
{
@@ -75,6 +73,4 @@ VOID
ProgressSetStep (PPROGRESSBAR Bar,
ULONG Step);
-#endif /* __PROGRESS_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/registry.h b/reactos/base/setup/usetup/registry.h
index 0b41cd3ea12..d76470402d7 100644
--- a/reactos/base/setup/usetup/registry.h
+++ b/reactos/base/setup/usetup/registry.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __REGISTRY_H__
-#define __REGISTRY_H__
+#pragma once
BOOLEAN
ImportRegistryFile(PWSTR Filename,
@@ -38,6 +37,4 @@ SetInstallPathValue(PUNICODE_STRING InstallPath);
BOOLEAN
SetMountedDeviceValue(CHAR Letter, ULONG Signature, LARGE_INTEGER StartingOffset);
-#endif /* __REGISTRY_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/settings.h b/reactos/base/setup/usetup/settings.h
index 5c6918e8049..65b59ef8aee 100644
--- a/reactos/base/setup/usetup/settings.h
+++ b/reactos/base/setup/usetup/settings.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __SETTINGS_H__
-#define __SETTINGS_H__
+#pragma once
PGENERIC_LIST
CreateComputerTypeList(HINF InfFile);
@@ -66,6 +65,4 @@ ProcessKeyboardLayoutFiles(PGENERIC_LIST List);
BOOLEAN
SetGeoID(PWCHAR Id);
-#endif /* __SETTINGS_H__ */
-
/* EOF */
diff --git a/reactos/base/setup/usetup/usetup.h b/reactos/base/setup/usetup/usetup.h
index 11c0819f6c4..ff7cf87fb84 100644
--- a/reactos/base/setup/usetup/usetup.h
+++ b/reactos/base/setup/usetup/usetup.h
@@ -24,8 +24,7 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __USETUP_H__
-#define __USETUP_H__
+#pragma once
/* C Headers */
#include
@@ -123,12 +122,6 @@ typedef enum _PAGE_NUMBER
#define POPUP_WAIT_ANY_KEY 1
#define POPUP_WAIT_ENTER 2
-#define ROUND_DOWN(n, align) \
- (((ULONG)n) & ~((align) - 1l))
-
-#define ROUND_UP(n, align) \
- ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
-
#define LIST_FOR_EACH(elem, list, type, field) \
for ((elem) = CONTAINING_RECORD((list)->Flink, type, field); \
&(elem)->field != (list) || (elem == NULL); \
@@ -152,6 +145,4 @@ typedef enum _PAGE_NUMBER
InsertTailList(current, &((NewEntry)->ListEntryField));\
}
-#endif /* __USETUP_H__*/
-
/* EOF */
diff --git a/reactos/base/setup/vmwinst/lang/de-DE.rc b/reactos/base/setup/vmwinst/lang/de-DE.rc
index 67a0320d8f8..b66c13f0746 100644
--- a/reactos/base/setup/vmwinst/lang/de-DE.rc
+++ b/reactos/base/setup/vmwinst/lang/de-DE.rc
@@ -5,8 +5,8 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Grafiktreiberinstallation"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- LTEXT "Das ReactOS Setup hat festgestellt, dass Sie ReactOS in VMware(r) installieren.", -1, 117, 8, 140, 24
- LTEXT "Wenn Sie den VMware(r) SVGA Treiber installieren mchten, klicken Sie auf 'Weiter', ansonsten auf 'Abbrechen'.", -1, 117, 140, 140, 24
+ LTEXT "Das ReactOS-Setup hat festgestellt, dass Sie ReactOS in VMware(r) installieren.", -1, 117, 8, 140, 24
+ LTEXT "Wenn Sie den VMware(r)-SVGA-Treiber installieren mchten, klicken Sie auf 'Weiter', ansonsten auf 'Abbrechen'.", -1, 117, 140, 140, 24
END
IDD_INSERT_VMWARE_TOOLS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
@@ -14,7 +14,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Grafiktreiberinstallation"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- LTEXT "ReactOS wird nicht mit dem VMware(r) SVGA Treiber ausgeliefert.\n\nGehen Sie bitte auf 'VM' in der Menleiste von VMware(r) Workstation und whlen Sie 'VMware Tools installieren...'\n\n\nKlicken Sie auf 'Weiter' um fortzufahren, ansonsten auf 'Abbrechen'",-1,25,25,225,85
+ LTEXT "ReactOS wird nicht mit dem VMware(r)-SVGA-Treiber ausgeliefert.\n\nGehen Sie bitte auf 'VM' in der Menleiste von VMware(r) Workstation und whlen Sie 'VMware Tools installieren...'\n\n\nKlicken Sie auf 'Weiter', um fortzufahren, ansonsten auf 'Abbrechen'",-1,25,25,225,85
END
IDD_INSTALLING_VMWARE_TOOLS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
@@ -31,7 +31,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Grafiktreiberinstallation"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- LTEXT "Der VMware(r) SVGA Treiber wurde erfolgreich installiert. Whlen Sie bitte Ihre Auflsung:",-1,25,5,225,20
+ LTEXT "Der VMware(r)-SVGA-Treiber wurde erfolgreich installiert. Whlen Sie bitte Ihre Auflsung:",-1,25,5,225,20
PUSHBUTTON "640x480", 1120, 25, 30, 65, 15, BS_AUTORADIOBUTTON
PUSHBUTTON "800x600", 1400, 25, 45, 65, 15, BS_AUTORADIOBUTTON
PUSHBUTTON "1024x768", 1792, 25, 60, 65, 15, BS_AUTORADIOBUTTON
@@ -52,7 +52,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Grafiktreiberinstallation"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- LTEXT "Das ReactOS Setup konnte den VMware(r) SVGA Treiber nicht finden.\n\n\nKlicken Sie auf 'Fertigstellen' um mit der Installation fortzufahren",-1,25,25,225,85
+ LTEXT "Das ReactOS-Setup konnte den VMware(r)-SVGA-Treiber nicht finden.\n\n\nKlicken Sie auf 'Fertigstellen', um mit der Installation fortzufahren",-1,25,25,225,85
END
IDD_CHOOSEACTION DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
@@ -60,10 +60,10 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Grafiktreiberinstallation"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- LTEXT "Der VMware(r) SVGA Treiber wurde schon installiert.\n\nWhlen Sie bitte eine der folgenden Optionen aus:",-1,25,5,225,30
+ LTEXT "Der VMware(r)-SVGA-Treiber wurde schon installiert.\n\nWhlen Sie bitte eine der folgenden Optionen aus:",-1,25,5,225,30
PUSHBUTTON "Die Bildeinstellungen ndern", IDC_CONFIGSETTINGS, 25, 40, 200, 15, BS_AUTORADIOBUTTON
PUSHBUTTON "Einen anderen Grafiktreiber benutzen", IDC_USEOTHERDRIVER, 25, 55, 200, 15, BS_AUTORADIOBUTTON
- PUSHBUTTON "Den VMware(r) SVGA Treiber entfernen", IDC_UNINSTALL, 25, 70, 200, 15, BS_AUTORADIOBUTTON
+ PUSHBUTTON "Den VMware(r)-SVGA-Treiber entfernen", IDC_UNINSTALL, 25, 70, 200, 15, BS_AUTORADIOBUTTON
LTEXT "Klicken Sie auf 'Weiter' um fortzufahren oder 'Abbrechen' um den Asssistenten zu beenden.", -1, 25, 93, 225, 19
END
@@ -73,9 +73,9 @@ CAPTION "Grafiktreiberinstallation"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "Whlen Sie bitte den Grafiktreiber aus, den Sie verwenden mchten:",-1,25,25,225,15
- PUSHBUTTON "ReactOS VGA Treiber", IDC_VGA, 25, 40, 225, 15, BS_AUTORADIOBUTTON
- PUSHBUTTON "ReactOS VBE Treiber (SVGA)", IDC_VBE, 25, 55, 225, 15, BS_AUTORADIOBUTTON
- LTEXT "Klicken Sie auf 'Fertigstellen' um die Installation fertigzustellen oder auf 'Abbrechen' um das Setup ohne Vernderungen zu beenden.", -1, 25, 93, 225, 20
+ PUSHBUTTON "ReactOS-VGA-Treiber", IDC_VGA, 25, 40, 225, 15, BS_AUTORADIOBUTTON
+ PUSHBUTTON "ReactOS-VBE-Treiber (SVGA)", IDC_VBE, 25, 55, 225, 15, BS_AUTORADIOBUTTON
+ LTEXT "Klicken Sie auf 'Fertigstellen', um die Installation fertigzustellen, oder auf 'Abbrechen', um das Setup ohne Vernderungen zu beenden.", -1, 25, 93, 225, 20
END
IDD_DOUNINSTALL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
@@ -83,48 +83,48 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Grafiktreiberinstallation"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- LTEXT "Das ReactOS Setup wird Ihren VMware(r) SVGA Treiber entfernen!!!\n\n\nKlicken Sie auf 'Fertigstellen' um den Treiber zu entfernen oder auf 'Abbrechen' um ihn weiterhin zu verwenden.",-1,25,25,225,85
+ LTEXT "Das ReactOS-Setup wird Ihren VMware(r)-SVGA-Treiber entfernen!!!\n\n\nKlicken Sie auf 'Fertigstellen', um den Treiber zu entfernen, oder auf 'Abbrechen', um ihn weiterhin zu verwenden.",-1,25,25,225,85
END
STRINGTABLE
BEGIN
IDS_WIZARD_NAME "VMware(r) gefunden"
- IDS_FAILEDTOLOCATEDRIVERS "Das ReactOS Setup konnte die bentigten Dateien nicht finden.\nStellen Sie sicher, dass sich die VMware-Tools CD in dem Laufwerk befindet."
- IDS_FAILEDTOCOPYFILES "Das ReactOS Setup konnte die bentigten Dateien nicht kopieren.\nStellen Sie sicher, dass sich die VMware-Tools CD in dem Laufwerk befindet.\n"
- IDS_FAILEDTOACTIVATEDRIVER "Fehler beim Aktivieren des VMware(r) SVGA Treibers!"
- IDS_FAILEDTOSELVGADRIVER "Fehler beim Aktivieren des ReactOS VGA Treibers!"
- IDS_FAILEDTOSELVBEDRIVER "Fehler beim Aktivieren des ReactOS VBE Treibers!"
- IDS_UNINSTNOTICE "Die VMware(r) SVGA Treiber Dateien wurden noch nicht gelscht.\nLschen Sie sie bitte nach dem Neustart manuell."
+ IDS_FAILEDTOLOCATEDRIVERS "Das ReactOS-Setup konnte die bentigten Dateien nicht finden.\nStellen Sie sicher, dass sich die VMware-Tools-CD in dem Laufwerk befindet."
+ IDS_FAILEDTOCOPYFILES "Das ReactOS-Setup konnte die bentigten Dateien nicht kopieren.\nStellen Sie sicher, dass sich die VMware-Tools-CD in dem Laufwerk befindet.\n"
+ IDS_FAILEDTOACTIVATEDRIVER "Fehler beim Aktivieren des VMware(r)-SVGA-Treibers!"
+ IDS_FAILEDTOSELVGADRIVER "Fehler beim Aktivieren des ReactOS-VGA-Treibers!"
+ IDS_FAILEDTOSELVBEDRIVER "Fehler beim Aktivieren des ReactOS-VBE-Treibers!"
+ IDS_UNINSTNOTICE "Die VMware(r)-SVGA-Treiberdateien wurden noch nicht gelscht.\nLschen Sie sie bitte nach dem Neustart manuell."
END
STRINGTABLE
BEGIN
10001 "Niedrigste (8BPP)"
- 10002 "Mittelere (16BPP)"
+ 10002 "Mittlere (16BPP)"
10003 "Hchste (32BPP)"
END
STRINGTABLE
BEGIN
- IDS_SEARCHINGFORCDROM "Suche die VMware(r) Tools CD-ROM..."
+ IDS_SEARCHINGFORCDROM "Suche die VMware(r)-Tools-CD-ROM..."
IDS_COPYINGFILES "Kopiere Dateien..."
- IDS_ENABLINGDRIVER "Aktiviere den VMware(r) SVGA Treiber..."
+ IDS_ENABLINGDRIVER "Aktiviere den VMware(r)-SVGA-Treiber..."
END
STRINGTABLE
BEGIN
- IDD_INSERT_VMWARE_TOOLSTITLE "VMware(r) SVGA Treiber Installationsassistent"
- IDD_INSERT_VMWARE_TOOLSSUBTITLE "Bitte legen Sie die VMware-Tool CD-ROM ein."
- IDD_INSTALLING_VMWARE_TOOLSTITLE "VMware(r) SVGA Treiber Installationsassistent"
- IDD_INSTALLING_VMWARE_TOOLSSUBTITLE "Suchen und kopieren des VMware(r) SVGA Treibers."
- IDD_CONFIGTITLE "VMware(r) SVGA Treiber Installationsassistent"
+ IDD_INSERT_VMWARE_TOOLSTITLE "VMware(r)-SVGA-Treiber-Installationsassistent"
+ IDD_INSERT_VMWARE_TOOLSSUBTITLE "Bitte legen Sie die VMware-Tools-CD-ROM ein."
+ IDD_INSTALLING_VMWARE_TOOLSTITLE "VMware(r)-SVGA-Treiber-Installationsassistent"
+ IDD_INSTALLING_VMWARE_TOOLSSUBTITLE "Suchen und kopieren des VMware(r)-SVGA-Treibers."
+ IDD_CONFIGTITLE "VMware(r)-SVGA-Treiber-Installationsassistent"
IDD_CONFIGSUBTITLE "Whlen Sie die Bildschirmauflsung aus."
- IDD_INSTALLATION_FAILEDTITLE "VMware(r) SVGA Treiber Installationsassistent"
- IDD_INSTALLATION_FAILEDSUBTITLE "Die VMware(r) SVGA Treiber installation ist fehlgeschlagen."
- IDD_CHOOSEACTIONTITLE "VMware(r) SVGA Treiber Installationsassistent"
+ IDD_INSTALLATION_FAILEDTITLE "VMware(r)-SVGA-Treiber-Installationsassistent"
+ IDD_INSTALLATION_FAILEDSUBTITLE "Die VMware(r)-SVGA-Treiberinstallation ist fehlgeschlagen."
+ IDD_CHOOSEACTIONTITLE "VMware(r)-SVGA-Treiber-Installationsassistent"
IDD_CHOOSEACTIONSUBTITLE "Whlen Sie eine Option aus."
- IDD_SELECTDRIVERTITLE "VMware(r) SVGA Treiber Installationsassistent"
+ IDD_SELECTDRIVERTITLE "VMware(r)-SVGA-Treiber-Installationsassistent"
IDD_SELECTDRIVERSUBTITLE "Whlen Sie einen Treiber aus."
- IDD_DOUNINSTALLTITLE "VMware(r) SVGA Treiber Installationsassistent"
- IDD_DOUNINSTALLSUBTITLE "De-Installieren des Treibers."
+ IDD_DOUNINSTALLTITLE "VMware(r)-SVGA-Treiber-Installationsassistent"
+ IDD_DOUNINSTALLSUBTITLE "Deinstallieren des Treibers."
END
diff --git a/reactos/base/setup/vmwinst/vmwinst.h b/reactos/base/setup/vmwinst/vmwinst.h
index f0e9344a913..4fdb1014669 100644
--- a/reactos/base/setup/vmwinst/vmwinst.h
+++ b/reactos/base/setup/vmwinst/vmwinst.h
@@ -1,5 +1,4 @@
-#ifndef __VMWINST_H
-#define __VMWINST_H
+#pragma once
#ifndef PSCB_BUTTONPRESSED
#define PSCB_BUTTONPRESSED (3)
@@ -67,5 +66,3 @@
#define IDD_SELECTDRIVERSUBTITLE 352
#define IDD_DOUNINSTALLTITLE 361
#define IDD_DOUNINSTALLSUBTITLE 362
-
-#endif /* __VMWINST_H */
diff --git a/reactos/base/setup/welcome/lang/de-DE.rc b/reactos/base/setup/welcome/lang/de-DE.rc
index 4e96578839e..63998b0b0b0 100644
--- a/reactos/base/setup/welcome/lang/de-DE.rc
+++ b/reactos/base/setup/welcome/lang/de-DE.rc
@@ -53,7 +53,7 @@ STRINGTABLE DISCARDABLE
BEGIN
IDS_TOPICDESC0 "Installiert ReactOS auf ihrem Computer oder aktualisiert eine bestehende Installation."
IDS_TOPICDESC1 "Die ReactOS-CD durchsuchen."
- IDS_TOPICDESC2 "Klicken Sie um dieses Programm zu beenden."
+ IDS_TOPICDESC2 "Klicken Sie, um dieses Programm zu beenden."
// IDS_TOPICDESC3 "Topic description 3.\n\nDescribe topic 3 here."
// IDS_TOPICDESC4 "Topic description 4.\n\nDescribe topic 4 here."
// IDS_TOPICDESC5 "Topic description 5.\n\nDescribe topic 5 here."
diff --git a/reactos/base/shell/cmd/batch.h b/reactos/base/shell/cmd/batch.h
index c3a8a0bf4b5..841b09b814f 100644
--- a/reactos/base/shell/cmd/batch.h
+++ b/reactos/base/shell/cmd/batch.h
@@ -4,8 +4,7 @@
*
*/
-#ifndef _BATCH_H_INCLUDED_
-#define _BATCH_H_INCLUDED_
+#pragma once
typedef struct tagBATCHCONTEXT
{
@@ -50,5 +49,3 @@ VOID ExitBatch ();
INT Batch (LPTSTR, LPTSTR, LPTSTR, PARSED_COMMAND *);
LPTSTR ReadBatchLine();
VOID AddBatchRedirection(REDIRECTION **);
-
-#endif /* _BATCH_H_INCLUDED_ */
diff --git a/reactos/base/shell/cmd/cmd.h b/reactos/base/shell/cmd/cmd.h
index 5900e40ad5b..c6605de480f 100644
--- a/reactos/base/shell/cmd/cmd.h
+++ b/reactos/base/shell/cmd/cmd.h
@@ -21,8 +21,7 @@
* Thanks to Emanuele Aliberti!
*/
-#ifndef _CMD_H_INCLUDED_
-#define _CMD_H_INCLUDED_
+#pragma once
#include "config.h"
@@ -492,5 +491,3 @@ INT CommandWindow (LPTSTR);
int cmd_if(TCHAR *);
int cmd_pause(TCHAR *);
int cmd_shift(TCHAR *);
-
-#endif /* _CMD_H_INCLUDED_ */
diff --git a/reactos/base/shell/cmd/config.h b/reactos/base/shell/cmd/config.h
index 18e3093bfff..960f2ab40a4 100644
--- a/reactos/base/shell/cmd/config.h
+++ b/reactos/base/shell/cmd/config.h
@@ -9,8 +9,7 @@
*
*/
-#ifndef _CONFIG_H_INCLUDED_
-#define _CONFIG_H_INCLUDED_
+#pragma once
#define WIN32_LEAN_AND_MEAN
@@ -92,5 +91,3 @@
#ifdef NT4_INTERNAL_COMMANDS
#define INCLUDE_CMD_WINDOW
#endif
-
-#endif /* _CONFIG_H_INCLUDED_ */
diff --git a/reactos/base/shell/cmd/lang/de-DE.rc b/reactos/base/shell/cmd/lang/de-DE.rc
index de29914a295..a0aa97e842e 100644
--- a/reactos/base/shell/cmd/lang/de-DE.rc
+++ b/reactos/base/shell/cmd/lang/de-DE.rc
@@ -29,7 +29,7 @@ ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] Dateiname ...\n\
/D Verarbeitet auch die Ordner.\n\n\
ATTRIB ohne Parameter zeigt die derzeit gesetzten Attribute aller Dateien an."
-STRING_ALIAS_HELP, "Setzt, lscht oder zeigt Alias.\n\n\
+STRING_ALIAS_HELP, "Setzt, lscht oder zeigt ein Alias.\n\n\
ALIAS [alias=[command]]\n\n\
alias Name des Alias.\n\
command Text welcher fr den Alias zugeordnet wird.\n\n\
@@ -40,7 +40,7 @@ Setzt ein neues oder
Lscht ein Alias von der Alias-Liste:\n\
ALIAS da="
-STRING_BEEP_HELP, "Gibt einen beep-Ton durch den PC-Speaker aus.\n\nBEEP"
+STRING_BEEP_HELP, "Gibt einen Piepton durch den PC-Lautsprecher aus.\n\nBEEP"
STRING_CALL_HELP, "Ruft eine Batchdatei von einer anderen aus auf.\n\n\
CALL [Laufwerk:][Pfad]Dateiname [Batch-Parameter]\n\n\
@@ -54,7 +54,7 @@ CD [Laufwerk:][Pfad]\n\
CD[..|.]\n\n\
.. bergeordnetes Verzeichnis\n\
. vorhergehende Verzeichnis\n\n\
-Geben Sie CD Laufwerk: ein, um das aktuelle Verzeichnis auf dem angegebenen\n\
+Geben Sie CD-Laufwerk: ein, um das aktuelle Verzeichnis auf dem angegebenen\n\
Laufwerk anzuzeigen.\n\
Mit CD ohne Parameter wird das aktuelle Laufwerk und Verzeichnis angezeigt."
@@ -66,7 +66,7 @@ Der Befehl CHCP ohne Parameter zeigt die Nummer der aktuellen Codepage an."
STRING_CHOICE_HELP, "Wartet auf den Benutzer, welcher aus einer Auswahl eine Option whlen muss.\n\n\
CHOICE [/C[:]choices][/N][/S][/T[:]c,nn][text]\n\n\
/C[:]choices Die erlaubten Tasten festlegen. Standard-Tasten sind Y und N.\n\
- /N Zeigt choices und ? am ende des Promt-Strings NICHT an.\n\
+ /N Zeigt choices und ? am ende des Prompt-Strings NICHT an.\n\
/S Gro- und Kleinschreibung wird beachtet.\n\
/T[:]c,nn Standard-Auswahl wird auf c gesetzt nach nn Sekunden.\n\
text Zeigt eine Beschreibung an.\n\n\
@@ -74,9 +74,9 @@ ERRORLEVEL wird auf den Offset der Taste welche der Benutzer gedr
STRING_CLS_HELP, "Lscht den Bildschirminhalt.\n\nCLS"
-STRING_CMD_HELP1, "\nIntere Befehle verfgbar:\n"
+STRING_CMD_HELP1, "\nInterne Befehle verfgbar:\n"
-STRING_CMD_HELP2, "\nVerfgbare Features:"
+STRING_CMD_HELP2, "\nVerfgbare Funktionen:"
STRING_CMD_HELP3," [aliases]"
@@ -96,11 +96,11 @@ CMD [/[C|K] command][/P][/Q][/T:bf]\n\n\
(kann nicht beendet werden).\n\
/T:bf Setzt die Hintergrund- und Vordergrund-Farbe (siehe COLOR Befehl)."
-STRING_COLOR_HELP1, "Legt die standard Hinter- und Vordergrundfarben fr die Konsole fest.\n\n\
+STRING_COLOR_HELP1, "Legt die Standardhinter- und Vordergrundfarben fr die Konsole fest.\n\n\
COLOR [attr [/F]] \n\n\
attr Gibt die Farbattribute fr die Konsolenausgabe an.\n\
- /F fllt die Konsolenausgabe mit dem Farbattribut\n\n\
-Es gibt 3 Mglichkeiten die Farbe festzulegen:\n\
+ /F Fllt die Konsolenausgabe mit dem Farbattribut\n\n\
+Es gibt 3 Mglichkeiten, um die Farbe festzulegen:\n\
1) [bright] name on [bright] name (Nur die 4 ersten Buchstaben sind ntig)\n\
2) decimal on decimal\n\
3) two hex digits\n\n\
@@ -129,7 +129,7 @@ COPY [/V][/Y|/-Y][/A|/B] Quelle [/A|/B]\n\
vorhandener Zieldateien.\n\
/-Y Fordert beim berschreiben vorhandener Zieldateien zum\n\
Besttigen auf.\n\n\
-Die Option /Y ist mglicherweise in der Umgebungsvariablen COPYCMD.\n\
+Die Option /Y ist mglicherweise in der Umgebungsvariablen COPYCMD definiert.\n\
..."
STRING_DATE_HELP1, "\nGeben Sie das neue Datum ein (mm%cdd%cyyyy): "
@@ -148,22 +148,22 @@ STRING_DEL_HELP1, "L
DEL [/N /P /T /Q /W /Y /Z] Dateinamen ...\n\
DELETE [/N /P /T /Q /W /Y /Z] Dateinamen ...\n\
ERASE [/N /P /T /Q /W /Y /Z] Dateinamen ...\n\n\
- file Geben Sie die Dateinamen an welche Sie lschen mchten\n\n\
+ file Geben Sie die Dateinamen an, welche Sie lschen mchten\n\n\
/N Nichts.\n\
/P Fordert Sie vor dem Lschen jeder Datei zur Besttigung auf.\n\
/T Zeigt die Anzahl der gelschten Dateien und deren vorherigen Speicherplatzbedarf an.\n\
/Q Beenden.\n\
- /W Sicheres Lschen. Dateien werden mit Zufallszahlen berschrieben bevor sie gelscht werden.\n\
+ /W Sicheres Lschen. Dateien werden mit Zufallszahlen berschrieben, bevor sie gelscht werden.\n\
/Y Lscht alles (*.*) ohne Vorwarnung.\n\
- /Z Lscht versteckte, mit nur leserechten und Systemdateien.\n"
+ /Z Lscht versteckte Dateien mit Nur-Leserechten und Systemdateien.\n"
-STRING_DEL_HELP2, "Alle Dateien in diesem Verzeichnis werden gelscht!\nSind Sie sicher (Y/N)?"
+STRING_DEL_HELP2, "Alle Dateien in diesem Verzeichnis werden gelscht!\nSind Sie sich sicher (Y/N)?"
STRING_DEL_HELP3, " %lu Datei(en) gelscht\n"
STRING_DEL_HELP4, " %lu Datei(en) gelscht\n"
STRING_DELAY_HELP, "Pause fr n Sekunden oder Millisekunden\n\
DELAY [/m]n\n\n\
- /m Millisekunden ansonsten Sekunden\n"
+ /m Millisekunden, ansonsten Sekunden\n"
STRING_DIR_HELP1, "Listet die Dateien und Unterverzeichnisse eines Verzeichnisses auf.\n\n\
DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]\n\
@@ -199,7 +199,7 @@ DIR [Laufwerk:][Pfad][Dateiname] [/A[[:]attributes]] [/B] [/C] [/D] [/L] [/N]\n\
werden Leerzeichen angezeigt.\n\
/4 Zeigt das Jahr vierstellig an.\n\n\
Optionen knnen in der Umgebungsvariablen DIRCMD voreingestellt werden.\n\
-""-"" vor einer Option setzt die Voreinstellung ausser Kraft, z.B. DIR /-W."
+""-"" vor einer Option setzt die Voreinstellung auer Kraft, z.B. DIR /-W."
STRING_DIR_HELP2, " Datentrger in Laufwerk %c ist %s\n"
STRING_DIR_HELP3, " Datentrger in Laufwerk %c hat keine Bezeichnung\n"
@@ -209,25 +209,25 @@ STRING_DIR_HELP6, "%16i Verzeichnis(se), % 15s Bytes frei\n"
STRING_DIR_HELP7, "\n Verzeichnis von %s\n\n"
STRING_DIR_HELP8, "%16i Datei(en)% 14s Bytes\n"
-STRING_DIRSTACK_HELP1, "Speichert das aktuelle Verzeichnis fr den POPD Befehl, und\n\
-wechselt dann zu den festgelegten Verzeichnis.\n\n\
+STRING_DIRSTACK_HELP1, "Speichert das aktuelle Verzeichnis fr den POPD-Befehl und\n\
+wechselt dann in das festgelegte Verzeichnis.\n\n\
PUSHD [path | ..]\n\n\
- path Legt das Verzeichnis fest zu welchem gewechselt werden soll"
+ path Legt das Verzeichnis fest, in das gewechselt werden soll"
-STRING_DIRSTACK_HELP2, "Wechselt zu dem Verzeichnis welches vom PUSHD Befehl gespeichert wurde.\n\nPOPD"
+STRING_DIRSTACK_HELP2, "Wechselt in das Verzeichnis, das vom PUSHD-Befehl gespeichert wurde.\n\nPOPD"
STRING_DIRSTACK_HELP3, "Druckt den Inhalt des Verzeichnis-Stacks.\n\nDIRS"
STRING_DIRSTACK_HELP4, "Verzeichnis-Stack ist leer"
-STRING_ECHO_HELP1, "Sendet eine Nachricht ohne den Zeilenvorschub und Wagenrcklauf zu bettigen.\n\n\
+STRING_ECHO_HELP1, "Sendet eine Nachricht, ohne den Zeilenvorschub und Wagenrcklauf zu bettigen.\n\n\
ECHOS message"
-STRING_ECHO_HELP2, "Sendet eine Nachricht zur Standard Fehlerausgabe.\n\n\
+STRING_ECHO_HELP2, "Sendet eine Nachricht zur Standard-Fehlerausgabe.\n\n\
ECHOERR Nachricht\n\
ECHOERR. gibt eine Leerzeile aus"
-STRING_ECHO_HELP3, "Sendet eine Nachricht zur Standard Fehlerausgabe ohne den Zeilenvorschub und Wagenrcklauf zu bettigen.\n\n\
+STRING_ECHO_HELP3, "Sendet eine Nachricht zur Standard-Fehlerausgabe, ohne den Zeilenvorschub und Wagenrcklauf zu bettigen.\n\n\
ECHOSERR Nachricht"
STRING_ECHO_HELP4, "Zeigt Meldungen an oder schaltet die Befehlsanzeige ein ""ON"" oder aus ""OFF"".\n\n\
@@ -252,11 +252,11 @@ statt %Variable an."
STRING_FREE_HELP1, "\nVolume in Laufwerk %s ist %-11s\n\
Volume-Seriennummer: %s\n\
- %16s bytes Speicherkapazitt\n\
- %16s bytes belegter Speicher\n\
- %16s bytes freier Speicher\n"
+ %16s Byte Speicherkapazitt\n\
+ %16s Byte belegter Speicher\n\
+ %16s Byte freier Speicher\n"
-STRING_FREE_HELP2, "Zeigt die Volumesinformationen an.\n\nFREE [Laufwerk: ...]"
+STRING_FREE_HELP2, "Zeigt die Volumeinformationen an.\n\nFREE [Laufwerk: ...]"
STRING_IF_HELP1, "Verarbeitet Ausdrcke in einer Batchdatei abhngig von Bedingungen.\n\n\
IF [NOT] ERRORLEVEL Nummer Befehl\n\
@@ -292,12 +292,12 @@ STRING_LOCALE_HELP1, "Aktuelle Zeit: "
STRING_MKDIR_HELP, "Erzeugt ein Verzeichnis.\n\n\
MKDIR [Laufwerk:]Pfad\nMD [Laufwerk:]Pfad"
-STRING_MKLINK_HELP, "Creates a filesystem link object.\n\n\
-MKLINK [/D | /H | /J] linkname target\n\n\
- /D Indicates that the symbolic link target is a directory.\n\
- /H Create a hard link.\n\
- /J Create a directory junction.\n\n\
-If neither /H or /J is specified, a symbolic link is created."
+STRING_MKLINK_HELP, "Erzeugt eine Dateisystemverknpfung.\n\n\
+MKLINK [/D | /H | /J] Linkname Ziel\n\n\
+ /D Gibt an, dass das Ziel der Verknpfung ein Verzeichnis ist.\n\
+ /H Erzeugt einen Hardlink.\n\
+ /J Erzeugt einen Junction Point.\n\n\
+Wenn weder /H noch /J angegeben werden, wird eine symbolische Verknpfung angelegt."
STRING_MEMMORY_HELP1, "Zeigt die Gre des Systemspeicher an.\n\nMEMORY"
@@ -307,7 +307,7 @@ STRING_MEMMORY_HELP2, "\n %12s%% Speicher geladen.\n\n\
%13s bytes Auslagerungsdatei (insgesamt)\n\
%13s bytes verfgbare Auslagerungsdatei\n\n\
%13s bytes Virtueller Speicher (insgesamt)\n\
- %13s bytes verfgbarer Virtueller Speicher\n"
+ %13s bytes verfgbarer virtueller Speicher\n"
STRING_MISC_HELP1, "Drcken Sie eine beliebige Taste . . .\n"
@@ -320,9 +320,9 @@ Um ein Verzeichnis umzubenennen:\n\
MOVE [/N][Laufwerk:][Pfad]Verzeichnis1 Verzeichnis2\n\n\
[Laufwerk:][Pfad]Datei1 Bezeichnet den Pfad und den Namen der zu\n\
verschiebenden Datei(en).\n\
- /N Nichts. Tut alles ausser Dateien/Verzeichnisse verschieben.\n\n\
+ /N Nichts. Tut alles auer Dateien/Verzeichnisse verschieben.\n\n\
Derzeitige Einschrnkung:\n\
-Es ist noch nicht mglich Objekte ber die Laufwerksgrenzen hinaus zu verschieben.\n"
+Es ist noch nicht mglich, Objekte ber die Laufwerksgrenzen hinaus zu verschieben.\n"
STRING_MSGBOX_HELP, "Zeigt ein Fenster und wartet auf eine Eingabe vom Benutzer.\n\n\
MSGBOX type ['title'] prompt\n\n\
@@ -331,7 +331,7 @@ type Button anzeigen\n\
YESNO, YESNOCANCEL\n\
title Titel des Fensters\n\
prompt Text der in dem Fenster angezeigt wird\n\n\n\
-ERRORLEVEL is set according the button pressed:\n\n\
+ERRORLEVEL wird je nach dem gedrckten Button gesetzt:\n\n\
YES : 10 | NO : 11\n\
OK : 10 | CANCEL : 12\n"
@@ -387,9 +387,9 @@ REN [/E /N /P /Q /S /T] alter_Name ... neuer_Name\n\n\
/T Zeigt die Anzahl der umbenannten Dateien an.\n\n\
Nutzen Sie den 'move' Befehl falls Sie Objekte verschieben wollen.\n"
-STRING_REN_HELP2, " %lu Datei umbennant\n"
+STRING_REN_HELP2, " %lu Datei umbenannt\n"
-STRING_REN_HELP3, " %lu Dateien umbennant\n"
+STRING_REN_HELP3, " %lu Dateien umbenannt\n"
STRING_REPLACE_HELP1, "Ersetzt Dateien.\n\n\
REPLACE [Laufwerk1:][Pfad1]Dateiname [Laufwerk2:][Pfad2] [/A] [/P] [/R] [/W]\n\
@@ -405,7 +405,7 @@ REPLACE [Laufwerk1:][Pfad1]Dateiname [Laufwerk2:][Pfad2] [/P] [/R] [/S] [/W] [/U
/S Ersetzt Dateien in allen Unterordnern des Ziel-\n\
pfades. Kann nicht mit Parameter /A genutzt\n\
werden.\n\
- /W Wartet vor dem Start bis ein Datentrger\n\
+ /W Wartet vor dem Start, bis ein Datentrger\n\
eingelegt wurde.\n\
/U Ersetzt (aktualisiert) nur Dateien, die lter\n\
sind als die Quelldaten. Kann nicht mit Paramater\n\
@@ -495,7 +495,7 @@ STRING_VERIFY_HELP2, "VERIFY ist %s.\n"
STRING_VERIFY_HELP3, "VERIFY kann nur ON oder OFF sein"
-STRING_VERSION_HELP1, "Zeigt Shell Informationen an.\n\n\
+STRING_VERSION_HELP1, "Zeigt Shellinformationen an.\n\n\
VER [/C][/R][/W]\n\n\
/C Zeigt die Credits an.\n\
/R Zeigt die Weitergabeinformationen an.\n\
@@ -521,9 +521,9 @@ STRING_VERSION_HELP5, "\nSenden Sie Bug-Reports an .\n\
Updates sind auf der offiziellen ReactOS-Webseite verfgbar:\n\
http://www.reactos.org"
-STRING_VERSION_HELP6, "\nFreeDOS Version programmiert von:\n"
+STRING_VERSION_HELP6, "\nFreeDOS-Version programmiert von:\n"
-STRING_VERSION_HELP7, "\nReactOS Version programmiert von:\n"
+STRING_VERSION_HELP7, "\nReactOS-Version programmiert von:\n"
STRING_VOL_HELP1, " Datentrger im Laufwerk %c ist %s\n"
STRING_VOL_HELP2, " Datentrger im Laufwerk %c hat keine Bezeichnung.\n"
@@ -554,7 +554,7 @@ STRING_HELP1, "
? Listet alle Befehle auf (ohne Erklrung).\n\
ALIAS Setzt, lscht oder zeigt den Alias.\n\
ATTRIB Zeigt Dateiattribute an bzw. ndert sie.\n\
-BEEP Gibt einen piep-Ton durch den PC-Speaker aus.\n\
+BEEP Gibt einen Piepton durch den PC-Speaker aus.\n\
CALL Ruft eine Batchdatei aus einer anderen Batchdatei heraus auf.\n\
CD Zeigt den Namen des aktuellen Verzeichnisses an bzw. ndert diesen.\n\
CHCP Zeigt die aktive Codepagenummer an bzw. legt diese fest.\n\
@@ -581,7 +581,7 @@ IF Verarbeitet Ausdr
LABEL Erstellt, ndert oder lscht die Bezeichnung eines Volumes.\n\
MD Erstellt ein Verzeichnis.\n\
MKDIR Erstellt ein Verzeichnis.\n\
-MKLINK Creates a filesystem link object.\n\
+MKLINK Erzeugt eine Dateisystemverknpfung.\n\
MOVE Verschiebt eine oder mehrere Dateien von einem Verzeichnis in\n\
ein anderes.\n\
PATH Legt den Suchpfad fr ausfhrbare Dateien fest oder zeigt diesen an.\n\
@@ -615,9 +615,9 @@ STRING_COPY_OPTION, "JNA"
STRING_ALIAS_ERROR, "Die Befehlszeile ist zu lange nach der Alias-Erweiterung!\n"
STRING_ASSOC_ERROR, "Dateizuordnung fr Erweiterung %s nicht gefunden\n"
-STRING_BATCH_ERROR, "Es trat ein Fehler auf, whrend die Batch-Datei geffnet wurde.\n"
-STRING_CHCP_ERROR1, "Aktive Code-Page: %u\n"
-STRING_CHCP_ERROR4, "Ungltige Code-Page\n"
+STRING_BATCH_ERROR, "Es trat ein Fehler auf, whrend die Batchdatei geffnet wurde.\n"
+STRING_CHCP_ERROR1, "Aktive Codepage: %u\n"
+STRING_CHCP_ERROR4, "Ungltige Codepage\n"
STRING_CHOICE_ERROR, "Ungltige Option. Erwartetes Format: /C[:]options"
STRING_CHOICE_ERROR_TXT, "Ungltige Option. Erwartetes Format: /T[:]c,nn"
STRING_CHOICE_ERROR_OPTION, "Ungltige Option: %s"
@@ -628,7 +628,7 @@ STRING_CMD_ERROR3, "%s kann nicht in die Datei umgeleitet werden \n"
STRING_CMD_ERROR4, "Ausfhrend %s...\n"
STRING_CMD_ERROR5, "Ausfhrend cmdexit.bat...\n"
STRING_COLOR_ERROR1, "Fehler: Hinter- und Vordergrund knnen nicht die selben Farben haben!"
-STRING_COLOR_ERROR2, "Fehler in der Farb-Angabe"
+STRING_COLOR_ERROR2, "Fehler in der Farbangabe"
STRING_COLOR_ERROR3, "Farbe %x\n"
STRING_COLOR_ERROR4, "Fehler: Die selben Farben!"
STRING_CONSOLE_ERROR, "Unbekannter Fehler: %d\n"
@@ -679,19 +679,19 @@ STRING_REPLACE_ERROR5, "Zugriff verweigert - %s\n"
STRING_REPLACE_ERROR6, "Keine Dateien gefunden - %s\n"
STRING_REPLACE_ERROR7, "Erweiterter Fehler 32\n"
STRING_REACTOS_VERSION, "ReactOS Operating System [Version %s-%s]\n"
-STRING_CMD_SHELLINFO, "\nReactOS Befehlszeilen Interpreter\nVersion %s %s"
+STRING_CMD_SHELLINFO, "\nReactOS-Befehlszeileninterpreter\nVersion %s %s"
STRING_VERSION_RUNVER, " luft in %s"
STRING_COPY_FILE , " %d Datei(en) kopiert\n"
-STRING_DELETE_WIPE, "gewiped"
+STRING_DELETE_WIPE, "sicher gelscht"
STRING_FOR_ERROR, "ungltige Variablenangabe."
STRING_SCREEN_COL, "ungltige Spalten-Angabe"
STRING_SCREEN_ROW, "ungltige Zeilen-Angabe"
STRING_TIMER_TIME "Timer %d ist %s: "
-STRING_MKLINK_CREATED_SYMBOLIC, "Symbolic link created for %s <<===>> %s\n"
-STRING_MKLINK_CREATED_HARD, "Hard link created for %s <<===>> %s\n"
-STRING_MKLINK_CREATED_JUNCTION, "Junction created for %s <<===>> %s\n"
-STRING_MORE, "More? "
-STRING_CANCEL_BATCH_FILE, "\r\nCtrl-Break pressed. Cancel batch file? (Ja/Nein/Alle) "
+STRING_MKLINK_CREATED_SYMBOLIC, "Symbolische Verknpfung erstellt fr %s <<===>> %s\n"
+STRING_MKLINK_CREATED_HARD, "Hardlink erstellt fr %s <<===>> %s\n"
+STRING_MKLINK_CREATED_JUNCTION, "Junction Point erstellt fr %s <<===>> %s\n"
+STRING_MORE, "Mehr? "
+STRING_CANCEL_BATCH_FILE, "\r\nStrg-Pause gedrckt. Batchvorgang abbrechen? (Ja/Nein/Alle) "
STRING_INVALID_OPERAND, "Ungltiger Operand."
STRING_EXPECTED_CLOSE_PAREN, "Erwartet ')'."
STRING_EXPECTED_NUMBER_OR_VARIABLE,"Erwartet Nummer oder Variablennamen."
diff --git a/reactos/base/shell/cmd/lang/pl-PL.rc b/reactos/base/shell/cmd/lang/pl-PL.rc
index 58bdadfc262..f8d2cb79a02 100644
--- a/reactos/base/shell/cmd/lang/pl-PL.rc
+++ b/reactos/base/shell/cmd/lang/pl-PL.rc
@@ -8,13 +8,13 @@ LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
STRINGTABLE DISCARDABLE
BEGIN
-STRING_ASSOC_HELP, "Modify file extension associations.\n\n\
-assoc [.ext[=[FileType]]]\n\
+STRING_ASSOC_HELP, "Modyfikuje skojarzenia rozszerze plikw.\n\n\
+assoc [.ext[=[typPliku]]]\n\
\n\
-assoc (print all associations)\n\
-assoc .ext (print specific association)\n\
-assoc .ext= (remove specific association)\n\
-assoc .ext=FileType (add new association)\n"
+assoc (wywietla wszystkie skojarzenia)\n\
+assoc .ext (wywietla okrelone skojarzenie)\n\
+assoc .ext= (usuwa okrelone skojarzenie)\n\
+assoc .ext=typPliku (dodaje nowe skojarzenie)\n"
STRING_ATTRIB_HELP, "Wywietla lub zmienia atrybuty plikw.\n\n\
ATTRIB [+R | -R] [+A | -A] [+S | -S] [+H | -H] nazwa_pliku ...\n\
@@ -298,12 +298,12 @@ STRING_LOCALE_HELP1, "Czas bie
STRING_MKDIR_HELP, "Tworzy katalog.\n\n\
MKDIR [napd:]cieka\nMD [napd:]cieka"
-STRING_MKLINK_HELP, "Creates a filesystem link object.\n\n\
-MKLINK [/D | /H | /J] linkname target\n\n\
- /D Indicates that the symbolic link target is a directory.\n\
- /H Create a hard link.\n\
- /J Create a directory junction.\n\n\
-If neither /H or /J is specified, a symbolic link is created."
+STRING_MKLINK_HELP, "Tworzy dowizanie obiektu w systemie plikw.\n\n\
+MKLINK [/D | /H | /J] nazwa_linku element_docelowy\n\n\
+ /D Oznacza, e dowizanie symboliczne elementu docelowego jest katalogiem.\n\
+ /H Tworzy dowizanie twarde.\n\
+ /J Tworzy punkt poczenia katalogw.\n\n\
+Jeli nie zostay uyte zarwno /H jak i /J, zostanie utworzone dowizanie symboliczne."
STRING_MEMMORY_HELP1, "Wywietla ilo pamici systemowej.\n\nMEMORY"
@@ -546,7 +546,7 @@ IF Przetwarzanie warunkowe w programach wsadowych.\n\
LABEL Tworzy, zmienia lub kasuje etykiet woluminu w danym napdzie.\n\
MD Tworzy katalog.\n\
MKDIR Tworzy katalog.\n\
-MKLINK Creates a filesystem link object.\n\
+MKLINK Tworzy dowizanie obiektu w systemie plikw.\n\
MOVE Przenosi jeden lub wicej plikw z jednego katalogu do drugiego.\n\
PATH Wywietla lub ustawia cieki dostpu dla programw.\n\
PAUSE Zawiesza przetwarzanie programu wsadowego i wywietla komunikat.\n\
@@ -656,11 +656,11 @@ STRING_FOR_ERROR, "z
STRING_SCREEN_COL, "nieprawidowy numer kolumny"
STRING_SCREEN_ROW, "nieprawidowy numer rzdu"
STRING_TIMER_TIME "Stoper %d czas - %s: "
-STRING_MKLINK_CREATED_SYMBOLIC, "Symbolic link created for %s <<===>> %s\n"
-STRING_MKLINK_CREATED_HARD, "Hard link created for %s <<===>> %s\n"
-STRING_MKLINK_CREATED_JUNCTION, "Junction created for %s <<===>> %s\n"
-STRING_MORE, "More? "
-STRING_CANCEL_BATCH_FILE, "\r\nCtrl-Break pressed. Cancel batch file? (Tak/Nie/Zawsze) "
+STRING_MKLINK_CREATED_SYMBOLIC, "Dowizanie symboliczne utworzone dla %s <<===>> %s\n"
+STRING_MKLINK_CREATED_HARD, "Dowizanie twarde utworzone dla %s <<===>> %s\n"
+STRING_MKLINK_CREATED_JUNCTION, "Punkt dowizania katalogw utworzony dla %s <<===>> %s\n"
+STRING_MORE, "Wicej? "
+STRING_CANCEL_BATCH_FILE, "\r\nWcinito Ctrl-Break. Anulowa wykonanie pliku wsadowego? (Tak/Nie/Zawsze) "
STRING_INVALID_OPERAND, "Nieprawidowy argument operatora."
STRING_EXPECTED_CLOSE_PAREN, "Oczekiwano ')'."
diff --git a/reactos/base/shell/explorer-new/comcsup.h b/reactos/base/shell/explorer-new/comcsup.h
index 5513ecaa25f..d8a437b928e 100644
--- a/reactos/base/shell/explorer-new/comcsup.h
+++ b/reactos/base/shell/explorer-new/comcsup.h
@@ -1,5 +1,4 @@
-#ifndef __COMCSUP_H
-#define __COMCSUP_H
+#pragma once
/*
******************************************************************************
@@ -49,5 +48,3 @@ static __inline impl##Impl * \
impl##Impl_from_##iface (iface *ifc) { \
return (impl##Impl *)((ULONG_PTR)ifc - FIELD_OFFSET(impl##Impl, vtbl)); \
}
-
-#endif /* __COMCSUP_H */
diff --git a/reactos/base/shell/explorer-new/lang/de-DE.rc b/reactos/base/shell/explorer-new/lang/de-DE.rc
index 2445bb2d96e..80aefc0c32a 100644
--- a/reactos/base/shell/explorer-new/lang/de-DE.rc
+++ b/reactos/base/shell/explorer-new/lang/de-DE.rc
@@ -5,7 +5,7 @@ BEGIN
POPUP ""
BEGIN
MENUITEM SEPARATOR
- MENUITEM "Task Manager", ID_SHELL_CMD_OPEN_TASKMGR
+ MENUITEM "Taskmanager", ID_SHELL_CMD_OPEN_TASKMGR
MENUITEM SEPARATOR
MENUITEM "Taskbar fi&xieren", ID_LOCKTASKBAR
MENUITEM "E&igenschaften", ID_SHELL_CMD_PROPERTIES
@@ -56,60 +56,60 @@ END
IDD_TASKBARPROP_TASKBAR DIALOGEX 0, 0, 252, 218
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Taskbar"
+CAPTION "Taskleiste"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- GROUPBOX "Taskbar appearance", IDC_STATIC, 6,6,240,121
+ GROUPBOX "Taskleiste", IDC_STATIC, 6,6,240,121
CONTROL "", IDC_TASKBARPROP_TASKBARBITMAP, "Static", SS_BITMAP | SS_SUNKEN, 13,18,224,21
- AUTOCHECKBOX "&Lock the taskbar", IDC_TASKBARPROP_LOCK, 13,45,200,10
- AUTOCHECKBOX "A&uto-hide the taskbar", IDC_TASKBARPROP_HIDE, 13,58,200,10
- AUTOCHECKBOX "Keep the &taskbar on top of other windows", IDC_TASKBARPROP_ONTOP, 13,71,200,10
- AUTOCHECKBOX "&Group similar taskbar buttons", IDC_TASKBARPROP_GROUP, 13,84,200,10
- AUTOCHECKBOX "Show &Quick Launch", IDC_TASKBARPROP_SHOWQL, 13,97,200,10
- AUTOCHECKBOX "&Show window previews (thumbnails)", IDC_TASKBARPROP_WNDPREV, 13,110,200,10
+ AUTOCHECKBOX "Task&leiste fixieren", IDC_TASKBARPROP_LOCK, 13,45,200,10
+ AUTOCHECKBOX "Taskleiste a&utom. verstecken", IDC_TASKBARPROP_HIDE, 13,58,200,10
+ AUTOCHECKBOX "&Taskleiste immer im Vordergrund halten", IDC_TASKBARPROP_ONTOP, 13,71,200,10
+ AUTOCHECKBOX "hnliche Buttons &gruppieren", IDC_TASKBARPROP_GROUP, 13,84,200,10
+ AUTOCHECKBOX "Schnellstartleiste &anzeigen", IDC_TASKBARPROP_SHOWQL, 13,97,200,10
+ AUTOCHECKBOX "Fenstervor&schau anzeigen", IDC_TASKBARPROP_WNDPREV, 13,110,200,10
END
IDD_TASKBARPROP_STARTMENU DIALOGEX 0, 0, 252, 218
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Start Menu"
+CAPTION "Startmen"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- AUTORADIOBUTTON "&Start menu", IDC_TASKBARPROP_STARTMENU, 7,7,105,10
- LTEXT "This menu style gives you easy access to your folders, favorite programs, and search.", IDC_STATIC, 20,17,150,24, WS_DISABLED
- PUSHBUTTON "&Customize...", IDC_TASKBARPROP_STARTMENUCUST, 192,4,53,14, WS_DISABLED
- AUTORADIOBUTTON "Classic Start &menu", IDC_TASKBARPROP_STARTMENUCLASSIC, 7,47,105,10, WS_DISABLED
- LTEXT "This menu style gives you the classic look and functionality",-1,20,57,150,24, WS_DISABLED
- PUSHBUTTON "&Customize...", IDC_TASKBARPROP_STARTMENUCLASSICCUST, 192,44,53,14, WS_DISABLED
- GROUPBOX "Privacy",IDC_STATIC, 7,100,238,42
- AUTOCHECKBOX "Store and display a list of recently opened &files", IDC_TASKBARPROP_RECENTFILES, 14,114,224,10, WS_DISABLED
- AUTOCHECKBOX "Store and display a list of recently opened &programs",IDC_TASKBARPROP_RECENTFOLDERS, 14,128,224,10, WS_DISABLED
+ AUTORADIOBUTTON "Modernes &Startmen", IDC_TASKBARPROP_STARTMENU, 7,7,105,10
+ LTEXT "Dieser Stil gewhrt Ihnen einfachen Zugriff auf Ihre Verzeichnisse, bevorzugten Programme und die Suchfunktion.", IDC_STATIC, 20,17,150,24, WS_DISABLED
+ PUSHBUTTON "An&passen...", IDC_TASKBARPROP_STARTMENUCUST, 192,4,53,14, WS_DISABLED
+ AUTORADIOBUTTON "Klassisches Start&men", IDC_TASKBARPROP_STARTMENUCLASSIC, 7,47,105,10, WS_DISABLED
+ LTEXT "Dieser Stil beinhaltet das klassische Aussehen mit gewohnter Funktionalitt",-1,20,57,150,24, WS_DISABLED
+ PUSHBUTTON "An&passen...", IDC_TASKBARPROP_STARTMENUCLASSICCUST, 192,44,53,14, WS_DISABLED
+ GROUPBOX "Privatsphre",IDC_STATIC, 7,100,238,42
+ AUTOCHECKBOX "Eine Liste zuletzt ge&ffneter Dateien fhren", IDC_TASKBARPROP_RECENTFILES, 14,114,224,10, WS_DISABLED
+ AUTOCHECKBOX "Eine Liste zuletzt gestarteter &Programme fhren",IDC_TASKBARPROP_RECENTFOLDERS, 14,128,224,10, WS_DISABLED
END
IDD_TASKBARPROP_NOTIFICATION DIALOGEX 0, 0, 252, 218
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Notification Area"
+CAPTION "Benachrichtigungsfeld"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "", IDC_TASKBARPROP_NOTIFICATIONBITMAP, "Static", SS_BITMAP | SS_SUNKEN,7,6,238,21, WS_DISABLED
- GROUPBOX "Icons", IDC_STATIC, 6,33,240,58, WS_DISABLED
- LTEXT "You can keep the notification area uncluttered by hiding icons that you have not clicked recently.", IDC_STATIC, 13,48,223,16, WS_DISABLED
- AUTOCHECKBOX "&Hide inactive icons", IDC_TASKBARPROP_HIDEICONS, 13,70,125,10, WS_DISABLED
- PUSHBUTTON "&Customize...", IDC_TASKBARPROP_ICONCUST, 188,70,50,14, WS_DISABLED
- GROUPBOX "System icons", IDC_STATIC, 6,97,240,84, WS_DISABLED
- LTEXT "Select which system icons to always show.", IDC_STATIC, 13,112,223,16, WS_DISABLED
- AUTOCHECKBOX "Cloc&k", IDC_TASKBARPROP_CLOCK, 13,126,200,10, WS_DISABLED
- AUTOCHECKBOX "&Volume", IDC_TASKBARPROP_VOLUME, 13,139,200,10, WS_DISABLED
- AUTOCHECKBOX "&Network", IDC_TASKBARPROP_NETWORK, 13,152,200,10, WS_DISABLED
- AUTOCHECKBOX "&Power", IDC_TASKBARPROP_POWER, 13,164,200,10, WS_DISABLED
+ GROUPBOX "Symbole", IDC_STATIC, 6,33,240,58, WS_DISABLED
+ LTEXT "Das Benachrichtigungsfeld kann bersichtlich gestaltet werden, indem selten verwendete Symbole ausgeblendet werden.", IDC_STATIC, 13,48,223,16, WS_DISABLED
+ AUTOCHECKBOX "&Inaktive Symbole ausblenden", IDC_TASKBARPROP_HIDEICONS, 13,70,125,10, WS_DISABLED
+ PUSHBUTTON "An&passen...", IDC_TASKBARPROP_ICONCUST, 188,70,50,14, WS_DISABLED
+ GROUPBOX "Systemsymbole", IDC_STATIC, 6,97,240,84, WS_DISABLED
+ LTEXT "Whlen Sie die Systemsymbole aus, die immer angezeigt werden sollen.", IDC_STATIC, 13,112,223,16, WS_DISABLED
+ AUTOCHECKBOX "&Uhr", IDC_TASKBARPROP_CLOCK, 13,126,200,10, WS_DISABLED
+ AUTOCHECKBOX "Lautstr&ke", IDC_TASKBARPROP_VOLUME, 13,139,200,10, WS_DISABLED
+ AUTOCHECKBOX "&Netzwerk", IDC_TASKBARPROP_NETWORK, 13,152,200,10, WS_DISABLED
+ AUTOCHECKBOX "&Akku", IDC_TASKBARPROP_POWER, 13,164,200,10, WS_DISABLED
END
IDD_TASKBARPROP_TOOLBARS DIALOGEX 0, 0, 252, 218
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Toolbars"
+CAPTION "Symbolleisten"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- LTEXT "Select which toolbars to add to the taskbar.", IDC_STATIC, 7,7,223,12, WS_DISABLED
+ LTEXT "Whlen Sie aus, welche Symbolleisten der Taskleiste hinzugefgt werden sollen.", IDC_STATIC, 7,7,223,12, WS_DISABLED
CONTROL "", IDC_TASKBARPROP_DESKBANDLIST, "SysTreeView32",WS_BORDER | WS_TABSTOP | WS_DISABLED, 7,20,236,160, WS_EX_CLIENTEDGE
END
@@ -118,11 +118,11 @@ STRINGTABLE DISCARDABLE
BEGIN
IDS_START "Start"
IDS_PROPERTIES "E&igenschaften"
- IDS_OPEN_ALL_USERS "ffnen &Alle Benutzer"
- IDS_EXPLORE_ALL_USERS "Explorer A&lle Benutzer"
+ IDS_OPEN_ALL_USERS "ffnen (&Alle Benutzer)"
+ IDS_EXPLORE_ALL_USERS "Explorer (A&lle Benutzer)"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_TASKBAR_STARTMENU_PROP_CAPTION "Taskbar and Start Menu Properties"
+ IDS_TASKBAR_STARTMENU_PROP_CAPTION "Taskleisten- und Startmeneinstellungen"
END
diff --git a/reactos/base/shell/explorer-new/resource.h b/reactos/base/shell/explorer-new/resource.h
index aeed8061345..0ab9222f778 100644
--- a/reactos/base/shell/explorer-new/resource.h
+++ b/reactos/base/shell/explorer-new/resource.h
@@ -1,5 +1,4 @@
-#ifndef __RESOURCE_H
-#define __RESOURCE_H
+#pragma once
#define IDC_STATIC -1
@@ -98,5 +97,3 @@
#define IDC_TASKBARPROP_DESKBANDLIST 2301
#define IDS_TASKBAR_STARTMENU_PROP_CAPTION 2200
-
-#endif /* __RESOURCE_H */
diff --git a/reactos/base/shell/explorer-new/todo.h b/reactos/base/shell/explorer-new/todo.h
index f0597e60a8b..8efcbe52bb5 100644
--- a/reactos/base/shell/explorer-new/todo.h
+++ b/reactos/base/shell/explorer-new/todo.h
@@ -1,5 +1,4 @@
-#ifndef __TODO_H
-#define __TODO_H
+#pragma once
#ifdef INTERFACE
#undef INTERFACE
@@ -40,5 +39,3 @@ static const GUID SID_HACK_SMenuPopup = {0xD1E7AFEB,0x6A2E,0x11D0,{0x8C,0x78,0x0
#define IDeskBarClient_UIActivateDBC(T,a) (T)->lpVtbl->UIActivateDBC(T,a)
#define IDeskBarClient_GetSize(T,a,b) (T)->lpVtbl->GetSize(T,a,b)
#endif
-
-#endif /* __TODO_H */
diff --git a/reactos/base/shell/explorer-new/undoc.h b/reactos/base/shell/explorer-new/undoc.h
index 46d829eae8c..d2cf78decd7 100644
--- a/reactos/base/shell/explorer-new/undoc.h
+++ b/reactos/base/shell/explorer-new/undoc.h
@@ -1,5 +1,4 @@
-#ifndef _EXPLORER_UNDOC__H
-#define _EXPLORER_UNDOC__H
+#pragma once
/*
* Undocumented stuff
@@ -53,5 +52,3 @@ EXTERN_C const GUID CLSID_RebarBandSite;
HRESULT WINAPI SHInvokeDefaultCommand(HWND,IShellFolder*,LPCITEMIDLIST);
HRESULT WINAPI SHPropertyBag_ReadPOINTL(IPropertyBag*,LPCWSTR,POINTL*);
-
-#endif /* _EXPLORER_UNDOC__H */
diff --git a/reactos/base/shell/explorer/explorer-de.rc b/reactos/base/shell/explorer/explorer-de.rc
index d7062378467..658b0ddb334 100644
--- a/reactos/base/shell/explorer/explorer-de.rc
+++ b/reactos/base/shell/explorer/explorer-de.rc
@@ -64,7 +64,7 @@ BEGIN
END
POPUP "&Hilfe"
BEGIN
- MENUITEM "Explorer &FAQ...", ID_EXPLORER_FAQ
+ MENUITEM "Explorer-&FAQ...", ID_EXPLORER_FAQ
MENUITEM "&ber ReactOS Explorer...", ID_ABOUT_EXPLORER
MENUITEM "ber React&OS...", ID_ABOUT_WINDOWS
END
@@ -76,7 +76,7 @@ BEGIN
BEGIN
MENUITEM "&Ausfhren...", ID_EXECUTE
MENUITEM SEPARATOR
- MENUITEM "&Schliessen", ID_FILE_EXIT
+ MENUITEM "&Schlieen", ID_FILE_EXIT
END
POPUP "&Ansicht"
BEGIN
@@ -94,9 +94,9 @@ BEGIN
END
POPUP "&Hilfe"
BEGIN
- MENUITEM "Explorer &FAQ...", ID_EXPLORER_FAQ
+ MENUITEM "Explorer-&FAQ...", ID_EXPLORER_FAQ
MENUITEM "&ber Explorer...", ID_ABOUT_EXPLORER
- MENUITEM "ber &OS...", ID_ABOUT_WINDOWS
+ MENUITEM "ber React&OS...", ID_ABOUT_WINDOWS
END
END
@@ -105,7 +105,7 @@ BEGIN
POPUP ""
BEGIN
MENUITEM "&Einstellungen...", ID_DESKTOPBAR_SETTINGS
- MENUITEM "&Task Manager...", ID_TASKMGR
+ MENUITEM "&Taskmanager...", ID_TASKMGR
MENUITEM SEPARATOR
MENUITEM "&ber Explorer...", ID_ABOUT_EXPLORER
END
@@ -129,7 +129,7 @@ BEGIN
POPUP ""
BEGIN
MENUITEM "ffne &Lautstrkeregler", ID_TRAY_VOLUME
- MENUITEM "Editieren der Audio-&Einstellungen", ID_VOLUME_PROPERTIES
+ MENUITEM "ndern der Audio-&Einstellungen", ID_VOLUME_PROPERTIES
END
END
@@ -177,27 +177,27 @@ FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Bitte whlen Sie den gewnschten Platzierungs-Algorithmus fr die Desktop-Symbole aus:",
IDC_STATIC,7,7,197,23
- CONTROL "left/top dwn",IDC_ICON_ALIGN_0,"Button",BS_OWNERDRAW |
+ CONTROL "li./ob. abw.",IDC_ICON_ALIGN_0,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,7,35,46,44
- CONTROL "left/top right",IDC_ICON_ALIGN_1,"Button",BS_OWNERDRAW |
+ CONTROL "li./ob. re.",IDC_ICON_ALIGN_1,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,57,35,46,44
- CONTROL "right/top left",IDC_ICON_ALIGN_2,"Button",BS_OWNERDRAW |
+ CONTROL "re./ob. li.",IDC_ICON_ALIGN_2,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,110,35,46,44
- CONTROL "rig./top dwn",IDC_ICON_ALIGN_3,"Button",BS_OWNERDRAW |
+ CONTROL "re./ob. abw.",IDC_ICON_ALIGN_3,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,159,35,46,44
- CONTROL "left/bot. up",IDC_ICON_ALIGN_4,"Button",BS_OWNERDRAW |
+ CONTROL "li./unt. aufw.",IDC_ICON_ALIGN_4,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,7,83,46,44
- CONTROL "left/bot. right",IDC_ICON_ALIGN_5,"Button",BS_OWNERDRAW |
+ CONTROL "li./unt. re.",IDC_ICON_ALIGN_5,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,57,83,46,44
- CONTROL "right/bot. left",IDC_ICON_ALIGN_6,"Button",BS_OWNERDRAW |
+ CONTROL "re./unt. li.",IDC_ICON_ALIGN_6,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,110,83,46,44
- CONTROL "rig./bot. dwn",IDC_ICON_ALIGN_7,"Button",BS_OWNERDRAW |
+ CONTROL "re./unt. aufw.",IDC_ICON_ALIGN_7,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,159,83,46,44
- CONTROL "border down",IDC_ICON_ALIGN_8,"Button",BS_OWNERDRAW |
+ CONTROL "Rahmen abw.",IDC_ICON_ALIGN_8,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,7,131,46,44
- CONTROL "border H/V",IDC_ICON_ALIGN_9,"Button",BS_OWNERDRAW |
+ CONTROL "Rahmen H/V",IDC_ICON_ALIGN_9,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,57,131,46,44
- CONTROL "round about",IDC_ICON_ALIGN_10,"Button",BS_OWNERDRAW |
+ CONTROL "im Kreis",IDC_ICON_ALIGN_10,"Button",BS_OWNERDRAW |
BS_BOTTOM | WS_TABSTOP,110,131,46,44
CONTROL "",IDC_ICON_ALIGN_11,"Button",BS_OWNERDRAW | BS_BOTTOM |
WS_TABSTOP,159,131,46,44
@@ -242,7 +242,7 @@ BEGIN
CONTROL "ffne Unterverzeichnisses in &neuen Fenstern",
IDC_SEPARATE_SUBFOLDERS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,7,90,157,10
- LTEXT "Diese Auswahl wird knftig fr alle Explorer-Fenster verwendet werden.",
+ LTEXT "Diese Auswahl wird knftig fr alle Explorerfenster verwendet werden.",
IDC_STATIC,7,111,174,22
DEFPUSHBUTTON "&OK",IDOK,29,136,50,14,WS_GROUP
PUSHBUTTON "A&bbrechen",IDCANCEL,106,136,50,14
@@ -344,7 +344,7 @@ BEGIN
IDS_FAVORITES "Favoriten"
IDS_PROGRAMS "Programme"
IDS_SETTINGS "Einstellungen"
- IDS_EXPLORE "Explore"
+ IDS_EXPLORE "Explorer"
IDS_EMPTY "(Leer)"
IDS_RECENT "Aktuelle Dokumente"
IDS_ADMIN "Verwaltung"
@@ -383,7 +383,7 @@ BEGIN
IDS_SEARCH "Suche"
IDS_ABOUT_EXPLORER "&ber Explorer..."
IDS_LAUNCH_MANY_PROGRAMS
- "Sie haben mehrere Programme ausgewhlt.\nSind Sie sicher, da Sie diese alle starten wollen?"
+ "Sie haben mehrere Programme ausgewhlt.\nSind Sie sich sicher, dass Sie diese alle starten wollen?"
IDS_DESKTOPBAR_SETTINGS "Desktop-Einstellungen"
IDS_DESKTOP "Desktop"
IDS_TASKBAR "Taskbar"
diff --git a/reactos/base/system/format/lang/de-DE.rc b/reactos/base/system/format/lang/de-DE.rc
index c3c08486b9c..9620be2ed2f 100644
--- a/reactos/base/system/format/lang/de-DE.rc
+++ b/reactos/base/system/format/lang/de-DE.rc
@@ -28,9 +28,9 @@ STRING_HELP, "Syntax: %s Datentr
STRING_COMPLETE "%lu Prozent komplett.\r"
-STRING_FORMAT_FAIL "FormatEx konnte Operation nicht erfolgreich beenden.\n\n"
+STRING_FORMAT_FAIL "FormatEx konnte Vorgang nicht erfolgreich beenden.\n\n"
-STRING_NO_SUPPORT "Operation nicht untersttzt"
+STRING_NO_SUPPORT "Vorgang nicht untersttzt"
STRING_FMIFS_FAIL "Kann FMIFS-Eingangspunkte nicht lokalisieren.\n\n"
@@ -40,11 +40,11 @@ STRING_DRIVE_PARM "Ben
STRING_ERROR_DRIVE_TYPE "Konnte den Laufwerkstyp nicht erhalten"
-STRING_INSERT_DISK "Legen Sie eine neue Diskette in Laufwerk %C: ein\nund drcken Sie Enter wenn das Laufwerk bereit ist"
+STRING_INSERT_DISK "Legen Sie eine neue Diskette in Laufwerk %C: ein\nund bettigen Sie die Eingabetaste, wenn das Laufwerk\nbereit ist."
STRING_NO_VOLUME "Kann Medium nicht abfragen"
-STRING_NO_VOLUME_SIZE "Kann Mediumsgre nicht abfragen"
+STRING_NO_VOLUME_SIZE "Kann Mediengre nicht abfragen"
STRING_FILESYSTEM "Der Typ des Dateisystems ist %s.\n"
@@ -70,7 +70,7 @@ STRING_ENTER_LABEL "Datentr
STRING_NO_LABEL "Konnte Datentrger nicht benennen"
-STRING_FREE_SPACE "\n%I64d bytes Speicherkapazitt.\n%I64d bytes freier Speicher.\n"
+STRING_FREE_SPACE "\n%I64d Byte Speicherkapazitt.\n%I64d bytes freier Speicher.\n"
-STRING_SERIAL_NUMBER "\nDatentrger Seriennummer ist %04X-%04X\n"
+STRING_SERIAL_NUMBER "\nDatentrger-Seriennummer ist %04X-%04X\n"
END
diff --git a/reactos/base/system/msiexec/msiexec.c b/reactos/base/system/msiexec/msiexec.c
index 9221fa2a9ce..fe19d98e434 100644
--- a/reactos/base/system/msiexec/msiexec.c
+++ b/reactos/base/system/msiexec/msiexec.c
@@ -47,6 +47,7 @@ static const char UsageStr[] =
" Install a product:\n"
" msiexec {package|productcode} [property]\n"
" msiexec /i {package|productcode} [property]\n"
+" msiexec /package {package|productcode} [property]\n"
" msiexec /a package [property]\n"
" Repair an installation:\n"
" msiexec /f[p|o|e|d|c|a|u|m|s|v] {package|productcode}\n"
@@ -562,12 +563,13 @@ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine
{
FunctionUnregServer = TRUE;
}
- else if(msi_option_prefix(argvW[i], "i"))
+ else if(msi_option_prefix(argvW[i], "i") || msi_option_prefix(argvW[i], "package"))
{
LPWSTR argvWi = argvW[i];
+ int argLen = (msi_option_prefix(argvW[i], "i") ? 2 : 8);
FunctionInstall = TRUE;
- if(lstrlenW(argvWi) > 2)
- argvWi += 2;
+ if(lstrlenW(argvW[i]) > argLen)
+ argvWi += argLen;
else
{
i++;
diff --git a/reactos/base/system/msiexec/msiexec.rbuild b/reactos/base/system/msiexec/msiexec.rbuild
index a3a24950930..228875d72c7 100644
--- a/reactos/base/system/msiexec/msiexec.rbuild
+++ b/reactos/base/system/msiexec/msiexec.rbuild
@@ -12,7 +12,6 @@
ole32
msi
msiexec.c
- rsrc.rc
service.c
- version.rc
+ rsrc.rc
diff --git a/reactos/base/system/msiexec/rsrc.rc b/reactos/base/system/msiexec/rsrc.rc
index 01e43befe19..cfc89370039 100644
--- a/reactos/base/system/msiexec/rsrc.rc
+++ b/reactos/base/system/msiexec/rsrc.rc
@@ -18,7 +18,16 @@
#include
-#include "version.rc"
+#define WINE_FILEDESCRIPTION_STR "Wine Installer"
+#define WINE_FILENAME_STR "msiexec.exe"
+#define WINE_FILETYPE VFT_APP
+#define WINE_FILEVERSION 3,1,4000,1823
+#define WINE_FILEVERSION_STR "3.1.4000.1823"
+#define WINE_PRODUCTVERSION 3,1,4000,1823
+#define WINE_PRODUCTVERSION_STR "3.1.4000.1823"
+#define WINE_PRODUCTNAME_STR "Wine Installer"
+
+#include "wine/wine_common_ver.rc"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
diff --git a/reactos/base/system/regsvr32/lang/de-DE.rc b/reactos/base/system/regsvr32/lang/de-DE.rc
index c467baf88da..dd519a07744 100644
--- a/reactos/base/system/regsvr32/lang/de-DE.rc
+++ b/reactos/base/system/regsvr32/lang/de-DE.rc
@@ -12,7 +12,7 @@ IDS_UsageMessage, "%s\n\nSyntax: regsvr32 [/u] [/s] [/c] [/n] [/i[:cmdline]] dll
/s - Hintergrundmodus; Meldungen werden nicht angezeigt\n\
/c - Konsolenausgabe verwenden\n\
/i - Aufruf von DLLInstall, wobei optional eine [Befehlszeile] bergeben\n\
- werden kann. Unter Verwendung von /u wird die DLL_Deinstallation\n\
+ werden kann. Unter Verwendung von /u wird die DLL-Deinstallation\n\
aufgerufen.\n\
/n - Kein Aufruf von DLLRegisterServer. Diese Option muss mit /i verwendet werden."
@@ -20,12 +20,12 @@ IDS_NoDllSpecified, "Es wurde kein DLL-Name angegeben."
IDS_InvalidFlag, "Ungltiger Parameter: %s"
-IDS_SwitchN_NoI, "Ungltiger Parameter: /n muss zusammen mit dem /i Schalter verwendet werden."
+IDS_SwitchN_NoI, "Ungltiger Parameter: /n muss zusammen mit dem /i-Schalter verwendet werden."
-IDS_DllNotLoaded, "LoadLibrary('%s') ist fehlgeschlagen.\nGetLastError Rckgabewert 0x%08x."
+IDS_DllNotLoaded, "LoadLibrary('%s') ist fehlgeschlagen.\nGetLastError-Rckgabewert 0x%08x."
IDS_MissingEntry, "%s wurde geladen, aber der %s Einstiegspunkt wurde nicht gefunden.\n\n\
-%s wurde mglicherweise nicht exportiert, oder eine fehlerhafte Version von %s befindet sich im Speicher. Erwgen Sie die Verwendung von PView um es festzustellen und zu lschen."
+%s wurde mglicherweise nicht exportiert, oder eine fehlerhafte Version von %s befindet sich im Speicher. Erwgen Sie die Verwendung von PView, um es festzustellen und zu lschen."
IDS_FailureMessage, "%s in %s ist fehlgeschlagen.\nRckgabewert: 0x%08x"
diff --git a/reactos/base/system/runonce/lang/de-DE.rc b/reactos/base/system/runonce/lang/de-DE.rc
new file mode 100644
index 00000000000..44df265a81d
--- /dev/null
+++ b/reactos/base/system/runonce/lang/de-DE.rc
@@ -0,0 +1,11 @@
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+IDD_RUNONCE_DLG DIALOG DISCARDABLE 0, 0, 239, 170
+STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
+CAPTION "ReactOS-Setup"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "ReactOS nimmt nun die folgenden Einstellungen vor:", -1, 38, 8, 196, 18
+ LISTBOX IDC_COMP_LIST, 36, 32, 197, 131, LBS_OWNERDRAWVARIABLE | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
+ ICON IDI_ICON, -1, 5, 6, 21, 20
+END
diff --git a/reactos/base/system/runonce/resource.h b/reactos/base/system/runonce/resource.h
index 826805f9cc3..96817d435ef 100644
--- a/reactos/base/system/runonce/resource.h
+++ b/reactos/base/system/runonce/resource.h
@@ -1,10 +1,7 @@
-#ifndef _RESOURCE_H__
-#define _RESOURCE_H__
+#pragma once
#define IDI_ICON 10
#define IDD_RUNONCE_DLG 100
#define IDC_COMP_LIST 1000
-
-#endif /* _RESOURCE_H__ */
diff --git a/reactos/base/system/runonce/rsrc.rc b/reactos/base/system/runonce/rsrc.rc
index 540fe8abd20..cc21daecfe9 100644
--- a/reactos/base/system/runonce/rsrc.rc
+++ b/reactos/base/system/runonce/rsrc.rc
@@ -1,3 +1,4 @@
+#include "lang/de-DE.rc"
#include "lang/en-US.rc"
#include "lang/es-ES.rc"
#include "lang/ja-JP.rc"
diff --git a/reactos/base/system/runonce/runonce.h b/reactos/base/system/runonce/runonce.h
index 6fb2b59bd64..9e9c5849d6c 100644
--- a/reactos/base/system/runonce/runonce.h
+++ b/reactos/base/system/runonce/runonce.h
@@ -1,9 +1,6 @@
-#ifndef _RUNONCE_H__
-#define _RUNONCE_H__
+#pragma once
#include
#include
#include "resource.h"
-
-#endif /* _RUNONCE_H__ */
diff --git a/reactos/base/system/services/database.c b/reactos/base/system/services/database.c
index d33b23403b5..7a9819e4c8b 100644
--- a/reactos/base/system/services/database.c
+++ b/reactos/base/system/services/database.c
@@ -17,6 +17,11 @@
#define NDEBUG
#include
+/*
+ * Uncomment the line below to start services
+ * using the SERVICE_START_PENDING state
+ */
+// #define USE_SERVICE_START_PENDING
/* GLOBALS *******************************************************************/
@@ -116,37 +121,6 @@ ScmGetServiceEntryByResumeCount(DWORD dwResumeCount)
}
-PSERVICE
-ScmGetServiceEntryByClientHandle(HANDLE Handle)
-{
- PLIST_ENTRY ServiceEntry;
- PSERVICE CurrentService;
-
- DPRINT("ScmGetServiceEntryByClientHandle() called\n");
- DPRINT("looking for %p\n", Handle);
-
- ServiceEntry = ServiceListHead.Flink;
- while (ServiceEntry != &ServiceListHead)
- {
- CurrentService = CONTAINING_RECORD(ServiceEntry,
- SERVICE,
- ServiceListEntry);
-
- if (CurrentService->hClient == Handle)
- {
- DPRINT("Found service: '%S'\n", CurrentService->lpDisplayName);
- return CurrentService;
- }
-
- ServiceEntry = ServiceEntry->Flink;
- }
-
- DPRINT("Couldn't find a matching service\n");
-
- return NULL;
-}
-
-
DWORD
ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
PSERVICE *lpServiceRecord)
@@ -191,7 +165,7 @@ ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
VOID
ScmDeleteServiceRecord(PSERVICE lpService)
{
- DPRINT1("Deleting Service %S\n", lpService->lpServiceName);
+ DPRINT("Deleting Service %S\n", lpService->lpServiceName);
/* Delete the display name */
if (lpService->lpDisplayName != NULL &&
@@ -215,12 +189,12 @@ ScmDeleteServiceRecord(PSERVICE lpService)
/* Remove the Service from the List */
RemoveEntryList(&lpService->ServiceListEntry);
- DPRINT1("Deleted Service %S\n", lpService->lpServiceName);
+ DPRINT("Deleted Service %S\n", lpService->lpServiceName);
/* Delete the service record */
HeapFree(GetProcessHeap(), 0, lpService);
- DPRINT1("Done\n");
+ DPRINT("Done\n");
}
@@ -705,12 +679,15 @@ ScmGetBootAndSystemDriverState(VOID)
DWORD
ScmControlService(PSERVICE Service,
- DWORD dwControl,
- LPSERVICE_STATUS lpServiceStatus)
+ DWORD dwControl)
{
PSCM_CONTROL_PACKET ControlPacket;
- DWORD Count;
+ SCM_REPLY_PACKET ReplyPacket;
+
+ DWORD dwWriteCount = 0;
+ DWORD dwReadCount = 0;
DWORD TotalLength;
+ DWORD dwError = ERROR_SUCCESS;
DPRINT("ScmControlService() called\n");
@@ -723,31 +700,37 @@ ScmControlService(PSERVICE Service,
return ERROR_NOT_ENOUGH_MEMORY;
ControlPacket->dwControl = dwControl;
- ControlPacket->hClient = Service->hClient;
ControlPacket->dwSize = TotalLength;
+ ControlPacket->hServiceStatus = (SERVICE_STATUS_HANDLE)Service;
wcscpy(&ControlPacket->szArguments[0], Service->lpServiceName);
/* Send the control packet */
WriteFile(Service->ControlPipeHandle,
ControlPacket,
sizeof(SCM_CONTROL_PACKET) + (TotalLength * sizeof(WCHAR)),
- &Count,
+ &dwWriteCount,
NULL);
- /* FIXME: Read the reply */
+ /* Read the reply */
+ ReadFile(Service->ControlPipeHandle,
+ &ReplyPacket,
+ sizeof(SCM_REPLY_PACKET),
+ &dwReadCount,
+ NULL);
/* Release the contol packet */
HeapFree(GetProcessHeap(),
0,
ControlPacket);
- RtlCopyMemory(lpServiceStatus,
- &Service->Status,
- sizeof(SERVICE_STATUS));
+ if (dwReadCount == sizeof(SCM_REPLY_PACKET))
+ {
+ dwError = ReplyPacket.dwError;
+ }
- DPRINT("ScmControlService) done\n");
+ DPRINT("ScmControlService() done\n");
- return ERROR_SUCCESS;
+ return dwError;
}
@@ -757,11 +740,15 @@ ScmSendStartCommand(PSERVICE Service,
LPWSTR *argv)
{
PSCM_CONTROL_PACKET ControlPacket;
+ SCM_REPLY_PACKET ReplyPacket;
DWORD TotalLength;
DWORD ArgsLength = 0;
DWORD Length;
PWSTR Ptr;
- DWORD Count;
+ DWORD dwWriteCount = 0;
+ DWORD dwReadCount = 0;
+ DWORD dwError = ERROR_SUCCESS;
+ DWORD i;
DPRINT("ScmSendStartCommand() called\n");
@@ -769,10 +756,10 @@ ScmSendStartCommand(PSERVICE Service,
TotalLength = wcslen(Service->lpServiceName) + 1;
if (argc > 0)
{
- for (Count = 0; Count < argc; Count++)
+ for (i = 0; i < argc; i++)
{
- DPRINT("Arg: %S\n", argv[Count]);
- Length = wcslen(argv[Count]) + 1;
+ DPRINT("Arg: %S\n", argv[i]);
+ Length = wcslen(argv[i]) + 1;
TotalLength += Length;
ArgsLength += Length;
}
@@ -788,7 +775,7 @@ ScmSendStartCommand(PSERVICE Service,
return ERROR_NOT_ENOUGH_MEMORY;
ControlPacket->dwControl = SERVICE_CONTROL_START;
- ControlPacket->hClient = Service->hClient;
+ ControlPacket->hServiceStatus = (SERVICE_STATUS_HANDLE)Service;
ControlPacket->dwSize = TotalLength;
Ptr = &ControlPacket->szArguments[0];
wcscpy(Ptr, Service->lpServiceName);
@@ -812,19 +799,29 @@ ScmSendStartCommand(PSERVICE Service,
WriteFile(Service->ControlPipeHandle,
ControlPacket,
sizeof(SCM_CONTROL_PACKET) + (TotalLength - 1) * sizeof(WCHAR),
- &Count,
+ &dwWriteCount,
NULL);
- /* FIXME: Read the reply */
+ /* Read the reply */
+ ReadFile(Service->ControlPipeHandle,
+ &ReplyPacket,
+ sizeof(SCM_REPLY_PACKET),
+ &dwReadCount,
+ NULL);
/* Release the contol packet */
HeapFree(GetProcessHeap(),
0,
ControlPacket);
+ if (dwReadCount == sizeof(SCM_REPLY_PACKET))
+ {
+ dwError = ReplyPacket.dwError;
+ }
+
DPRINT("ScmSendStartCommand() done\n");
- return ERROR_SUCCESS;
+ return dwError;
}
@@ -845,6 +842,7 @@ ScmStartUserModeService(PSERVICE Service,
WCHAR NtControlPipeName[MAX_PATH + 1];
HKEY hServiceCurrentKey = INVALID_HANDLE_VALUE;
DWORD KeyDisposition;
+ DWORD dwProcessId;
RtlInitUnicodeString(&ImagePath, NULL);
@@ -986,7 +984,7 @@ ScmStartUserModeService(PSERVICE Service,
/* Read SERVICE_STATUS_HANDLE from pipe */
if (!ReadFile(Service->ControlPipeHandle,
- (LPVOID)&Service->hClient,
+ (LPVOID)&dwProcessId,
sizeof(DWORD),
&dwRead,
NULL))
@@ -997,7 +995,7 @@ ScmStartUserModeService(PSERVICE Service,
}
else
{
- DPRINT("Received service status %lu\n", Service->hClient);
+ DPRINT("Received service process ID %lu\n", dwProcessId);
/* Send start command */
dwError = ScmSendStartCommand(Service, argc, argv);
@@ -1038,12 +1036,23 @@ ScmStartService(PSERVICE Service, DWORD argc, LPWSTR *argv)
/* Load driver */
dwError = ScmLoadDriver(Service);
if (dwError == ERROR_SUCCESS)
+ {
Service->Status.dwControlsAccepted = SERVICE_ACCEPT_STOP;
+ Service->Status.dwCurrentState = SERVICE_RUNNING;
+ }
}
else
{
/* Start user-mode service */
dwError = ScmStartUserModeService(Service, argc, argv);
+ if (dwError == ERROR_SUCCESS)
+ {
+#ifdef USE_SERVICE_START_PENDING
+ Service->Status.dwCurrentState = SERVICE_START_PENDING;
+#else
+ Service->Status.dwCurrentState = SERVICE_RUNNING;
+#endif
+ }
}
DPRINT("ScmStartService() done (Error %lu)\n", dwError);
@@ -1054,7 +1063,6 @@ ScmStartService(PSERVICE Service, DWORD argc, LPWSTR *argv)
{
Group->ServicesRunning = TRUE;
}
- Service->Status.dwCurrentState = SERVICE_RUNNING;
}
#if 0
else
@@ -1207,7 +1215,6 @@ ScmAutoShutdownServices(VOID)
{
PLIST_ENTRY ServiceEntry;
PSERVICE CurrentService;
- SERVICE_STATUS ServiceStatus;
DPRINT("ScmAutoShutdownServices() called\n");
@@ -1220,7 +1227,7 @@ ScmAutoShutdownServices(VOID)
CurrentService->Status.dwCurrentState == SERVICE_START_PENDING)
{
/* shutdown service */
- ScmControlService(CurrentService, SERVICE_CONTROL_STOP, &ServiceStatus);
+ ScmControlService(CurrentService, SERVICE_CONTROL_STOP);
}
ServiceEntry = ServiceEntry->Flink;
@@ -1229,4 +1236,25 @@ ScmAutoShutdownServices(VOID)
DPRINT("ScmGetBootAndSystemDriverState() done\n");
}
+
+BOOL
+ScmLockDatabaseExclusive(VOID)
+{
+ return RtlAcquireResourceExclusive(&DatabaseLock, TRUE);
+}
+
+
+BOOL
+ScmLockDatabaseShared(VOID)
+{
+ return RtlAcquireResourceShared(&DatabaseLock, TRUE);
+}
+
+
+VOID
+ScmUnlockDatabase(VOID)
+{
+ RtlReleaseResource(&DatabaseLock);
+}
+
/* EOF */
diff --git a/reactos/base/system/services/rpcserver.c b/reactos/base/system/services/rpcserver.c
index 193cb9b946e..914e013327b 100644
--- a/reactos/base/system/services/rpcserver.c
+++ b/reactos/base/system/services/rpcserver.c
@@ -153,12 +153,12 @@ ScmCreateManagerHandle(LPWSTR lpDatabaseName,
if (_wcsicmp(lpDatabaseName,SERVICES_FAILED_DATABASEW)==0)
{
- DPRINT1("Database %S, does not exist\n",lpDatabaseName);
+ DPRINT("Database %S, does not exist\n",lpDatabaseName);
return ERROR_DATABASE_DOES_NOT_EXIST;
}
else if (_wcsicmp(lpDatabaseName, SERVICES_ACTIVE_DATABASEW) != 0)
{
- DPRINT1("Invalid Database name %S.\n",lpDatabaseName);
+ DPRINT("Invalid Database name %S.\n",lpDatabaseName);
return ERROR_INVALID_NAME;
}
@@ -284,7 +284,7 @@ Int_EnumDependentServicesW(HKEY hServicesKey,
NULL);
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("ERROR! Unable to get number of services keys.\n");
+ DPRINT("ERROR! Unable to get number of services keys.\n");
return dwError;
}
@@ -341,7 +341,7 @@ Int_EnumDependentServicesW(HKEY hServicesKey,
if (!lpCurrentService)
{
/* This should never happen! */
- DPRINT1("This should not happen at this point, report to Developer\n");
+ DPRINT("This should not happen at this point, report to Developer\n");
return ERROR_NOT_FOUND;
}
@@ -473,7 +473,7 @@ DWORD RCloseServiceHandle(
&hServicesKey);
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("Failed to open services key\n");
+ DPRINT("Failed to open services key\n");
return dwError;
}
@@ -488,7 +488,7 @@ DWORD RCloseServiceHandle(
/* if pcbBytesNeeded returned a value then there are services running that are dependent on this service*/
if (pcbBytesNeeded)
{
- DPRINT1("Deletion failed due to running dependencies.\n");
+ DPRINT("Deletion failed due to running dependencies.\n");
RegCloseKey(hServicesKey);
return ERROR_SUCCESS;
}
@@ -504,7 +504,7 @@ DWORD RCloseServiceHandle(
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("Failed to Delete the Service Registry key\n");
+ DPRINT("Failed to Delete the Service Registry key\n");
return dwError;
}
@@ -517,7 +517,7 @@ DWORD RCloseServiceHandle(
return ERROR_SUCCESS;
}
- DPRINT1("Invalid handle tag (Tag %lx)\n", hManager->Handle.Tag);
+ DPRINT("Invalid handle tag (Tag %lx)\n", hManager->Handle.Tag);
return ERROR_INVALID_HANDLE;
}
@@ -546,7 +546,7 @@ DWORD RControlService(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
@@ -554,7 +554,7 @@ DWORD RControlService(
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -603,7 +603,7 @@ DWORD RControlService(
&hServicesKey);
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("Failed to open services key\n");
+ DPRINT("Failed to open services key\n");
return dwError;
}
@@ -637,8 +637,12 @@ DWORD RControlService(
{
/* Send control code to the service */
dwError = ScmControlService(lpService,
- dwControl,
- lpServiceStatus);
+ dwControl);
+
+ /* Return service status information */
+ RtlCopyMemory(lpServiceStatus,
+ &lpService->Status,
+ sizeof(SERVICE_STATUS));
}
if ((dwError == ERROR_SUCCESS) && (pcbBytesNeeded))
@@ -652,10 +656,6 @@ DWORD RControlService(
lpService->ThreadId = 0;
}
- /* Return service status information */
- RtlCopyMemory(lpServiceStatus,
- &lpService->Status,
- sizeof(SERVICE_STATUS));
return dwError;
}
@@ -685,7 +685,7 @@ DWORD RDeleteService(
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -693,7 +693,7 @@ DWORD RDeleteService(
if (lpService->bDeleted)
{
- DPRINT1("The service has already been marked for delete!\n");
+ DPRINT("The service has already been marked for delete!\n");
return ERROR_SERVICE_MARKED_FOR_DELETE;
}
@@ -761,7 +761,7 @@ DWORD RQueryServiceObjectSecurity(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
@@ -776,14 +776,14 @@ DWORD RQueryServiceObjectSecurity(
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
DesiredAccess))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -838,12 +838,12 @@ DWORD RSetServiceObjectSecurity(
/* NTSTATUS Status; */
DWORD dwError;
- DPRINT1("RSetServiceObjectSecurity() called\n");
+ DPRINT("RSetServiceObjectSecurity() called\n");
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
@@ -875,14 +875,14 @@ DWORD RSetServiceObjectSecurity(
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
DesiredAccess))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -960,29 +960,33 @@ DWORD RQueryServiceStatus(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_QUERY_STATUS))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
+ ScmLockDatabaseShared();
+
/* Return service status information */
RtlCopyMemory(lpServiceStatus,
&lpService->Status,
sizeof(SERVICE_STATUS));
+ ScmUnlockDatabase();
+
return ERROR_SUCCESS;
}
@@ -1026,21 +1030,21 @@ DWORD RSetServiceStatus(
if (hServiceStatus == 0)
{
- DPRINT1("hServiceStatus == NULL!\n");
+ DPRINT("hServiceStatus == NULL!\n");
return ERROR_INVALID_HANDLE;
}
- lpService = ScmGetServiceEntryByClientHandle((HANDLE)hServiceStatus);
+ lpService = (PSERVICE)hServiceStatus;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
/* Check current state */
if (!ScmIsValidServiceState(lpServiceStatus->dwCurrentState))
{
- DPRINT1("Invalid service state!\n");
+ DPRINT("Invalid service state!\n");
return ERROR_INVALID_DATA;
}
@@ -1048,22 +1052,25 @@ DWORD RSetServiceStatus(
if (!(lpServiceStatus->dwServiceType & SERVICE_WIN32) &&
(lpServiceStatus->dwServiceType & SERVICE_DRIVER))
{
- DPRINT1("Invalid service type!\n");
+ DPRINT("Invalid service type!\n");
return ERROR_INVALID_DATA;
}
/* Check accepted controls */
if (lpServiceStatus->dwControlsAccepted & ~0xFF)
{
- DPRINT1("Invalid controls accepted!\n");
+ DPRINT("Invalid controls accepted!\n");
return ERROR_INVALID_DATA;
}
+ ScmLockDatabaseExclusive();
RtlCopyMemory(&lpService->Status,
lpServiceStatus,
sizeof(SERVICE_STATUS));
+ ScmUnlockDatabase();
+
DPRINT("Set %S to %lu\n", lpService->lpDisplayName, lpService->Status.dwCurrentState);
DPRINT("RSetServiceStatus() done\n");
@@ -1139,21 +1146,21 @@ DWORD RChangeServiceConfigW(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_CHANGE_CONFIG))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -1162,7 +1169,7 @@ DWORD RChangeServiceConfigW(
if (lpService->bDeleted)
{
/* FIXME: Unlock database */
- DPRINT1("The service has already been marked for delete!\n");
+ DPRINT("The service has already been marked for delete!\n");
return ERROR_SERVICE_MARKED_FOR_DELETE;
}
@@ -1365,14 +1372,14 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
*RelativeName = LocalAlloc(LMEM_ZEROINIT, ServiceNameLen * sizeof(WCHAR) + sizeof(WCHAR));
if (*RelativeName == NULL)
{
- DPRINT1("Error allocating memory for boot driver name!\n");
+ DPRINT("Error allocating memory for boot driver name!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
/* Copy it */
wcscpy(*RelativeName, CanonName);
- DPRINT1("Bootdriver name %S\n", *RelativeName);
+ DPRINT("Bootdriver name %S\n", *RelativeName);
return ERROR_SUCCESS;
}
@@ -1385,7 +1392,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
if (*RelativeName == NULL)
{
- DPRINT1("Error allocating memory for boot driver name!\n");
+ DPRINT("Error allocating memory for boot driver name!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1393,7 +1400,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
wcscpy(*RelativeName, L"\\SystemRoot\\");
wcscat(*RelativeName, CanonName + 13);
- DPRINT1("Bootdriver name %S\n", *RelativeName);
+ DPRINT("Bootdriver name %S\n", *RelativeName);
return ERROR_SUCCESS;
}
@@ -1402,7 +1409,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
if (BufferSize <= 1)
{
- DPRINT1("Error during a call to ExpandEnvironmentStringsW()\n");
+ DPRINT("Error during a call to ExpandEnvironmentStringsW()\n");
return ERROR_INVALID_ENVIRONMENT;
}
@@ -1410,7 +1417,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
Expanded = LocalAlloc(LMEM_ZEROINIT, BufferSize * sizeof(WCHAR) + sizeof(WCHAR));
if (!Expanded)
{
- DPRINT1("Error allocating memory for boot driver name!\n");
+ DPRINT("Error allocating memory for boot driver name!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1418,7 +1425,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
if (ExpandEnvironmentStringsW(L"%SystemRoot%\\", Expanded, BufferSize) >
BufferSize)
{
- DPRINT1("Error during a call to ExpandEnvironmentStringsW()\n");
+ DPRINT("Error during a call to ExpandEnvironmentStringsW()\n");
LocalFree(Expanded);
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1426,7 +1433,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
/* Convert to NY-style path */
if (!RtlDosPathNameToNtPathName_U(Expanded, &NtPathName, NULL, NULL))
{
- DPRINT1("Error during a call to RtlDosPathNameToNtPathName_U()\n");
+ DPRINT("Error during a call to RtlDosPathNameToNtPathName_U()\n");
return ERROR_INVALID_ENVIRONMENT;
}
@@ -1439,7 +1446,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
Expanded = LocalAlloc(LMEM_ZEROINIT, NtPathName.Length + sizeof(WCHAR));
if (!Expanded)
{
- DPRINT1("Error allocating memory for boot driver name!\n");
+ DPRINT("Error allocating memory for boot driver name!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1455,7 +1462,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
(ServiceNameLen - ExpandedLen) * sizeof(WCHAR) + 13*sizeof(WCHAR));
if (*RelativeName == NULL)
{
- DPRINT1("Error allocating memory for boot driver name!\n");
+ DPRINT("Error allocating memory for boot driver name!\n");
LocalFree(Expanded);
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1491,7 +1498,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
/* Check if required buffer size is sane */
if (BufferSize > 0xFFFD)
{
- DPRINT1("Too large buffer required\n");
+ DPRINT("Too large buffer required\n");
*RelativeName = 0;
if (SymbolicLinkHandle) NtClose(SymbolicLinkHandle);
@@ -1503,7 +1510,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
LinkTarget.Buffer = LocalAlloc(LMEM_ZEROINIT, BufferSize + sizeof(WCHAR));
if (!LinkTarget.Buffer)
{
- DPRINT1("Unable to alloc buffer\n");
+ DPRINT("Unable to alloc buffer\n");
if (SymbolicLinkHandle) NtClose(SymbolicLinkHandle);
LocalFree(Expanded);
return ERROR_NOT_ENOUGH_MEMORY;
@@ -1527,7 +1534,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
if (*RelativeName == NULL)
{
- DPRINT1("Unable to alloc buffer\n");
+ DPRINT("Unable to alloc buffer\n");
if (SymbolicLinkHandle) NtClose(SymbolicLinkHandle);
LocalFree(Expanded);
RtlFreeUnicodeString(&NtPathName);
@@ -1557,7 +1564,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
}
else
{
- DPRINT1("Error, Status = %08X\n", Status);
+ DPRINT("Error, Status = %08X\n", Status);
if (SymbolicLinkHandle) NtClose(SymbolicLinkHandle);
LocalFree(Expanded);
RtlFreeUnicodeString(&NtPathName);
@@ -1566,7 +1573,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
}
else
{
- DPRINT1("Error, Status = %08X\n", Status);
+ DPRINT("Error, Status = %08X\n", Status);
if (SymbolicLinkHandle) NtClose(SymbolicLinkHandle);
LocalFree(Expanded);
RtlFreeUnicodeString(&NtPathName);
@@ -1575,7 +1582,7 @@ ScmConvertToBootPathName(wchar_t *CanonName, wchar_t **RelativeName)
}
else
{
- DPRINT1("Error, Status = %08X\n", Status);
+ DPRINT("Error, Status = %08X\n", Status);
LocalFree(Expanded);
return ERROR_INVALID_PARAMETER;
}
@@ -1608,7 +1615,7 @@ ScmCanonDriverImagePath(DWORD dwStartType,
if (*lpCanonName == NULL)
{
- DPRINT1("Error allocating memory for canonized service name!\n");
+ DPRINT("Error allocating memory for canonized service name!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1632,7 +1639,7 @@ ScmCanonDriverImagePath(DWORD dwStartType,
if (*lpCanonName == NULL)
{
- DPRINT1("Error allocating memory for canonized service name!\n");
+ DPRINT("Error allocating memory for canonized service name!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1653,7 +1660,7 @@ ScmCanonDriverImagePath(DWORD dwStartType,
if (*lpCanonName == NULL)
{
- DPRINT1("Error allocating memory for canonized service name!\n");
+ DPRINT("Error allocating memory for canonized service name!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1666,7 +1673,7 @@ ScmCanonDriverImagePath(DWORD dwStartType,
/* It seems to be a DOS path, convert it */
if (!RtlDosPathNameToNtPathName_U(lpServiceName, &NtServiceName, NULL, NULL))
{
- DPRINT1("RtlDosPathNameToNtPathName_U() failed!\n");
+ DPRINT("RtlDosPathNameToNtPathName_U() failed!\n");
return ERROR_INVALID_PARAMETER;
}
@@ -1674,7 +1681,7 @@ ScmCanonDriverImagePath(DWORD dwStartType,
if (*lpCanonName == NULL)
{
- DPRINT1("Error allocating memory for canonized service name!\n");
+ DPRINT("Error allocating memory for canonized service name!\n");
RtlFreeUnicodeString(&NtServiceName);
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -1697,7 +1704,7 @@ ScmCanonDriverImagePath(DWORD dwStartType,
{
/* There is a problem, free name and return */
LocalFree(*lpCanonName);
- DPRINT1("Error converting named!\n");
+ DPRINT("Error converting named!\n");
return Result;
}
@@ -1759,7 +1766,7 @@ DWORD RCreateServiceW(
hManager = (PMANAGER_HANDLE)hSCManager;
if (!hManager || hManager->Handle.Tag != MANAGER_TAG)
{
- DPRINT1("Invalid manager handle!\n");
+ DPRINT("Invalid manager handle!\n");
return ERROR_INVALID_HANDLE;
}
@@ -1767,8 +1774,8 @@ DWORD RCreateServiceW(
if (!RtlAreAllAccessesGranted(hManager->Handle.DesiredAccess,
SC_MANAGER_CREATE_SERVICE))
{
- DPRINT1("Insufficient access rights! 0x%lx\n",
- hManager->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n",
+ hManager->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
@@ -2086,8 +2093,8 @@ DWORD REnumDependentServicesW(
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SC_MANAGER_ENUMERATE_SERVICE))
{
- DPRINT1("Insufficient access rights! 0x%lx\n",
- hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n",
+ hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
@@ -2123,7 +2130,7 @@ DWORD REnumDependentServicesW(
(dwServicesReturned + 1) * sizeof(PSERVICE));
if (!lpServicesArray)
{
- DPRINT1("Could not allocate a buffer!!\n");
+ DPRINT("Could not allocate a buffer!!\n");
dwError = ERROR_NOT_ENOUGH_MEMORY;
goto Done;
}
@@ -2214,7 +2221,7 @@ DWORD REnumServicesStatusW(
hManager = (PMANAGER_HANDLE)hSCManager;
if (!hManager || hManager->Handle.Tag != MANAGER_TAG)
{
- DPRINT1("Invalid manager handle!\n");
+ DPRINT("Invalid manager handle!\n");
return ERROR_INVALID_HANDLE;
}
@@ -2237,7 +2244,7 @@ DWORD REnumServicesStatusW(
if (!RtlAreAllAccessesGranted(hManager->Handle.DesiredAccess,
SC_MANAGER_ENUMERATE_SERVICE))
{
- DPRINT1("Insufficient access rights! 0x%lx\n",
+ DPRINT("Insufficient access rights! 0x%lx\n",
hManager->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
@@ -2418,7 +2425,7 @@ DWORD ROpenSCManagerW(
&hHandle);
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("ScmCreateManagerHandle() failed (Error %lu)\n", dwError);
+ DPRINT("ScmCreateManagerHandle() failed (Error %lu)\n", dwError);
return dwError;
}
@@ -2427,7 +2434,7 @@ DWORD ROpenSCManagerW(
dwDesiredAccess | SC_MANAGER_CONNECT);
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("ScmCheckAccess() failed (Error %lu)\n", dwError);
+ DPRINT("ScmCheckAccess() failed (Error %lu)\n", dwError);
HeapFree(GetProcessHeap(), 0, hHandle);
return dwError;
}
@@ -2465,7 +2472,7 @@ DWORD ROpenServiceW(
hManager = (PMANAGER_HANDLE)hSCManager;
if (!hManager || hManager->Handle.Tag != MANAGER_TAG)
{
- DPRINT1("Invalid manager handle!\n");
+ DPRINT("Invalid manager handle!\n");
return ERROR_INVALID_HANDLE;
}
@@ -2490,7 +2497,7 @@ DWORD ROpenServiceW(
&hHandle);
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("ScmCreateServiceHandle() failed (Error %lu)\n", dwError);
+ DPRINT("ScmCreateServiceHandle() failed (Error %lu)\n", dwError);
return dwError;
}
@@ -2499,7 +2506,7 @@ DWORD ROpenServiceW(
dwDesiredAccess);
if (dwError != ERROR_SUCCESS)
{
- DPRINT1("ScmCheckAccess() failed (Error %lu)\n", dwError);
+ DPRINT("ScmCheckAccess() failed (Error %lu)\n", dwError);
HeapFree(GetProcessHeap(), 0, hHandle);
return dwError;
}
@@ -2545,21 +2552,21 @@ DWORD RQueryServiceConfigW(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_QUERY_CONFIG))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -2753,21 +2760,21 @@ DWORD RStartServiceW(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_START))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -2810,7 +2817,7 @@ DWORD RGetServiceDisplayNameW(
// hManager = (PMANAGER_HANDLE)hSCManager;
// if (hManager->Handle.Tag != MANAGER_TAG)
// {
-// DPRINT1("Invalid manager handle!\n");
+// DPRINT("Invalid manager handle!\n");
// return ERROR_INVALID_HANDLE;
// }
@@ -2818,7 +2825,7 @@ DWORD RGetServiceDisplayNameW(
lpService = ScmGetServiceEntryByName(lpServiceName);
if (lpService == NULL)
{
- DPRINT1("Could not find a service!\n");
+ DPRINT("Could not find a service!\n");
/* If the service could not be found and lpcchBuffer is less than 2, windows
puts null in lpDisplayName and puts 2 in lpcchBuffer */
@@ -2884,7 +2891,7 @@ DWORD RGetServiceKeyNameW(
// hManager = (PMANAGER_HANDLE)hSCManager;
// if (hManager->Handle.Tag != MANAGER_TAG)
// {
-// DPRINT1("Invalid manager handle!\n");
+// DPRINT("Invalid manager handle!\n");
// return ERROR_INVALID_HANDLE;
// }
@@ -2892,7 +2899,7 @@ DWORD RGetServiceKeyNameW(
lpService = ScmGetServiceEntryByDisplayName(lpDisplayName);
if (lpService == NULL)
{
- DPRINT1("Could not find a service!\n");
+ DPRINT("Could not find a service!\n");
/* If the service could not be found and lpcchBuffer is less than 2, windows
puts null in lpDisplayName and puts 2 in lpcchBuffer */
@@ -2979,21 +2986,21 @@ DWORD RChangeServiceConfigA(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_CHANGE_CONFIG))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -3002,7 +3009,7 @@ DWORD RChangeServiceConfigA(
if (lpService->bDeleted)
{
/* FIXME: Unlock database */
- DPRINT1("The service has already been marked for delete!\n");
+ DPRINT("The service has already been marked for delete!\n");
return ERROR_SERVICE_MARKED_FOR_DELETE;
}
@@ -3414,8 +3421,8 @@ DWORD REnumDependentServicesA(
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SC_MANAGER_ENUMERATE_SERVICE))
{
- DPRINT1("Insufficient access rights! 0x%lx\n",
- hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n",
+ hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
@@ -3456,7 +3463,7 @@ DWORD REnumDependentServicesA(
(dwServicesReturned + 1) * sizeof(PSERVICE));
if (!lpServicesArray)
{
- DPRINT1("Could not allocate a buffer!!\n");
+ DPRINT("Could not allocate a buffer!!\n");
dwError = ERROR_NOT_ENOUGH_MEMORY;
goto Done;
}
@@ -3554,7 +3561,7 @@ DWORD REnumServicesStatusA(
lpStatusPtrW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBufSize);
if (!lpStatusPtrW)
{
- DPRINT1("Failed to allocate buffer!\n");
+ DPRINT("Failed to allocate buffer!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
}
@@ -3719,21 +3726,21 @@ DWORD RQueryServiceConfigA(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_QUERY_CONFIG))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -3952,7 +3959,7 @@ DWORD RStartServiceA(
PSERVICE_HANDLE hSvc;
PSERVICE lpService = NULL;
- DPRINT1("RStartServiceA() called\n");
+ DPRINT("RStartServiceA() called\n");
if (ScmShutdown)
return ERROR_SHUTDOWN_IN_PROGRESS;
@@ -3960,21 +3967,21 @@ DWORD RStartServiceA(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_START))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -4017,7 +4024,7 @@ DWORD RGetServiceDisplayNameA(
// hManager = (PMANAGER_HANDLE)hSCManager;
// if (hManager->Handle.Tag != MANAGER_TAG)
// {
-// DPRINT1("Invalid manager handle!\n");
+// DPRINT("Invalid manager handle!\n");
// return ERROR_INVALID_HANDLE;
// }
@@ -4044,7 +4051,7 @@ DWORD RGetServiceDisplayNameA(
if (lpService == NULL)
{
- DPRINT1("Could not find a service!\n");
+ DPRINT("Could not find a service!\n");
/* If the service could not be found and lpcchBuffer is 0, windows
puts null in lpDisplayName and puts 1 in lpcchBuffer */
@@ -4140,7 +4147,7 @@ DWORD RGetServiceKeyNameA(
if (lpService == NULL)
{
- DPRINT1("Could not find the service!\n");
+ DPRINT("Could not find the service!\n");
/* If the service could not be found and lpcchBuffer is 0,
put null in lpDisplayName and puts 1 in lpcchBuffer, verified WINXP. */
@@ -4341,21 +4348,21 @@ DWORD RChangeServiceConfig2W(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_CHANGE_CONFIG))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -4364,7 +4371,7 @@ DWORD RChangeServiceConfig2W(
if (lpService->bDeleted)
{
/* FIXME: Unlock database */
- DPRINT1("The service has already been marked for delete!\n");
+ DPRINT("The service has already been marked for delete!\n");
return ERROR_SERVICE_MARKED_FOR_DELETE;
}
@@ -4385,7 +4392,7 @@ DWORD RChangeServiceConfig2W(
if (lpServiceDescription != NULL &&
lpServiceDescription->lpDescription != NULL)
{
- DPRINT1("Setting value %S\n", lpServiceDescription->lpDescription);
+ DPRINT("Setting value %S\n", lpServiceDescription->lpDescription);
RegSetValueExW(hServiceKey,
L"Description",
0,
@@ -4430,8 +4437,8 @@ DWORD RQueryServiceConfig2A(
LPWSTR lpDescriptionW = NULL;
LPSTR lpDescription = NULL;
- DPRINT1("RQueryServiceConfig2A() called hService %p dwInfoLevel %u, lpBuffer %p cbBufSize %u pcbBytesNeeded %p\n",
- hService, dwInfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded);
+ DPRINT("RQueryServiceConfig2A() called hService %p dwInfoLevel %u, lpBuffer %p cbBufSize %u pcbBytesNeeded %p\n",
+ hService, dwInfoLevel, lpBuffer, cbBufSize, pcbBytesNeeded);
if (!lpBuffer)
return ERROR_INVALID_ADDRESS;
@@ -4442,21 +4449,21 @@ DWORD RQueryServiceConfig2A(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_QUERY_CONFIG))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -4562,21 +4569,21 @@ DWORD RQueryServiceConfig2W(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_QUERY_CONFIG))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -4715,21 +4722,21 @@ DWORD RQueryServiceStatusEx(
hSvc = (PSERVICE_HANDLE)hService;
if (!hSvc || hSvc->Handle.Tag != SERVICE_TAG)
{
- DPRINT1("Invalid handle tag!\n");
+ DPRINT("Invalid handle tag!\n");
return ERROR_INVALID_HANDLE;
}
if (!RtlAreAllAccessesGranted(hSvc->Handle.DesiredAccess,
SERVICE_QUERY_STATUS))
{
- DPRINT1("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n", hSvc->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
lpService = hSvc->ServiceEntry;
if (lpService == NULL)
{
- DPRINT1("lpService == NULL!\n");
+ DPRINT("lpService == NULL!\n");
return ERROR_INVALID_HANDLE;
}
@@ -4775,7 +4782,7 @@ DWORD REnumServicesStatusExA(
pszGroupNameW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (strlen(pszGroupName) + 1) * sizeof(WCHAR));
if (!pszGroupNameW)
{
- DPRINT1("Failed to allocate buffer!\n");
+ DPRINT("Failed to allocate buffer!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
@@ -4792,7 +4799,7 @@ DWORD REnumServicesStatusExA(
lpStatusPtrW = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbBufSize);
if (!lpStatusPtrW)
{
- DPRINT1("Failed to allocate buffer!\n");
+ DPRINT("Failed to allocate buffer!\n");
return ERROR_NOT_ENOUGH_MEMORY;
}
}
@@ -4908,7 +4915,7 @@ DWORD REnumServicesStatusExW(
hManager = (PMANAGER_HANDLE)hSCManager;
if (!hManager || hManager->Handle.Tag != MANAGER_TAG)
{
- DPRINT1("Invalid manager handle!\n");
+ DPRINT("Invalid manager handle!\n");
return ERROR_INVALID_HANDLE;
}
@@ -4917,13 +4924,13 @@ DWORD REnumServicesStatusExW(
if ((dwServiceType!=SERVICE_DRIVER) && (dwServiceType!=SERVICE_WIN32))
{
- DPRINT1("Not a valid Service Type!\n");
+ DPRINT("Not a valid Service Type!\n");
return ERROR_INVALID_PARAMETER;
}
if ((dwServiceStateSERVICE_STATE_ALL))
{
- DPRINT1("Not a valid Service State!\n");
+ DPRINT("Not a valid Service State!\n");
return ERROR_INVALID_PARAMETER;
}
@@ -4931,8 +4938,8 @@ DWORD REnumServicesStatusExW(
if (!RtlAreAllAccessesGranted(hManager->Handle.DesiredAccess,
SC_MANAGER_ENUMERATE_SERVICE))
{
- DPRINT1("Insufficient access rights! 0x%lx\n",
- hManager->Handle.DesiredAccess);
+ DPRINT("Insufficient access rights! 0x%lx\n",
+ hManager->Handle.DesiredAccess);
return ERROR_ACCESS_DENIED;
}
diff --git a/reactos/base/system/services/services.c b/reactos/base/system/services/services.c
index 44ee8f396af..2d97ce44f4f 100644
--- a/reactos/base/system/services/services.c
+++ b/reactos/base/system/services/services.c
@@ -279,7 +279,7 @@ ShutdownHandlerRoutine(DWORD dwCtrlType)
{
DPRINT1("ShutdownHandlerRoutine() called\n");
- if (dwCtrlType == CTRL_SHUTDOWN_EVENT)
+ if (dwCtrlType & (CTRL_SHUTDOWN_EVENT | CTRL_LOGOFF_EVENT))
{
DPRINT1("Shutdown event received!\n");
ScmShutdown = TRUE;
diff --git a/reactos/base/system/services/services.h b/reactos/base/system/services/services.h
index 23022dc2c92..8371ad18b71 100644
--- a/reactos/base/system/services/services.h
+++ b/reactos/base/system/services/services.h
@@ -42,7 +42,6 @@ typedef struct _SERVICE
DWORD dwResumeCount;
DWORD dwRefCount;
- CLIENT_HANDLE hClient;
SERVICE_STATUS Status;
DWORD dwStartType;
DWORD dwErrorControl;
@@ -112,15 +111,18 @@ DWORD ScmStartService(PSERVICE Service,
PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName);
PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName);
PSERVICE ScmGetServiceEntryByResumeCount(DWORD dwResumeCount);
-PSERVICE ScmGetServiceEntryByClientHandle(HANDLE Handle);
DWORD ScmCreateNewServiceRecord(LPCWSTR lpServiceName,
PSERVICE *lpServiceRecord);
VOID ScmDeleteServiceRecord(PSERVICE lpService);
DWORD ScmMarkServiceForDelete(PSERVICE pService);
DWORD ScmControlService(PSERVICE Service,
- DWORD dwControl,
- LPSERVICE_STATUS lpServiceStatus);
+ DWORD dwControl);
+
+BOOL ScmLockDatabaseExclusive(VOID);
+BOOL ScmLockDatabaseShared(VOID);
+VOID ScmUnlockDatabase(VOID);
+
/* driver.c */
diff --git a/reactos/base/system/winlogon/lang/de-DE.rc b/reactos/base/system/winlogon/lang/de-DE.rc
index 398907674e7..22acc39d009 100644
--- a/reactos/base/system/winlogon/lang/de-DE.rc
+++ b/reactos/base/system/winlogon/lang/de-DE.rc
@@ -14,11 +14,11 @@ END
IDD_GINALOADFAILED DIALOGEX 58, 83, 231, 119
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Benutzer Interface Fehler"
+CAPTION "Benutzerinterface-Fehler"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Die Logon Benutzer Schnittstelle DLL %s konnte nicht geladen werden.", IDC_GINALOADFAILED, 39, 16, 156, 24
- LTEXT "Kontaktieren Sie Ihren Systemadministrator um die DLL zu ersetzen, oder stellen Sie die Original-DLL wieder her.", IDC_GINALOADFAILEDCONTACT, 39, 53, 151, 25
+ LTEXT "Die Logon-Benutzerschnittstellen-DLL %s konnte nicht geladen werden.", IDC_GINALOADFAILED, 39, 16, 156, 24
+ LTEXT "Kontaktieren Sie Ihren Systemadministrator, um die DLL zu ersetzen, oder stellen Sie die Original-DLL wieder her.", IDC_GINALOADFAILEDCONTACT, 39, 53, 151, 25
DEFPUSHBUTTON "Neusta&rt", 1, 80, 91, 68, 14
END
@@ -32,9 +32,9 @@ BEGIN
IDS_RUNNINGLOGOFFSCRIPTS "Abmeldeskripte ausfhren..."
IDS_RUNNINGLOGONSCRIPTS "Anmeldeskripte ausfhren..."
IDS_LOADINGYOURPERSONALSETTINGS "Ihre persnlichen Einstellungen laden..."
- IDS_CLOSINGNETWORKCONNECTIONS "Netzwerkverbindungen schliessen..."
+ IDS_CLOSINGNETWORKCONNECTIONS "Netzwerkverbindungen schlieen..."
IDS_REACTOSISSHUTTINGDOWN "ReactOS fhrt herunter..."
- IDS_PREPARETOSTANDBY "Vorbereiten fr den StandBy Modus..."
+ IDS_PREPARETOSTANDBY "Vorbereiten fr den Stromsparmodus..."
IDS_PREPARETOHIBERNATE "Vorbereiten fr den Ruhezustand..."
IDS_SAVEYOURSETTINGS "Speichern Ihrer persnlichen Einstellungen..."
IDS_REACTOSISSTARTINGUP "ReactOS startet..."
diff --git a/reactos/base/system/winlogon/setup.h b/reactos/base/system/winlogon/setup.h
index efc1d4a3723..d16dbf3b134 100644
--- a/reactos/base/system/winlogon/setup.h
+++ b/reactos/base/system/winlogon/setup.h
@@ -24,12 +24,9 @@
* PROGRAMMER: Eric Kohl
*/
-#ifndef __SETUP_H__
-#define __SETUP_H__
+#pragma once
DWORD GetSetupType (VOID);
BOOL RunSetup (VOID);
-#endif /* __SETUP_H__ */
-
/* EOF */
diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild
index 38f23cbeb2e..80401c1db46 100644
--- a/reactos/baseaddress.rbuild
+++ b/reactos/baseaddress.rbuild
@@ -3,6 +3,7 @@
+
@@ -25,6 +26,7 @@
+
@@ -116,6 +118,7 @@
+
diff --git a/reactos/boot/armllb/armllb.rbuild b/reactos/boot/armllb/armllb.rbuild
index 5e254c43071..2566c788011 100644
--- a/reactos/boot/armllb/armllb.rbuild
+++ b/reactos/boot/armllb/armllb.rbuild
@@ -1,65 +1,66 @@
-
+
-
-
- libcntpr
- rtl
- ./inc
-
-
-
- -Wl,--image-base=0x401FEFF8
-
-
-
-
-
- -Wl,--image-base=0xF000
-
-
- boot.s
- main.c
- crtsupp.c
- envir.c
- fw.c
-
- keyboard.c
- serial.c
- time.c
- video.c
-
-
- hwdata.c
- hwdss.c
- hwuart.c
- hwinfo.c
-
-
-
-
-
- hwclcd.c
- hwkmi.c
- hwuart.c
- hwinfo.c
- hwinit.c
-
-
-
-
- loader.c
-
-
- -fms-extensions
- -ffreestanding
- -fno-builtin
- -fno-inline
- -fno-zero-initialized-in-bss
- -Os
-
-
- -lgcc
-
-
+
+
+ libcntpr
+ rtl
+ ./inc
+
+
+
+ -Wl,--image-base=0x401FEFF8
+
+
+
+
+
+ -Wl,--image-base=0xF000
+
+
+ boot.s
+ main.c
+ crtsupp.c
+ envir.c
+ fw.c
+
+ keyboard.c
+ serial.c
+ time.c
+ video.c
+
+
+ hwdata.c
+ hwdss.c
+ hwuart.c
+ hwinfo.c
+ hwinit.c
+
+
+
+
+ hwclcd.c
+ hwkmi.c
+ hwuart.c
+ hwinfo.c
+ hwinit.c
+
+
+
+
+ loader.c
+
+
+ -fms-extensions
+ -ffreestanding
+ -fno-builtin
+ -fno-inline
+ -fno-zero-initialized-in-bss
+ -Os
+
+
+
+ -lgcc
+
+
diff --git a/reactos/boot/armllb/fw.c b/reactos/boot/armllb/fw.c
index 82dcd7a4c22..4286b4ababa 100644
--- a/reactos/boot/armllb/fw.c
+++ b/reactos/boot/armllb/fw.c
@@ -8,6 +8,26 @@
#include "precomp.h"
+USHORT ColorPalette[16][3] =
+{
+ {0x00, 0x00, 0x00},
+ {0x00, 0x00, 0xAA},
+ {0x00, 0xAA, 0x00},
+ {0x00, 0xAA, 0xAA},
+ {0xAA, 0x00, 0x00},
+ {0xAA, 0x00, 0xAA},
+ {0xAA, 0x55, 0x00},
+ {0xAA, 0xAA, 0xAA},
+ {0x55, 0x55, 0x55},
+ {0x55, 0x55, 0xFF},
+ {0x55, 0xFF, 0x55},
+ {0x55, 0xFF, 0xFF},
+ {0xFF, 0x55, 0x55},
+ {0xFF, 0x55, 0xFF},
+ {0xFF, 0xFF, 0x55},
+ {0xFF, 0xFF, 0xFF},
+};
+
VOID
LlbFwPutChar(INT Ch)
{
@@ -53,55 +73,6 @@ LlbFwVideoGetDisplaySize(OUT PULONG Width,
*Depth = 16;
}
-ULONG
-LlbFwVideoGetBufferSize(VOID)
-{
- /* X * Y * BPP */
- return LlbHwGetScreenWidth() * LlbHwGetScreenHeight() * 2;
-}
-
-VOID
-LlbFwVideoSetTextCursorPosition(IN ULONG X,
- IN ULONG Y)
-{
- printf("%s is UNIMPLEMENTED", __FUNCTION__);
- while (TRUE);
-}
-
-VOID
-LlbFwVideoHideShowTextCursor(IN BOOLEAN Show)
-{
- /* Nothing to do */
- return;
-}
-
-USHORT ColorPalette[16][3] =
-{
- {0x00, 0x00, 0x00},
- {0x00, 0x00, 0xAA},
- {0x00, 0xAA, 0x00},
- {0x00, 0xAA, 0xAA},
- {0xAA, 0x00, 0x00},
- {0xAA, 0x00, 0xAA},
- {0xAA, 0x55, 0x00},
- {0xAA, 0xAA, 0xAA},
- {0x55, 0x55, 0x55},
- {0x55, 0x55, 0xFF},
- {0x55, 0xFF, 0x55},
- {0x55, 0xFF, 0xFF},
- {0xFF, 0x55, 0x55},
- {0xFF, 0x55, 0xFF},
- {0xFF, 0xFF, 0x55},
- {0xFF, 0xFF, 0xFF},
-};
-
-VOID
-LlbFwVideoCopyOffScreenBufferToVRAM(IN PVOID Buffer)
-{
- /* No double-buffer is used on ARM */
- return;
-}
-
VOID
LlbFwVideoClearScreen(IN UCHAR Attr)
{
@@ -133,43 +104,6 @@ LlbFwVideoPutChar(IN INT c,
LlbVideoDrawChar(c, Buffer, Color, BackColor);
}
-BOOLEAN
-LlbFwVideoIsPaletteFixed(VOID)
-{
- printf("%s is UNIMPLEMENTED", __FUNCTION__);
- while (TRUE);
- return TRUE;
-}
-
-VOID
-LlbFwVideoSetPaletteColor(IN UCHAR Color,
- IN UCHAR Red,
- IN UCHAR Green,
- IN UCHAR Blue)
-{
- printf("%s is UNIMPLEMENTED", __FUNCTION__);
- while (TRUE);
- return;
-}
-
-VOID
-LlbFwVideoGetPaletteColor(IN UCHAR Color,
- OUT PUCHAR Red,
- OUT PUCHAR Green,
- OUT PUCHAR Blue)
-{
- printf("%s is UNIMPLEMENTED", __FUNCTION__);
- while (TRUE);
- return;
-}
-
-VOID
-LlbFwVideoSync(VOID)
-{
- printf("%s is UNIMPLEMENTED", __FUNCTION__);
- while (TRUE);
- return;
-}
TIMEINFO*
LlbFwGetTime(VOID)
diff --git a/reactos/boot/armllb/hw/versatile/hwclcd.c b/reactos/boot/armllb/hw/versatile/hwclcd.c
index 438804d2b24..3131880338f 100755
--- a/reactos/boot/armllb/hw/versatile/hwclcd.c
+++ b/reactos/boot/armllb/hw/versatile/hwclcd.c
@@ -32,7 +32,7 @@ LlbHwVersaClcdInitialize(VOID)
WRITE_REGISTER_ULONG(PL110_LCDUPBASE, (ULONG)LlbHwGetFrameBuffer());
WRITE_REGISTER_ULONG(PL110_LCDLPBASE, (ULONG)LlbHwGetFrameBuffer());
- /* Initialize timings to 1024x720 */
+ /* Initialize timings to 720x400 */
WRITE_REGISTER_ULONG(PL110_LCDTIMING0, LCDTIMING0_PPL(LlbHwGetScreenWidth()));
WRITE_REGISTER_ULONG(PL110_LCDTIMING1, LCDTIMING1_LPP(LlbHwGetScreenHeight()));
diff --git a/reactos/boot/armllb/hw/versatile/hwinfo.c b/reactos/boot/armllb/hw/versatile/hwinfo.c
index c312e125552..c1dd350f884 100755
--- a/reactos/boot/armllb/hw/versatile/hwinfo.c
+++ b/reactos/boot/armllb/hw/versatile/hwinfo.c
@@ -47,8 +47,8 @@ LlbHwGetSerialUart(VOID)
// 0x00000200 - 0x0000FFFF ARM STACK [ 62 KB]
// 0x00010000 - 0x0001FFFF ARM LLB [ 64 KB]
// 0x00020000 - 0x0009FFFF ARM OS LOADER [512 KB]
-// 0x000A0000 - 0x000FFFFF ARM FRAMEBUFFER [384 KB]
-// 0x00100000 - 0x007FFFFF OS LOADER FREE/UNUSED [ 7 MB]
+// 0x000A0000 - 0x0013FFFF ARM FRAMEBUFFER [640 KB]
+// 0x00140000 - 0x007FFFFF OS LOADER FREE/UNUSED [ 6 MB]
// 0x00800000 - 0x017FFFFF KERNEL, HAL, INITIAL DRIVER LOAD ADDR [ 16 MB]
// 0x01800000 - 0x037FFFFF RAM DISK [ 32 MB]
// 0x03800000 - 0x07FFFFFF FREE RAM [ 72 MB]
@@ -61,8 +61,8 @@ BIOS_MEMORY_MAP LlbHwVersaMemoryMap[] =
{0x00000200, 0x0000FE00, BiosMemoryBootStrap, 0},
{0x00010000, 0x00010000, BiosMemoryBootStrap, 0},
{0x00020000, 0x00080000, BiosMemoryBootLoader, 0},
- {0x000A0000, 0x00060000, BiosMemoryBootLoader, 0},
- {0x00100000, 0x01700000, BiosMemoryUsable, 0},
+ {0x000A0000, 0x000A0000, BiosMemoryBootLoader, 0},
+ {0x00140000, 0x016C0000, BiosMemoryUsable, 0},
{0x01800000, 0x02000000, BiosMemoryReserved, 0},
{0x10000000, 0x10000000, BiosMemoryReserved, 0},
{0, 0, 0, 0}
diff --git a/reactos/boot/armllb/hw/video.c b/reactos/boot/armllb/hw/video.c
index cfe1f60eebc..3e3179aa404 100644
--- a/reactos/boot/armllb/hw/video.c
+++ b/reactos/boot/armllb/hw/video.c
@@ -274,7 +274,7 @@ ULONG ScreenCursor;
VOID
NTAPI
-LlbVideoDrawChar(IN CHAR c,
+LlbVideoDrawChar(IN UCHAR c,
IN PUSHORT Buffer,
IN USHORT Color,
IN USHORT BackColor)
@@ -342,7 +342,7 @@ LlbVideoClearScreen(IN BOOLEAN OsLoader)
VOID
NTAPI
-LlbVideoPutChar(IN CHAR c)
+LlbVideoPutChar(IN UCHAR c)
{
ULONG cx, cy, CharsPerLine, BackColor, ScreenWidth;
diff --git a/reactos/boot/armllb/inc/video.h b/reactos/boot/armllb/inc/video.h
index 0e67123c934..c38ce4278f0 100755
--- a/reactos/boot/armllb/inc/video.h
+++ b/reactos/boot/armllb/inc/video.h
@@ -15,13 +15,13 @@ LlbVideoClearScreen(
VOID
NTAPI
LlbVideoPutChar(
- IN CHAR c
+ IN UCHAR c
);
VOID
NTAPI
LlbVideoDrawChar(
- IN CHAR c,
+ IN UCHAR c,
IN PUSHORT Buffer,
IN USHORT Color,
IN USHORT BackColor
diff --git a/reactos/boot/armllb/os/loader.c b/reactos/boot/armllb/os/loader.c
index 7d0e9fcf995..5b7caa65578 100755
--- a/reactos/boot/armllb/os/loader.c
+++ b/reactos/boot/armllb/os/loader.c
@@ -76,16 +76,7 @@ LlbBuildArmBlock(VOID)
ArmBlock.VideoClearScreen = LlbFwVideoClearScreen;
ArmBlock.VideoSetDisplayMode = LlbFwVideoSetDisplayMode;
ArmBlock.VideoGetDisplaySize = LlbFwVideoGetDisplaySize;
- ArmBlock.VideoGetBufferSize = LlbFwVideoGetBufferSize;
- ArmBlock.VideoSetTextCursorPosition = LlbFwVideoSetTextCursorPosition;
- ArmBlock.VideoSetTextCursorPosition = LlbFwVideoSetTextCursorPosition;
- ArmBlock.VideoHideShowTextCursor = LlbFwVideoHideShowTextCursor;
ArmBlock.VideoPutChar = LlbFwVideoPutChar;
- ArmBlock.VideoCopyOffScreenBufferToVRAM = LlbFwVideoCopyOffScreenBufferToVRAM;
- ArmBlock.VideoIsPaletteFixed = LlbFwVideoIsPaletteFixed;
- ArmBlock.VideoSetPaletteColor = LlbFwVideoSetPaletteColor;
- ArmBlock.VideoGetPaletteColor = LlbFwVideoGetPaletteColor;
- ArmBlock.VideoSync = LlbFwVideoSync;
ArmBlock.GetTime = LlbFwGetTime;
}
diff --git a/reactos/boot/freeldr/fdebug/rs232.h b/reactos/boot/freeldr/fdebug/rs232.h
index 8697427f3c9..1e0a3f96391 100644
--- a/reactos/boot/freeldr/fdebug/rs232.h
+++ b/reactos/boot/freeldr/fdebug/rs232.h
@@ -19,9 +19,7 @@
*/
-#ifndef __RS232_H
-#define __RS232_H
-
+#pragma once
#ifdef __cplusplus
extern "C" {
@@ -42,5 +40,3 @@ BOOL Rs232WriteByteWin32(BYTE DataByte);
#ifdef __cplusplus
}
#endif /* __cplusplus */
-
-#endif // !defined(__RS232_H)
diff --git a/reactos/boot/freeldr/freeldr.rbuild b/reactos/boot/freeldr/freeldr.rbuild
index a21fea7f88d..422cd3cc1df 100644
--- a/reactos/boot/freeldr/freeldr.rbuild
+++ b/reactos/boot/freeldr/freeldr.rbuild
@@ -10,8 +10,18 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/reactos/boot/freeldr/freeldr/arch/arm/boot.s b/reactos/boot/freeldr/freeldr/arch/arm/boot.s
index 64cf06a7035..cbe9e9b5217 100644
--- a/reactos/boot/freeldr/freeldr/arch/arm/boot.s
+++ b/reactos/boot/freeldr/freeldr/arch/arm/boot.s
@@ -19,19 +19,3 @@
L_ArmInit:
.long ArmInit
-
-.global PageDirectoryStart, PageDirectoryEnd
-.global startup_pagedirectory
-.global kernel_pagetable
-
-.bss
-PageDirectoryStart:
-kernel_pagetable:
- .fill 2*4096, 1, 0
- .space 4096
-startup_pagedirectory:
- .fill 4*4096, 1, 0
-
-
-.global PageDirectoryEnd
-PageDirectoryEnd:
diff --git a/reactos/boot/freeldr/freeldr/arch/arm/loader.c b/reactos/boot/freeldr/freeldr/arch/arm/loader.c
deleted file mode 100644
index 80bb14f809e..00000000000
--- a/reactos/boot/freeldr/freeldr/arch/arm/loader.c
+++ /dev/null
@@ -1,1668 +0,0 @@
-/*
- * PROJECT: ReactOS Boot Loader
- * LICENSE: BSD - See COPYING.ARM in the top level directory
- * FILE: boot/freeldr/arch/arm/loader.c
- * PURPOSE: ARM Kernel Loader
- * PROGRAMMERS: ReactOS Portable Systems Group
- */
-
-/* INCLUDES *******************************************************************/
-
-#include
-#include
-#include
-#include
-
-#define KERNEL_DESCRIPTOR_PAGE(x) (((ULONG_PTR)x &~ KSEG0_BASE) >> PAGE_SHIFT)
-
-/* GLOBALS ********************************************************************/
-
-typedef struct _BIOS_MEMORY_DESCRIPTOR
-{
- ULONG BlockBase;
- ULONG BlockSize;
-} BIOS_MEMORY_DESCRIPTOR, *PBIOS_MEMORY_DESCRIPTOR;
-
-ULONG PageDirectoryStart, PageDirectoryEnd;
-PLOADER_PARAMETER_BLOCK ArmLoaderBlock;
-CHAR ArmCommandLine[256];
-CHAR ArmArcBootPath[64];
-CHAR ArmArcHalPath[64];
-CHAR ArmNtHalPath[64];
-CHAR ArmNtBootPath[64];
-PNLS_DATA_BLOCK ArmNlsDataBlock;
-PLOADER_PARAMETER_EXTENSION ArmExtension;
-BIOS_MEMORY_DESCRIPTOR ArmBoardMemoryDescriptors[16] = {{0}};
-PBIOS_MEMORY_DESCRIPTOR ArmBoardMemoryList = ArmBoardMemoryDescriptors;
-ULONG NumberDescriptors = 0;
-MEMORY_DESCRIPTOR MDArray[16] = {{0}};
-ULONG ArmSharedHeapSize;
-PCHAR ArmSharedHeap;
-
-extern PAGE_DIRECTORY_ARM startup_pagedirectory;
-extern ROS_KERNEL_ENTRY_POINT KernelEntryPoint;
-extern ULONG_PTR KernelBase;
-
-extern ADDRESS_RANGE ArmBoardMemoryMap[16];
-extern ULONG ArmBoardMemoryMapRangeCount;
-extern ULONG_PTR AnsiData, OemData, UnicodeData, RegistryData, KernelData, HalData, DriverData[16];
-extern ULONG RegistrySize, AnsiSize, OemSize, UnicodeSize, KernelSize, HalSize, DriverSize[16];
-extern PCHAR DriverName[16];
-extern ULONG Drivers;
-extern ULONG BootStack;
-
-ULONG SizeBits[] =
-{
- -1, // INVALID
- -1, // INVALID
- 1 << 12, // 4KB
- 1 << 13, // 8KB
- 1 << 14, // 16KB
- 1 << 15, // 32KB
- 1 << 16, // 64KB
- 1 << 17 // 128KB
-};
-
-ULONG AssocBits[] =
-{
- -1, // INVALID
- -1, // INVALID
- 4 // 4-way associative
-};
-
-ULONG LenBits[] =
-{
- -1, // INVALID
- -1, // INVALID
- 8 // 8 words per line (32 bytes)
-};
-
-//
-// Where to map the serial port
-//
-#define UART_VIRTUAL 0xE0000000
-
-/* FUNCTIONS ******************************************************************/
-
-PVOID
-ArmAllocateFromSharedHeap(IN ULONG Size)
-{
- PVOID Buffer;
-
- //
- // Allocate from the shared heap
- //
- Buffer = &ArmSharedHeap[ArmSharedHeapSize];
- ArmSharedHeapSize += Size;
- return Buffer;
-}
-
-PMEMORY_ALLOCATION_DESCRIPTOR
-NTAPI
-ArmAllocateMemoryDescriptor(VOID)
-{
- //
- // Allocate a descriptor from the heap
- //
- return ArmAllocateFromSharedHeap(sizeof(MEMORY_ALLOCATION_DESCRIPTOR));
-}
-
-VOID
-NTAPI
-ArmAddBoardMemoryDescriptor(IN ULONG Address,
- IN ULONG Size)
-{
- PBIOS_MEMORY_DESCRIPTOR BiosBlock = ArmBoardMemoryList;
-
- //
- // Loop board DRAM configuration
- //
- while (BiosBlock->BlockSize > 0)
- {
- /* Check if we've found a matching head block */
- if (Address + Size == BiosBlock->BlockBase)
- {
- /* Simply enlarge and rebase it */
- BiosBlock->BlockBase = Address;
- BiosBlock->BlockSize += Size;
- break;
- }
-
- /* Check if we've found a matching tail block */
- if (Address == (BiosBlock->BlockBase + BiosBlock->BlockSize))
- {
- /* Simply enlarge it */
- BiosBlock->BlockSize += Size;
- break;
- }
-
- /* Nothing suitable found, try the next block */
- BiosBlock++;
- }
-
- /* No usable blocks found, found a free block instead */
- if (!BiosBlock->BlockSize)
- {
- /* Write our data */
- BiosBlock->BlockBase = Address;
- BiosBlock->BlockSize = Size;
-
- /* Create a new block and mark it as the end of the array */
- BiosBlock++;
- BiosBlock->BlockBase = BiosBlock->BlockSize = 0L;
- }
-}
-
-VOID
-NTAPI
-ArmBuildBoardMemoryMap(VOID)
-{
- ULONG BlockBegin, BlockEnd;
- ULONG j;
-
- /* Loop the BIOS Memory Map */
- for (j = 0; j < ArmBoardMemoryMapRangeCount; j++)
- {
- /* Get the start and end addresses */
- BlockBegin = ArmBoardMemoryMap[j].BaseAddrLow;
- BlockEnd = ArmBoardMemoryMap[j].BaseAddrLow + ArmBoardMemoryMap[j].LengthLow - 1;
-
- /* Make sure this isn't a > 4GB descriptor */
- if (!ArmBoardMemoryMap[j].BaseAddrHigh)
- {
- /* Make sure we don't overflow */
- if (BlockEnd < BlockBegin) BlockEnd = 0xFFFFFFFF;
-
- /* Check if this is free memory */
- if (ArmBoardMemoryMap[j].Type == 1)
- {
- /* Add it to our BIOS descriptors */
- ArmAddBoardMemoryDescriptor(BlockBegin, BlockEnd - BlockBegin + 1);
- }
- }
- }
-}
-
-NTSTATUS
-NTAPI
-ArmConfigureArcDescriptor(IN ULONG PageBegin,
- IN ULONG PageEnd,
- IN TYPE_OF_MEMORY MemoryType)
-{
- ULONG i;
- ULONG BlockBegin, BlockEnd;
- MEMORY_TYPE BlockType;
- BOOLEAN Combined = FALSE;
-
- /* If this descriptor seems bogus, just return */
- if (PageEnd <= PageBegin) return STATUS_SUCCESS;
-
- /* Loop every ARC descriptor, trying to find one we can modify */
- for (i = 0; i < NumberDescriptors; i++)
- {
- /* Get its settings */
- BlockBegin = MDArray[i].BasePage;
- BlockEnd = MDArray[i].BasePage + MDArray[i].PageCount;
- BlockType = MDArray[i].MemoryType;
-
- /* Check if we can fit inside this block */
- if (BlockBegin < PageBegin)
- {
- /* Check if we are larger then it */
- if ((BlockEnd > PageBegin) && (BlockEnd <= PageEnd))
- {
- /* Make it end where we start */
- BlockEnd = PageBegin;
- }
-
- /* Check if it ends after we do */
- if (BlockEnd > PageEnd)
- {
- /* Make sure we can allocate a descriptor */
- if (NumberDescriptors == 60) return ENOMEM;
-
- /* Create a descriptor for whatever memory we're not part of */
- MDArray[NumberDescriptors].MemoryType = BlockType;
- MDArray[NumberDescriptors].BasePage = PageEnd;
- MDArray[NumberDescriptors].PageCount = BlockEnd - PageEnd;
- NumberDescriptors++;
-
- /* The next block ending is now where we begin */
- BlockEnd = PageBegin;
- }
- }
- else
- {
- /* Check if the blog begins inside our range */
- if (BlockBegin < PageEnd)
- {
- /* Check if it ends before we do */
- if (BlockEnd < PageEnd)
- {
- /* Then make it disappear */
- BlockEnd = BlockBegin;
- }
- else
- {
- /* Otherwise make it start where we end */
- BlockBegin = PageEnd;
- }
- }
- }
-
- /* Check if the block matches us, and we haven't tried combining yet */
- if ((BlockType == MemoryType) && !(Combined))
- {
- /* Check if it starts where we end */
- if (BlockBegin == PageEnd)
- {
- /* Make it start with us, and combine us */
- BlockBegin = PageBegin;
- Combined = TRUE;
- }
- else if (BlockEnd == PageBegin)
- {
- /* Otherwise, it ends where we begin, combine its ending */
- BlockEnd = PageEnd;
- Combined = TRUE;
- }
- }
-
- /* Check the original block data matches with what we came up with */
- if ((MDArray[i].BasePage == BlockBegin) &&
- (MDArray[i].PageCount == BlockEnd - BlockBegin))
- {
- /* Then skip it */
- continue;
- }
-
- /* Otherwise, set our new settings for this block */
- MDArray[i].BasePage = BlockBegin;
- MDArray[i].PageCount = BlockEnd - BlockBegin;
-
- /* Check if we are killing the block */
- if (BlockBegin == BlockEnd)
- {
- /* Delete this block and restart the loop properly */
- NumberDescriptors--;
- if (i < NumberDescriptors) MDArray[i] = MDArray[NumberDescriptors];
- i--;
- }
- }
-
- /* If we got here without combining, we need to allocate a new block */
- if (!(Combined) && (MemoryType < LoaderMaximum))
- {
- /* Make sure there's enough descriptors */
- if (NumberDescriptors == 60) return ENOMEM;
-
- /* Allocate a new block with our data */
- MDArray[NumberDescriptors].MemoryType = MemoryType;
- MDArray[NumberDescriptors].BasePage = PageBegin;
- MDArray[NumberDescriptors].PageCount = PageEnd - PageBegin;
- NumberDescriptors++;
- }
-
- /* Changes complete, return success */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-NTAPI
-ArmBuildOsMemoryMap(VOID)
-{
- PBIOS_MEMORY_DESCRIPTOR MdBlock;
- ULONG BlockStart, BlockEnd, BiasedStart, BiasedEnd, PageStart, PageEnd;
- NTSTATUS Status = STATUS_SUCCESS;
-
- /* Loop the BIOS Memory Descriptor List */
- MdBlock = ArmBoardMemoryList;
- while (MdBlock->BlockSize)
- {
- /* Get the statrt and end addresses */
- BlockStart = MdBlock->BlockBase;
- BlockEnd = BlockStart + MdBlock->BlockSize - 1;
-
- /* Align them to page boundaries */
- BiasedStart = BlockStart & (PAGE_SIZE - 1);
- if (BiasedStart) BlockStart = BlockStart + PAGE_SIZE - BiasedStart;
- BiasedEnd = (BlockEnd + 1) & (ULONG)(PAGE_SIZE - 1);
- if (BiasedEnd) BlockEnd -= BiasedEnd;
-
- /* Get the actual page numbers */
- PageStart = BlockStart >> PAGE_SHIFT;
- PageEnd = (BlockEnd + 1) >> PAGE_SHIFT;
-
- /* Check if we did any alignment */
- if (BiasedStart)
- {
- /* Mark that region as reserved */
- Status = ArmConfigureArcDescriptor(PageStart - 1,
- PageStart,
- MemorySpecialMemory);
- if (Status != STATUS_SUCCESS) break;
- }
-
- /* Check if we did any alignment */
- if (BiasedEnd)
- {
- /* Mark that region as reserved */
- Status = ArmConfigureArcDescriptor(PageEnd - 1,
- PageEnd,
- MemorySpecialMemory);
- if (Status != STATUS_SUCCESS) break;
- }
-
- /* It is, mark the memory a free */
- Status = ArmConfigureArcDescriptor(PageStart,
- PageEnd,
- LoaderFree);
-
- /* If we failed, break out, otherwise, go to the next BIOS block */
- if (Status != STATUS_SUCCESS) break;
- MdBlock++;
- }
-
- /* Return error code */
- return Status;
-}
-
-VOID
-NTAPI
-ArmInsertMemoryDescriptor(IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor)
-{
- PLIST_ENTRY ListHead, PreviousEntry, NextEntry;
- PMEMORY_ALLOCATION_DESCRIPTOR Descriptor = NULL, NextDescriptor = NULL;
-
- /* Loop the memory descriptor list */
- ListHead = &ArmLoaderBlock->MemoryDescriptorListHead;
- PreviousEntry = ListHead;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Get the current descriptor and check if it's below ours */
- NextDescriptor = CONTAINING_RECORD(NextEntry,
- MEMORY_ALLOCATION_DESCRIPTOR,
- ListEntry);
- if (NewDescriptor->BasePage < NextDescriptor->BasePage) break;
-
- /* It isn't, save the previous entry and descriptor, and try again */
- PreviousEntry = NextEntry;
- Descriptor = NextDescriptor;
- NextEntry = NextEntry->Flink;
- }
-
- /* So we found the right spot to insert. Is this free memory? */
- if (NewDescriptor->MemoryType != LoaderFree)
- {
- /* It isn't, so insert us before the last descriptor */
- InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry);
- }
- else
- {
- /* We're free memory. Check if the entry we found is also free memory */
- if ((PreviousEntry != ListHead) &&
- ((Descriptor->MemoryType == LoaderFree) ||
- (Descriptor->MemoryType == LoaderReserve)) &&
- ((Descriptor->BasePage + Descriptor->PageCount) ==
- NewDescriptor->BasePage))
- {
- /* It's free memory, and we're right after it. Enlarge that block */
- Descriptor->PageCount += NewDescriptor->PageCount;
- NewDescriptor = Descriptor;
- }
- else
- {
- /* Our range scan't be combined, so just insert us separately */
- InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry);
- }
-
- /* Check if we merged with an existing free memory block */
- if ((NextEntry != ListHead) &&
- ((NextDescriptor->MemoryType == LoaderFree) ||
- (NextDescriptor->MemoryType == LoaderReserve)) &&
- ((NewDescriptor->BasePage + NewDescriptor->PageCount) ==
- NextDescriptor->BasePage))
- {
- /* Update our own block */
- NewDescriptor->PageCount += NextDescriptor->PageCount;
-
- /* Remove the next block */
- RemoveEntryList(&NextDescriptor->ListEntry);
- }
- }
-}
-
-NTSTATUS
-NTAPI
-ArmBuildMemoryDescriptor(IN PMEMORY_ALLOCATION_DESCRIPTOR MemoryDescriptor,
- IN MEMORY_TYPE MemoryType,
- IN ULONG BasePage,
- IN ULONG PageCount)
-{
- PMEMORY_ALLOCATION_DESCRIPTOR Descriptor, NextDescriptor = NULL;
- LONG Delta;
- TYPE_OF_MEMORY CurrentType;
- BOOLEAN UseNext;
-
- /* Check how many pages we'll be consuming */
- Delta = BasePage - MemoryDescriptor->BasePage;
- if (!(Delta) && (PageCount == MemoryDescriptor->PageCount))
- {
- /* We can simply convert the current descriptor into our new type */
- MemoryDescriptor->MemoryType = MemoryType;
- }
- else
- {
- /* Get the current memory type of the descriptor, and reserve it */
- CurrentType = MemoryDescriptor->MemoryType;
- MemoryDescriptor->MemoryType = LoaderSpecialMemory;
-
- /* Check if we'll need another descriptor for what's left of memory */
- UseNext = ((BasePage != MemoryDescriptor->BasePage) &&
- (Delta + PageCount != MemoryDescriptor->PageCount));
-
- /* Get a descriptor */
- Descriptor = ArmAllocateMemoryDescriptor();
- if (!Descriptor) return STATUS_INSUFFICIENT_RESOURCES;
-
- /* Check if we are using another descriptor */
- if (UseNext)
- {
- /* Allocate that one too */
- NextDescriptor = ArmAllocateMemoryDescriptor();
- if (!NextDescriptor) return STATUS_INSUFFICIENT_RESOURCES;
- }
-
- /* Build the descriptor we got */
- Descriptor->MemoryType = MemoryType;
- Descriptor->BasePage = BasePage;
- Descriptor->PageCount = PageCount;
-
- /* Check if we're starting at the same place as the old one */
- if (BasePage == MemoryDescriptor->BasePage)
- {
- /* Simply decrease the old descriptor and rebase it */
- MemoryDescriptor->BasePage += PageCount;
- MemoryDescriptor->PageCount -= PageCount;
- MemoryDescriptor->MemoryType = CurrentType;
- }
- else if (Delta + PageCount == MemoryDescriptor->PageCount)
- {
- /* We finish where the old one did, shorten it */
- MemoryDescriptor->PageCount -= PageCount;
- MemoryDescriptor->MemoryType = CurrentType;
- }
- else
- {
- /* We're inside the current block, mark our free region */
- NextDescriptor->MemoryType = LoaderFree;
- NextDescriptor->BasePage = BasePage + PageCount;
- NextDescriptor->PageCount = MemoryDescriptor->PageCount -
- (PageCount + Delta);
-
- /* And cut down the current descriptor */
- MemoryDescriptor->PageCount = Delta;
- MemoryDescriptor->MemoryType = CurrentType;
-
- /* Finally, insert our new free descriptor into the list */
- ArmInsertMemoryDescriptor(NextDescriptor);
- }
-
- /* Insert the descriptor we allocated */
- ArmInsertMemoryDescriptor(Descriptor);
- }
-
- /* Return success */
- return STATUS_SUCCESS;
-}
-
-PMEMORY_ALLOCATION_DESCRIPTOR
-NTAPI
-ArmFindMemoryDescriptor(IN ULONG BasePage)
-{
- PMEMORY_ALLOCATION_DESCRIPTOR MdBlock = NULL;
- PLIST_ENTRY NextEntry, ListHead;
-
- /* Scan the memory descriptor list */
- ListHead = &ArmLoaderBlock->MemoryDescriptorListHead;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Get the current descriptor */
- MdBlock = CONTAINING_RECORD(NextEntry,
- MEMORY_ALLOCATION_DESCRIPTOR,
- ListEntry);
-
- /* Check if it can contain our memory range */
- if ((MdBlock->BasePage <= BasePage) &&
- (MdBlock->BasePage + MdBlock->PageCount > BasePage))
- {
- /* It can, break out */
- break;
- }
-
- /* Go to the next descriptor */
- NextEntry = NextEntry->Flink;
- }
-
- /* Return the descriptor we found, if any */
- return MdBlock;
-}
-
-NTSTATUS
-NTAPI
-ArmCreateMemoryDescriptor(IN TYPE_OF_MEMORY MemoryType,
- IN ULONG BasePage,
- IN ULONG PageCount,
- IN ULONG Alignment,
- OUT PULONG ReturnedBase)
-{
- PMEMORY_ALLOCATION_DESCRIPTOR MdBlock;
- ULONG AlignedBase, AlignedLimit;
- PMEMORY_ALLOCATION_DESCRIPTOR ActiveMdBlock;
- ULONG ActiveAlignedBase = 0;
- PLIST_ENTRY NextEntry, ListHead;
-
- /* If no information was given, make some assumptions */
- if (!Alignment) Alignment = 1;
- if (!PageCount) PageCount = 1;
-
- /* Start looking for a matching descvriptor */
- do
- {
- /* Calculate the limit of the range */
- AlignedLimit = PageCount + BasePage;
-
- /* Find a descriptor that already contains our base address */
- MdBlock = ArmFindMemoryDescriptor(BasePage);
- if (MdBlock)
- {
- /* If it contains our limit as well, break out early */
- if ((MdBlock->PageCount + MdBlock->BasePage) >= AlignedLimit) break;
- }
-
- /* Loop the memory list */
- AlignedBase = 0;
- ActiveMdBlock = NULL;
- ListHead = &ArmLoaderBlock->MemoryDescriptorListHead;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Get the current descriptors */
- MdBlock = CONTAINING_RECORD(NextEntry,
- MEMORY_ALLOCATION_DESCRIPTOR,
- ListEntry);
-
- /* Align the base address and our limit */
- AlignedBase = (MdBlock->BasePage + (Alignment - 1)) &~ Alignment;
- AlignedLimit = MdBlock->PageCount -
- AlignedBase +
- MdBlock->BasePage;
-
- /* Check if this is a free block that can satisfy us */
- if ((MdBlock->MemoryType == LoaderFree) &&
- (AlignedLimit <= MdBlock->PageCount) &&
- (PageCount <= AlignedLimit))
- {
- /* It is, stop searching */
- ActiveMdBlock = MdBlock;
- ActiveAlignedBase = AlignedBase;
- break;
- }
-
- /* Try the next block */
- NextEntry = NextEntry->Flink;
- }
-
- /* See if we came up with an adequate block */
- if (ActiveMdBlock)
- {
- /* Generate a descriptor in it */
- *ReturnedBase = AlignedBase;
- return ArmBuildMemoryDescriptor(ActiveMdBlock,
- MemoryType,
- ActiveAlignedBase,
- PageCount);
- }
- } while (TRUE);
-
- /* We found a matching block, generate a descriptor with it */
- *ReturnedBase = BasePage;
- return ArmBuildMemoryDescriptor(MdBlock, MemoryType, BasePage, PageCount);
-}
-
-NTSTATUS
-NTAPI
-ArmBuildLoaderMemoryList(VOID)
-{
- PMEMORY_ALLOCATION_DESCRIPTOR Descriptor;
- MEMORY_DESCRIPTOR *Memory;
- ULONG i;
-
- /* Loop all BIOS Memory Descriptors */
- for (i = 0; i < NumberDescriptors; i++)
- {
- /* Get the current descriptor */
- Memory = &MDArray[i];
-
- /* Allocate an NT Memory Descriptor */
- Descriptor = ArmAllocateMemoryDescriptor();
- if (!Descriptor) return ENOMEM;
-
- /* Copy the memory type */
- Descriptor->MemoryType = Memory->MemoryType;
- if (Memory->MemoryType == MemoryFreeContiguous)
- {
- /* Convert this to free */
- Descriptor->MemoryType = LoaderFree;
- }
- else if (Memory->MemoryType == MemorySpecialMemory)
- {
- /* Convert this to special memory */
- Descriptor->MemoryType = LoaderSpecialMemory;
- }
-
- /* Copy the range data */
- Descriptor->BasePage = Memory->BasePage;
- Descriptor->PageCount = Memory->PageCount;
-
- /* Insert the descriptor */
- if (Descriptor->PageCount) ArmInsertMemoryDescriptor(Descriptor);
- }
-
- /* All went well */
- return STATUS_SUCCESS;
-}
-
-#define PFN_SHIFT 12
-#define LARGE_PFN_SHIFT 20
-
-#define STARTUP_BASE 0xC0000000
-#define HAL_BASE 0xFFC00000
-#define MMIO_BASE 0x10000000
-
-#define LowMemPageTableIndex 0
-#define StartupPageTableIndex (STARTUP_BASE >> PDE_SHIFT)
-#define MmioPageTableIndex (MMIO_BASE >> PDE_SHIFT)
-#define HalPageTableIndex (HAL_BASE >> PDE_SHIFT)
-
-/* Converts a Physical Address into a Page Frame Number */
-#define PaToPfn(p) ((p) >> PFN_SHIFT)
-#define PaToLargePfn(p) ((p) >> LARGE_PFN_SHIFT)
-
-VOID
-ArmSetupPageDirectory(VOID)
-{
- PPAGE_DIRECTORY_ARM PageDir;
- ULONG KernelPageTableIndex;
- //ULONG i;
-
- /* Get the Kernel Table Index */
- KernelPageTableIndex = KernelBase >> PDE_SHIFT;
- printf("Kernel Base: 0x%p (PDE Index: %lx)\n", KernelBase, KernelPageTableIndex);
-
- /* Get the Startup Page Directory */
- PageDir = (PPAGE_DIRECTORY_ARM)&startup_pagedirectory;
- printf("Initial Page Directory: 0x%p\n", PageDir);
-
- /* Setup the Low Memory PDE as an identity-mapped Large Page (1MB) */
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[LowMemPageTableIndex].LargePage = 1;
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[LowMemPageTableIndex].Accessed = 1;
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[LowMemPageTableIndex].PageFrameNumber = 0;
-
- /* Setup the MMIO PDE as two identity mapped large pages -- the kernel will blow these away later */
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[MmioPageTableIndex].LargePage = 1;
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[MmioPageTableIndex].Accessed = 1;
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[MmioPageTableIndex].PageFrameNumber = PaToLargePfn(0x10000000);
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[MmioPageTableIndex+1].LargePage = 1;
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[MmioPageTableIndex+1].Accessed = 1;
- ((PHARDWARE_LARGE_PTE_ARMV6)PageDir->Pde)[MmioPageTableIndex+1].PageFrameNumber = PaToLargePfn(0x10100000);
- printf("Paging init done\n");
-
- #if 0
- ARM_PTE Pte;
- ULONG i, j;
- PARM_TRANSLATION_TABLE ArmTable;
- PARM_COARSE_PAGE_TABLE BootTable, KernelTable, FlatMapTable, MasterTable;
-
- //
- // Get the PDEs that we will use
- //
- ArmTable = &ArmTranslationTable;
- BootTable = &BootTranslationTable;
- KernelTable = &KernelTranslationTable;
- FlatMapTable = &FlatMapTranslationTable;
- MasterTable = &MasterTranslationTable;
-
- //
- // Set the master L1 PDE as the TTB
- //
- TtbRegister.AsUlong = (ULONG)ArmTable;
- ASSERT(TtbRegister.Reserved == 0);
- KeArmTranslationTableRegisterSet(TtbRegister);
-
- //
- // Use Domain 0, enforce AP bits (client)
- //
- DomainRegister.AsUlong = 0;
- DomainRegister.Domain0 = ClientDomain;
- KeArmDomainRegisterSet(DomainRegister);
-
- //
- // Set Fault PTEs everywhere
- //
- RtlZeroMemory(ArmTable, sizeof(ARM_TRANSLATION_TABLE));
-
- //
- // Identity map the first MB of memory
- //
- Pte.L1.Section.Type = SectionPte;
- Pte.L1.Section.Buffered = FALSE;
- Pte.L1.Section.Cached = FALSE;
- Pte.L1.Section.Reserved = 1; // ARM926EJ-S manual recommends setting to 1
- Pte.L1.Section.Domain = Domain0;
- Pte.L1.Section.Access = SupervisorAccess;
- Pte.L1.Section.BaseAddress = 0;
- Pte.L1.Section.Ignored = Pte.L1.Section.Ignored1 = 0;
- ArmTable->Pte[0] = Pte;
-
- //
- // Map the page in MMIO space that contains the serial port and timers
- //
- Pte.L1.Section.BaseAddress = ArmBoardBlock->UartRegisterBase >> PDE_SHIFT;
- ArmTable->Pte[UART_VIRTUAL >> PDE_SHIFT] = Pte;
-
- //
- // Create template PTE for the coarse page table which maps the PTE_BASE
- //
- Pte.L1.Coarse.Type = CoarsePte;
- Pte.L1.Coarse.Domain = Domain0;
- Pte.L1.Coarse.Reserved = 1; // ARM926EJ-S manual recommends setting to 1
- Pte.L1.Coarse.Ignored = Pte.L1.Coarse.Ignored1 = 0;
- Pte.L1.Coarse.BaseAddress = (ULONG)FlatMapTable >> CPT_SHIFT;
-
- //
- // On x86, there is 4MB of space, starting at 0xC0000000 to 0xC0400000
- // which contains the mappings for each PTE on the system. 4MB is needed
- // since for 4GB, there will be 1 million PTEs, each of 4KB.
- //
- // To describe a 4MB region, on x86, only requires a page table, which can
- // be linked from the page table directory.
- //
- // On the other hand, on ARM, we can only describe 1MB regions, so we need
- // four times less PTE entries to represent a single mapping (an L2 coarse
- // page table). This is problematic, because this would only take up 1KB of
- // space, and we can't have a page that small.
- //
- // This means we must:
- //
- // - Allocate page tables (in physical memory) with 4KB granularity, instead
- // of 1KB (the other 3KB is unused and invalid).
- //
- // - "Skip" the other 3KB in the region, because we can't point to another
- // coarse page table after just 1KB.
- //
- // So 0xC0000000 will be mapped to the page table that maps the range of
- // 0x00000000 to 0x01000000, while 0xC0001000 till be mapped to the page
- // table that maps the area from 0x01000000 to 0x02000000, and so on. In
- // total, this will require 4 million entries, and additionally, because of
- // the padding, since each 256 entries will be 4KB (instead of 1KB), this
- // means we'll need 16MB (0xC0000000 to 0xC1000000).
- //
- // We call this region the flat-map area
- //
- for (i = (PTE_BASE >> PDE_SHIFT); i < ((PTE_BASE + 0x1000000) >> PDE_SHIFT); i++)
- {
- //
- // Write PTE and update the base address (next MB) for the next one
- //
- ArmTable->Pte[i] = Pte;
- Pte.L1.Coarse.BaseAddress += 4;
- }
-
- //
- // On x86, there is also the region of 0xC0300000 to 0xC03080000 which maps
- // to the various PDEs on the system. Yes, this overlaps with the above, and
- // works because of an insidious dark magic (self-mapping the PDE as a PTE).
- // Unfortunately, this doesn't work on ARM, firstly because the size of a L1
- // page table is different than from an L2 page table, and secondly, which
- // is even worse, the format for an L1 page table is different than the one
- // for an L2 page table -- basically meaning we cannot self-map.
- //
- // However, we somewhat emulate this behavior on ARM. This will be expensive
- // since we manually need to keep track of every page directory added and
- // add an entry in our flat-map region. We also need to keep track of every
- // change in the TTB, so that we can update the mappings in our PDE region.
- //
- // Note that for us, this region starts at 0xC1000000, after the flat-map
- // area.
- //
- // Finally, to deal with different sizes (1KB page tables, 4KB page size!),
- // we pad the ARM L2 page tables to make them 4KB, so that each page will
- // therefore point to an L2 page table.
- //
- // This region is a lot easier than the first -- an L1 page table is only
- // 16KB, so to access any index inside it, we just need 4 pages, since each
- // page is 4KB... Clearly, there's also no need to pad in this case.
- //
- // We'll call this region the master translation area.
- //
- Pte.L1.Coarse.BaseAddress = (ULONG)MasterTable >> CPT_SHIFT;
- ArmTable->Pte[PDE_BASE >> PDE_SHIFT] = Pte;
-
- //
- // Now create the template for the coarse page tables which map the first 8MB
- //
- Pte.L1.Coarse.BaseAddress = (ULONG)BootTable >> CPT_SHIFT;
-
- //
- // Map 0x00000000 - 0x007FFFFF to 0x80000000 - 0x807FFFFF.
- // This is where the freeldr boot structures are located, and we need them.
- //
- for (i = (KSEG0_BASE >> PDE_SHIFT); i < ((KSEG0_BASE + 0x800000) >> PDE_SHIFT); i++)
- {
- //
- // Write PTE and update the base address (next MB) for the next one
- //
- ArmTable->Pte[i] = Pte;
- Pte.L1.Coarse.BaseAddress += 4;
- }
-
- //
- // Now create the template PTE for the coarse page tables for the next 6MB
- //
- Pte.L1.Coarse.BaseAddress = (ULONG)KernelTable >> CPT_SHIFT;
-
- //
- // Map 0x00800000 - 0x00DFFFFF to 0x80800000 - 0x80DFFFFF
- // In this way, the KERNEL_PHYS_ADDR (0x800000) becomes 0x80800000
- // which is the kernel virtual base address, just like on x86.
- //
- ASSERT(KernelBase == 0x80800000);
- for (i = (KernelBase >> PDE_SHIFT); i < ((KernelBase + 0x600000) >> PDE_SHIFT); i++)
- {
- //
- // Write PTE and update the base address (next MB) for the next one
- //
- ArmTable->Pte[i] = Pte;
- Pte.L1.Coarse.BaseAddress += 4;
- }
-
- //
- // Now build the template PTE for the pages mapping the first 8MB
- //
- Pte.L2.Small.Type = SmallPte;
- Pte.L2.Small.Buffered = Pte.L2.Small.Cached = 0;
- Pte.L2.Small.Access0 =
- Pte.L2.Small.Access1 =
- Pte.L2.Small.Access2 =
- Pte.L2.Small.Access3 = SupervisorAccess;
- Pte.L2.Small.BaseAddress = 0;
-
- //
- // Loop each boot coarse page table (i).
- // Each PDE describes 1MB. We're mapping an area of 8MB, so 8 times.
- //
- for (i = 0; i < 8; i++)
- {
- //
- // Loop and set each the PTE (j).
- // Each PTE describes 4KB. We're mapping an area of 1MB, so 256 times.
- //
- for (j = 0; j < (PDE_SIZE / PAGE_SIZE); j++)
- {
- //
- // Write PTE and update the base address (next MB) for the next one
- //
- BootTable->Pte[j] = Pte;
- Pte.L2.Small.BaseAddress++;
- }
-
- //
- // Next iteration
- //
- BootTable++;
- }
-
- //
- // Now create the template PTE for the pages mapping the next 6MB
- //
- Pte.L2.Small.BaseAddress = (ULONG)KERNEL_BASE_PHYS >> PTE_SHIFT;
-
- //
- // Loop each kernel coarse page table (i).
- // Each PDE describes 1MB. We're mapping an area of 6MB, so 6 times.
- //
- for (i = 0; i < 6; i++)
- {
- //
- // Loop and set each the PTE (j).
- // Each PTE describes 4KB. We're mapping an area of 1MB, so 256 times.
- //
- for (j = 0; j < (PDE_SIZE / PAGE_SIZE); j++)
- {
- //
- // Write PTE and update the base address (next MB) for the next one
- //
- KernelTable->Pte[j] = Pte;
- Pte.L2.Small.BaseAddress++;
- }
-
- //
- // Next iteration
- //
- KernelTable++;
- }
-
- //
- // Now we need to create the PTEs for the addresses which have been mapped
- // already.
- //
- // We have allocated 4 page table directories:
- //
- // - One for the kernel, 6MB
- // - One for low-memory FreeLDR, 8MB
- // - One for identity-mapping below 1MB, 1MB
- // - And finally, one for the flat-map itself, 16MB
- //
- // - Each MB mapped is a 1KB table, which we'll use a page to reference, so
- // we will require 31 pages.
- //
-
- //
- // For the 0x80000000 region (8MB)
- //
- Pte.L2.Small.BaseAddress = (ULONG)&BootTranslationTable >> PTE_SHIFT;
- FlatMapTable = &(&FlatMapTranslationTable)[0x80000000 >> 28];
- for (i = 0; i < 8; i++)
- {
- //
- // Point to the page table mapping the next MB
- //
- FlatMapTable->Pte[i] = Pte;
- Pte.L2.Small.BaseAddress++;
- }
-
- //
- // For the 0x80800000 region (6MB)
- //
- Pte.L2.Small.BaseAddress = (ULONG)&KernelTranslationTable >> PTE_SHIFT;
- for (i = 8; i < 14; i++)
- {
- //
- // Point to the page table mapping the next MB
- //
- FlatMapTable->Pte[i] = Pte;
- Pte.L2.Small.BaseAddress++;
- }
-
- //
- // For the 0xC0000000 region (16MB)
- //
- Pte.L2.Small.BaseAddress = (ULONG)&FlatMapTranslationTable >> PTE_SHIFT;
- FlatMapTable = &(&FlatMapTranslationTable)[0xC0000000 >> 28];
- for (i = 0; i < 16; i++)
- {
- //
- // Point to the page table mapping the next MB
- //
- FlatMapTable->Pte[i] = Pte;
- Pte.L2.Small.BaseAddress++;
- }
-
- //
- // For the 0xC1000000 region (1MB)
- //
- Pte.L2.Small.BaseAddress = (ULONG)&MasterTranslationTable >> PTE_SHIFT;
- FlatMapTable->Pte[16] = Pte;
-
- //
- // Now we handle the master translation area for our PDEs. We'll just make
- // the 4 page tables point to the ARM TTB.
- //
- Pte.L2.Small.BaseAddress = (ULONG)&ArmTranslationTable >> PTE_SHIFT;
- for (i = 0; i < 4; i++)
- {
- //
- // Point to the page table mapping the next MB
- //
- MasterTable->Pte[i] = Pte;
- Pte.L2.Small.BaseAddress++;
- }
-#endif
-}
-
-VOID
-ArmSetupPagingAndJump(IN ULONG Magic)
-{
- ULONG_PTR PageDirectoryBaseAddress = (ULONG_PTR)&startup_pagedirectory;
- ARM_CONTROL_REGISTER ControlRegister;
- ARM_TTB_REGISTER TtbRegister;
- ARM_DOMAIN_REGISTER DomainRegister;
-
- /* Set the TTBR */
- TtbRegister.AsUlong = PageDirectoryBaseAddress;
- ASSERT(TtbRegister.Reserved == 0);
- KeArmTranslationTableRegisterSet(TtbRegister);
-
- /* Disable domains and simply use access bits on PTEs */
- DomainRegister.AsUlong = 0;
- DomainRegister.Domain0 = ClientDomain;
- KeArmDomainRegisterSet(DomainRegister);
-
- /* Enable ARMv6+ paging (MMU), caches and the access bit */
- ControlRegister = KeArmControlRegisterGet();
- ControlRegister.MmuEnabled = TRUE;
- ControlRegister.ICacheEnabled = TRUE;
- ControlRegister.DCacheEnabled = TRUE;
- ControlRegister.ForceAp = TRUE;
- ControlRegister.ExtendedPageTables = TRUE;
- KeArmControlRegisterSet(ControlRegister);
-
- /* Jump to Kernel */
- TuiPrintf("Hello from MMU Enabled!\n");
- while (TRUE);
- (*KernelEntryPoint)((PVOID)((ULONG_PTR)ArmLoaderBlock | KSEG0_BASE));
-}
-
-VOID
-ArmPrepareForReactOS(IN BOOLEAN Setup)
-{
- ARM_CACHE_REGISTER CacheReg;
- PVOID Base, MemBase;
- PCHAR BootPath, HalPath;
- NTSTATUS Status;
- ULONG Dummy, i;
- PLDR_DATA_TABLE_ENTRY LdrEntry;
- PLIST_ENTRY NextEntry, OldEntry;
- PARC_DISK_INFORMATION ArcDiskInformation;
- PARC_DISK_SIGNATURE ArcDiskSignature;
- ULONG ArcDiskCount = 0;
-#if 0
- ULONG Checksum = 0;
- PMASTER_BOOT_RECORD Mbr;
- PULONG Buffer;
-#endif
- PWCHAR ArmModuleName;
-
- //
- // Allocate the ARM Shared Heap
- //
- ArmSharedHeap = MmAllocateMemoryWithType(PAGE_SIZE, LoaderOsloaderHeap);
- ArmSharedHeapSize = 0;
- if (!ArmSharedHeap) return;
-
- //
- // Allocate the loader block and extension
- //
- ArmLoaderBlock = ArmAllocateFromSharedHeap(sizeof(LOADER_PARAMETER_BLOCK));
- if (!ArmLoaderBlock) return;
- ArmExtension = ArmAllocateFromSharedHeap(sizeof(LOADER_PARAMETER_EXTENSION));
- if (!ArmExtension) return;
-
- //
- // Initialize the loader block
- //
- InitializeListHead(&ArmLoaderBlock->BootDriverListHead);
- InitializeListHead(&ArmLoaderBlock->LoadOrderListHead);
- InitializeListHead(&ArmLoaderBlock->MemoryDescriptorListHead);
-
- //
- // Setup the extension and setup block
- //
- ArmLoaderBlock->Extension = (PVOID)((ULONG_PTR)ArmExtension | KSEG0_BASE);
- ArmLoaderBlock->SetupLdrBlock = NULL;
-
- //
- // Add the Board Memory Map from U-Boot into the STARTUP.COM-style
- // BIOS descriptor format -- this needs to be removed later.
- //
- ArmBuildBoardMemoryMap();
-
- //
- // Now basically convert these entries to the ARC format, so that we can
- // get a good map of free (usable) memory
- //
- ArmBuildOsMemoryMap();
-
- //
- // NT uses an extended ARC format, with slightly different memory types.
- // We also want to link the ARC descriptors together into a linked list,
- // instead of the array, and allocate the semi-permanent storage in which
- // these entries will be stored so that the kernel can read them.
- //
- ArmBuildLoaderMemoryList();
-
- //
- // Setup descriptor for the shared heap
- //
- Status = ArmCreateMemoryDescriptor(LoaderOsloaderHeap,
- (ULONG_PTR)ArmSharedHeap >> PAGE_SHIFT,
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(ArmSharedHeap,
- ArmSharedHeapSize),
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Setup descriptor for the boot stack
- //
- Status = ArmCreateMemoryDescriptor(LoaderOsloaderStack,
- (ULONG_PTR)&BootStack >> PAGE_SHIFT,
- 4,
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-#if 0
- //
- // Setup descriptor for the boot page tables
- //
- Status = ArmCreateMemoryDescriptor(LoaderMemoryData,
- (ULONG_PTR)&TranslationTableStart >> PAGE_SHIFT,
- ((ULONG_PTR)&TranslationTableEnd -
- (ULONG_PTR)&TranslationTableStart) / PAGE_SIZE,
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-#endif
- //
- // Setup descriptor for the kernel
- //
- Status = ArmCreateMemoryDescriptor(LoaderSystemCode,
- KernelData >> PAGE_SHIFT,
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(KernelData,
- KernelSize),
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Setup descriptor for the HAL
- //
- Status = ArmCreateMemoryDescriptor(LoaderHalCode,
- HalData >> PAGE_SHIFT,
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(HalData,
- HalSize),
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Setup registry data
- //
- ArmLoaderBlock->RegistryBase = (PVOID)((ULONG_PTR)RegistryData | KSEG0_BASE);
- ArmLoaderBlock->RegistryLength = RegistrySize;
-
- //
- // Create an MD for it
- //
- Status = ArmCreateMemoryDescriptor(LoaderRegistryData,
- RegistryData >> PAGE_SHIFT,
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(RegistryData,
- RegistrySize),
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // TODO: Setup ARC Hardware tree data
- //
-
- //
- // Setup NLS data
- //
- ArmNlsDataBlock = ArmAllocateFromSharedHeap(sizeof(NLS_DATA_BLOCK));
- ArmLoaderBlock->NlsData = ArmNlsDataBlock;
- ArmLoaderBlock->NlsData->AnsiCodePageData = (PVOID)(AnsiData | KSEG0_BASE);
- ArmLoaderBlock->NlsData->OemCodePageData = (PVOID)(OemData | KSEG0_BASE);
- ArmLoaderBlock->NlsData->UnicodeCodePageData = (PVOID)(UnicodeData | KSEG0_BASE);
- ArmLoaderBlock->NlsData = (PVOID)((ULONG_PTR)ArmLoaderBlock->NlsData | KSEG0_BASE);
-
- //
- // Setup ANSI NLS Memory Descriptor
- //
- Status = ArmCreateMemoryDescriptor(LoaderNlsData,
- AnsiData >> PAGE_SHIFT,
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(AnsiData,
- AnsiSize),
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Setup OEM NLS Memory Descriptor
- //
- Status = ArmCreateMemoryDescriptor(LoaderNlsData,
- OemData >> PAGE_SHIFT,
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(OemData,
- OemSize),
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Setup Unicode NLS Memory Descriptor
- //
- Status = ArmCreateMemoryDescriptor(LoaderNlsData,
- UnicodeData >> PAGE_SHIFT,
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(UnicodeData,
- UnicodeSize),
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Setup loader entry for the kernel
- //
- ArmModuleName = ArmAllocateFromSharedHeap(64 * sizeof(WCHAR));
- wcscpy(ArmModuleName, L"ntoskrnl.exe");
- LdrEntry = ArmAllocateFromSharedHeap(sizeof(LDR_DATA_TABLE_ENTRY));
- RtlZeroMemory(LdrEntry, sizeof(LDR_DATA_TABLE_ENTRY));
- LdrEntry->DllBase = (PVOID)KernelBase;
- LdrEntry->SizeOfImage = KernelSize;
- LdrEntry->EntryPoint = KernelEntryPoint;
- LdrEntry->LoadCount = 1;
- LdrEntry->Flags = LDRP_IMAGE_DLL | LDRP_ENTRY_PROCESSED;
- RtlInitUnicodeString(&LdrEntry->FullDllName, ArmModuleName);
- RtlInitUnicodeString(&LdrEntry->BaseDllName, ArmModuleName);
- LdrEntry->FullDllName.Buffer = (PVOID)((ULONG_PTR)LdrEntry->FullDllName.Buffer | KSEG0_BASE);
- LdrEntry->BaseDllName.Buffer = (PVOID)((ULONG_PTR)LdrEntry->BaseDllName.Buffer | KSEG0_BASE);
- InsertTailList(&ArmLoaderBlock->LoadOrderListHead, &LdrEntry->InLoadOrderLinks);
-
- //
- // Setup loader entry for the HAL
- //
- ArmModuleName = ArmAllocateFromSharedHeap(64 * sizeof(WCHAR));
- wcscpy(ArmModuleName, L"hal.dll");
- LdrEntry = ArmAllocateFromSharedHeap(sizeof(LDR_DATA_TABLE_ENTRY));
- RtlZeroMemory(LdrEntry, sizeof(LDR_DATA_TABLE_ENTRY));
- LdrEntry->DllBase = (PVOID)(HalData | KSEG0_BASE);
- LdrEntry->SizeOfImage = HalSize;
- LdrEntry->EntryPoint = (PVOID)RtlImageNtHeader((PVOID)HalData)->
- OptionalHeader.AddressOfEntryPoint;
- LdrEntry->EntryPoint = (PVOID)((ULONG_PTR)LdrEntry->EntryPoint | KSEG0_BASE);
- LdrEntry->LoadCount = 1;
- LdrEntry->Flags = LDRP_IMAGE_DLL | LDRP_ENTRY_PROCESSED;
- RtlInitUnicodeString(&LdrEntry->FullDllName, ArmModuleName);
- RtlInitUnicodeString(&LdrEntry->BaseDllName, ArmModuleName);
- LdrEntry->FullDllName.Buffer = (PVOID)((ULONG_PTR)LdrEntry->FullDllName.Buffer | KSEG0_BASE);
- LdrEntry->BaseDllName.Buffer = (PVOID)((ULONG_PTR)LdrEntry->BaseDllName.Buffer | KSEG0_BASE);
- InsertTailList(&ArmLoaderBlock->LoadOrderListHead, &LdrEntry->InLoadOrderLinks);
-
- //
- // Build descriptors for the drivers loaded
- //
- for (i = 0; i < Drivers; i++)
- {
- //
- // Setup loader entry for the driver
- //
- LdrEntry = ArmAllocateFromSharedHeap(sizeof(LDR_DATA_TABLE_ENTRY));
- RtlZeroMemory(LdrEntry, sizeof(LDR_DATA_TABLE_ENTRY));
- LdrEntry->DllBase = (PVOID)(DriverData[i] | KSEG0_BASE);
- LdrEntry->SizeOfImage = DriverSize[i];
- LdrEntry->EntryPoint = (PVOID)RtlImageNtHeader((PVOID)DriverData[i])->
- OptionalHeader.AddressOfEntryPoint;
- LdrEntry->EntryPoint = (PVOID)((ULONG_PTR)LdrEntry->EntryPoint | KSEG0_BASE);
- LdrEntry->LoadCount = 1;
- LdrEntry->Flags = LDRP_IMAGE_DLL | LDRP_ENTRY_PROCESSED;
- ArmModuleName = ArmAllocateFromSharedHeap(64 * sizeof(WCHAR));
- RtlZeroMemory(ArmModuleName, 64 * sizeof(WCHAR));
- LdrEntry->FullDllName.Length = strlen(DriverName[i]) * sizeof(WCHAR);
- LdrEntry->FullDllName.MaximumLength = LdrEntry->FullDllName.Length;
- LdrEntry->FullDllName.Buffer = ArmModuleName;
- LdrEntry->BaseDllName = LdrEntry->FullDllName;
- while (*DriverName[i]) *ArmModuleName++ = *DriverName[i]++;
- LdrEntry->FullDllName.Buffer = (PVOID)((ULONG_PTR)LdrEntry->FullDllName.Buffer | KSEG0_BASE);
- LdrEntry->BaseDllName.Buffer = (PVOID)((ULONG_PTR)LdrEntry->BaseDllName.Buffer | KSEG0_BASE);
- InsertTailList(&ArmLoaderBlock->LoadOrderListHead, &LdrEntry->InLoadOrderLinks);
-
- //
- // Build a descriptor for the driver
- //
- Status = ArmCreateMemoryDescriptor(LoaderBootDriver,
- DriverData[i] >> PAGE_SHIFT,
- ADDRESS_AND_SIZE_TO_SPAN_PAGES(DriverData[i],
- DriverSize[i]),
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
- }
-
- //
- // Loop driver list
- //
- NextEntry = ArmLoaderBlock->LoadOrderListHead.Flink;
- while (NextEntry != &ArmLoaderBlock->LoadOrderListHead)
- {
- //
- // Remember the physical entry
- //
- OldEntry = NextEntry->Flink;
-
- //
- // Edit the data
- //
- NextEntry->Flink = (PVOID)((ULONG_PTR)NextEntry->Flink | KSEG0_BASE);
- NextEntry->Blink = (PVOID)((ULONG_PTR)NextEntry->Blink | KSEG0_BASE);
-
- //
- // Keep looping
- //
- NextEntry = OldEntry;
- }
-
- //
- // Now edit the root itself
- //
- NextEntry->Flink = (PVOID)((ULONG_PTR)NextEntry->Flink | KSEG0_BASE);
- NextEntry->Blink = (PVOID)((ULONG_PTR)NextEntry->Blink | KSEG0_BASE);
-
- //
- // Setup extension parameters
- //
- ArmExtension->Size = sizeof(LOADER_PARAMETER_EXTENSION);
- ArmExtension->MajorVersion = 5;
- ArmExtension->MinorVersion = 2;
-
- //
- // Make a copy of the command line
- //
- ArmLoaderBlock->LoadOptions = ArmCommandLine;
- strcpy(ArmCommandLine, reactos_kernel_cmdline);
-
- //
- // Find the first \, separating the ARC path from NT path
- //
- BootPath = strchr(ArmCommandLine, '\\');
- *BootPath = ANSI_NULL;
-
- //
- // Set the ARC Boot Path
- //
- strncpy(ArmArcBootPath, ArmCommandLine, 63);
- ArmLoaderBlock->ArcBootDeviceName = (PVOID)((ULONG_PTR)ArmArcBootPath | KSEG0_BASE);
-
- //
- // The rest of the string is the NT path
- //
- HalPath = strchr(BootPath + 1, ' ');
- *HalPath = ANSI_NULL;
- ArmNtBootPath[0] = '\\';
- strncat(ArmNtBootPath, BootPath + 1, 63);
- strcat(ArmNtBootPath,"\\");
- ArmLoaderBlock->NtBootPathName = (PVOID)((ULONG_PTR)ArmNtBootPath | KSEG0_BASE);
-
- //
- // Set the HAL paths
- //
- strncpy(ArmArcHalPath, ArmArcBootPath, 63);
- ArmLoaderBlock->ArcHalDeviceName = (PVOID)((ULONG_PTR)ArmArcHalPath | KSEG0_BASE);
- strcpy(ArmNtHalPath, "\\");
- ArmLoaderBlock->NtHalPathName = (PVOID)((ULONG_PTR)ArmNtHalPath | KSEG0_BASE);
-
- //
- // Use this new command line
- //
- strncpy(ArmLoaderBlock->LoadOptions, HalPath + 2, 255);
-
- //
- // Parse it and change every slash to a space
- //
- BootPath = ArmLoaderBlock->LoadOptions;
- do {if (*BootPath == '/') *BootPath = ' ';} while (*BootPath++);
-
- //
- // Fixup command-line pointer
- //
- ArmLoaderBlock->LoadOptions = (PVOID)((ULONG_PTR)ArmLoaderBlock->LoadOptions | KSEG0_BASE);
-
- //
- // Setup cache information
- //
- CacheReg = KeArmCacheRegisterGet();
- ArmLoaderBlock->u.Arm.FirstLevelDcacheSize = SizeBits[CacheReg.DSize];
- ArmLoaderBlock->u.Arm.FirstLevelDcacheFillSize = LenBits[CacheReg.DLength];
- ArmLoaderBlock->u.Arm.FirstLevelDcacheFillSize <<= 2;
- ArmLoaderBlock->u.Arm.FirstLevelIcacheSize = SizeBits[CacheReg.ISize];
- ArmLoaderBlock->u.Arm.FirstLevelIcacheFillSize = LenBits[CacheReg.ILength];
- ArmLoaderBlock->u.Arm.FirstLevelIcacheFillSize <<= 2;
- ArmLoaderBlock->u.Arm.SecondLevelDcacheSize =
- ArmLoaderBlock->u.Arm.SecondLevelDcacheFillSize =
- ArmLoaderBlock->u.Arm.SecondLevelIcacheSize =
- ArmLoaderBlock->u.Arm.SecondLevelIcacheFillSize = 0;
-
- //
- // Allocate the Interrupt stack
- //
- Base = MmAllocateMemoryWithType(KERNEL_STACK_SIZE, LoaderStartupDpcStack);
- ArmLoaderBlock->u.Arm.InterruptStack = KSEG0_BASE | (ULONG)Base;
- ArmLoaderBlock->u.Arm.InterruptStack += KERNEL_STACK_SIZE;
-
- //
- // Build an entry for it
- //
- Status = ArmCreateMemoryDescriptor(LoaderStartupDpcStack,
- (ULONG_PTR)Base >> PAGE_SHIFT,
- KERNEL_STACK_SIZE / PAGE_SIZE,
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Allocate the Kernel Boot stack
- //
- Base = MmAllocateMemoryWithType(KERNEL_STACK_SIZE, LoaderStartupKernelStack);
- ArmLoaderBlock->KernelStack = KSEG0_BASE | (ULONG)Base;
- ArmLoaderBlock->KernelStack += KERNEL_STACK_SIZE;
-
- //
- // Build an entry for it
- //
- Status = ArmCreateMemoryDescriptor(LoaderStartupKernelStack,
- (ULONG_PTR)Base >> PAGE_SHIFT,
- KERNEL_STACK_SIZE / PAGE_SIZE,
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Allocate the Abort stack
- //
- Base = MmAllocateMemoryWithType(KERNEL_STACK_SIZE, LoaderStartupPanicStack);
- ArmLoaderBlock->u.Arm.PanicStack = KSEG0_BASE | (ULONG)Base;
- ArmLoaderBlock->u.Arm.PanicStack += KERNEL_STACK_SIZE;
-
- //
- // Build an entry for it
- //
- Status = ArmCreateMemoryDescriptor(LoaderStartupPanicStack,
- (ULONG_PTR)Base >> PAGE_SHIFT,
- KERNEL_STACK_SIZE / PAGE_SIZE,
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Allocate the PCR/KUSER_SHARED page -- align it to 1MB (we only need 2x4KB)
- //
- Base = MmAllocateMemoryWithType(2 * 1024 * 1024, LoaderStartupPcrPage);
- MemBase = Base;
- Base = (PVOID)ROUND_UP(Base, 1 * 1024 * 1024);
- ArmLoaderBlock->u.Arm.PcrPage = (ULONG)Base >> PDE_SHIFT;
-
- //
- // Build an entry for the KPCR and KUSER_SHARED_DATA
- //
- Status = ArmCreateMemoryDescriptor(LoaderStartupPcrPage,
- (ULONG_PTR)MemBase >> PAGE_SHIFT,
- (2 * 1024 * 1024) / PAGE_SIZE,
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Allocate PDR pages -- align them to 1MB (we only need 3x4KB)
- //
- Base = MmAllocateMemoryWithType(4 * 1024 * 1024, LoaderStartupPdrPage);
- MemBase = Base;
- Base = (PVOID)ROUND_UP(Base, 1 * 1024 * 1024);
- ArmLoaderBlock->u.Arm.PdrPage = (ULONG)Base >> PDE_SHIFT;
-
- //
- // Build an entry for the PDR, PRCB and initial KPROCESS/KTHREAD
- //
- Status = ArmCreateMemoryDescriptor(LoaderStartupPdrPage,
- (ULONG_PTR)MemBase >> PAGE_SHIFT,
- (4 * 1024 * 1024) / PAGE_SIZE,
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
-
- //
- // Set initial PRCB, Thread and Process on the last PDR page
- //
- Base = (PVOID)((ULONG)Base + 2 * 1024 * 1024);
- ArmLoaderBlock->Prcb = KSEG0_BASE | (ULONG)Base;
- ArmLoaderBlock->Process = ArmLoaderBlock->Prcb + sizeof(KPRCB);
- ArmLoaderBlock->Thread = ArmLoaderBlock->Process + sizeof(EPROCESS);
-
- //
- // Check if we're booting from RAM disk
- //
- if ((gRamDiskBase) && (gRamDiskSize))
- {
- //
- // Allocate a descriptor to describe it
- //
- Status = ArmCreateMemoryDescriptor(LoaderXIPRom,
- (ULONG_PTR)gRamDiskBase >> PAGE_SHIFT,
- gRamDiskSize / PAGE_SIZE,
- 0,
- &Dummy);
- if (Status != STATUS_SUCCESS) return;
- }
-
- //
- // Loop memory list
- //
- NextEntry = ArmLoaderBlock->MemoryDescriptorListHead.Flink;
- while (NextEntry != &ArmLoaderBlock->MemoryDescriptorListHead)
- {
- //
- // Remember the physical entry
- //
- OldEntry = NextEntry->Flink;
-
- //
- // Edit the data
- //
- NextEntry->Flink = (PVOID)((ULONG_PTR)NextEntry->Flink | KSEG0_BASE);
- NextEntry->Blink = (PVOID)((ULONG_PTR)NextEntry->Blink | KSEG0_BASE);
-
- //
- // Keep looping
- //
- NextEntry = OldEntry;
- }
-
- //
- // Now edit the root itself
- //
- NextEntry->Flink = (PVOID)((ULONG_PTR)NextEntry->Flink | KSEG0_BASE);
- NextEntry->Blink = (PVOID)((ULONG_PTR)NextEntry->Blink | KSEG0_BASE);
-
- //
- // Allocate ARC disk structure
- //
- ArcDiskInformation = ArmAllocateFromSharedHeap(sizeof(ARC_DISK_INFORMATION));
- InitializeListHead(&ArcDiskInformation->DiskSignatureListHead);
- ArmLoaderBlock->ArcDiskInformation = (PVOID)((ULONG_PTR)ArcDiskInformation | KSEG0_BASE);
-
-#if 0
- //
- // Read the MBR
- //
- MachDiskReadLogicalSectors(0x49, 0ULL, 1, (PVOID)DISKREADBUFFER);
- Buffer = (ULONG*)DISKREADBUFFER;
- Mbr = (PMASTER_BOOT_RECORD)DISKREADBUFFER;
-
- //
- // Calculate the MBR checksum
- //
- for (i = 0; i < 128; i++) Checksum += Buffer[i];
- Checksum = ~Checksum + 1;
-
-#endif
- //
- // Allocate a disk signature and fill it out
- //
- ArcDiskSignature = ArmAllocateFromSharedHeap(sizeof(ARC_DISK_SIGNATURE));
- ArcDiskSignature->Signature = 0xBADAB00B;// Mbr->Signature;
- ArcDiskSignature->CheckSum = 0xFAB4BEEF; //Checksum;
-
- //
- // Allocare a string for the name and fill it out
- //
- ArcDiskSignature->ArcName = ArmAllocateFromSharedHeap(256);
- sprintf(ArcDiskSignature->ArcName, "multi(0)disk(0)rdisk(%lu)", ArcDiskCount++);
- ArcDiskSignature->ArcName = (PVOID)((ULONG_PTR)ArcDiskSignature->ArcName | KSEG0_BASE);
-
- //
- // Insert the descriptor into the list
- //
- InsertTailList(&ArcDiskInformation->DiskSignatureListHead,
- &ArcDiskSignature->ListEntry);
-
- //
- // Loop ARC disk list
- //
- NextEntry = ArcDiskInformation->DiskSignatureListHead.Flink;
- while (NextEntry != &ArcDiskInformation->DiskSignatureListHead)
- {
- //
- // Remember the physical entry
- //
- OldEntry = NextEntry->Flink;
-
- //
- // Edit the data
- //
- NextEntry->Flink = (PVOID)((ULONG_PTR)NextEntry->Flink | KSEG0_BASE);
- NextEntry->Blink = (PVOID)((ULONG_PTR)NextEntry->Blink | KSEG0_BASE);
-
- //
- // Keep looping
- //
- NextEntry = OldEntry;
- }
-
- //
- // Now edit the root itself
- //
- NextEntry->Flink = (PVOID)((ULONG_PTR)NextEntry->Flink | KSEG0_BASE);
- NextEntry->Blink = (PVOID)((ULONG_PTR)NextEntry->Blink | KSEG0_BASE);
-}
-
-VOID
-FrLdrStartup(IN ULONG Magic)
-{
- //
- // Disable interrupts (already done)
- //
-
- //
- // Set proper CPSR (already done)
- //
-
- //
- // Initialize the page directory
- //
- ArmSetupPageDirectory();
-
- //
- // Initialize paging and load NTOSKRNL
- //
- ArmSetupPagingAndJump(Magic);
-}
diff --git a/reactos/boot/freeldr/freeldr/arch/arm/macharm.c b/reactos/boot/freeldr/freeldr/arch/arm/macharm.c
index f8979bba771..b0b8e27e2c7 100644
--- a/reactos/boot/freeldr/freeldr/arch/arm/macharm.c
+++ b/reactos/boot/freeldr/freeldr/arch/arm/macharm.c
@@ -9,73 +9,79 @@
/* INCLUDES *******************************************************************/
#include
-#define RGB565(r, g, b) (((r >> 3) << 11)| ((g >> 2) << 5)| ((b >> 3) << 0))
+#include
/* GLOBALS ********************************************************************/
-UCHAR BootStack[0x4000];
-PUCHAR BootStackEnd = &BootStack[0x3FFF];
PARM_BOARD_CONFIGURATION_BLOCK ArmBoardBlock;
-ULONG BootDrive, BootPartition;
-VOID ArmPrepareForReactOS(IN BOOLEAN Setup);
-ADDRESS_RANGE ArmBoardMemoryMap[16];
-ULONG ArmBoardMemoryMapRangeCount;
ULONG gDiskReadBuffer, gFileSysBuffer;
+BOOLEAN ArmHwDetectRan;
+PCONFIGURATION_COMPONENT_DATA RootNode;
+
+ULONG FirstLevelDcacheSize;
+ULONG FirstLevelDcacheFillSize;
+ULONG FirstLevelIcacheSize;
+ULONG FirstLevelIcacheFillSize;
+ULONG SecondLevelDcacheSize;
+ULONG SecondLevelDcacheFillSize;
+ULONG SecondLevelIcacheSize;
+ULONG SecondLevelIcacheFillSize;
+
+ARC_DISK_SIGNATURE reactos_arc_disk_info;
+ULONG reactos_disk_count;
+CHAR reactos_arc_hardware_data[256];
+
+ULONG SizeBits[] =
+{
+ -1, // INVALID
+ -1, // INVALID
+ 1 << 12, // 4KB
+ 1 << 13, // 8KB
+ 1 << 14, // 16KB
+ 1 << 15, // 32KB
+ 1 << 16, // 64KB
+ 1 << 17 // 128KB
+};
+
+ULONG AssocBits[] =
+{
+ -1, // INVALID
+ -1, // INVALID
+ 4 // 4-way associative
+};
+
+ULONG LenBits[] =
+{
+ -1, // INVALID
+ -1, // INVALID
+ 8 // 8 words per line (32 bytes)
+};
/* FUNCTIONS ******************************************************************/
VOID
ArmInit(IN PARM_BOARD_CONFIGURATION_BLOCK BootContext)
{
- ULONG i;
-
- //
- // Remember the pointer
- //
+ /* Remember the pointer */
ArmBoardBlock = BootContext;
- //
- // Let's make sure we understand the LLB
- //
+ /* Let's make sure we understand the LLB */
ASSERT(ArmBoardBlock->MajorVersion == ARM_BOARD_CONFIGURATION_MAJOR_VERSION);
ASSERT(ArmBoardBlock->MinorVersion == ARM_BOARD_CONFIGURATION_MINOR_VERSION);
- //
- // This should probably go away once we support more boards
- //
+ /* This should probably go away once we support more boards */
ASSERT((ArmBoardBlock->BoardType == MACH_TYPE_FEROCEON) ||
(ArmBoardBlock->BoardType == MACH_TYPE_VERSATILE_PB) ||
(ArmBoardBlock->BoardType == MACH_TYPE_OMAP3_BEAGLE));
- //
- // Save data required for memory initialization
- //
- ArmBoardMemoryMapRangeCount = ArmBoardBlock->MemoryMapEntryCount;
- ASSERT(ArmBoardMemoryMapRangeCount != 0);
- ASSERT(ArmBoardMemoryMapRangeCount < 16);
- for (i = 0; i < ArmBoardMemoryMapRangeCount; i++)
- {
- //
- // Copy each entry
- //
- RtlCopyMemory(&ArmBoardMemoryMap[i],
- &ArmBoardBlock->MemoryMap[i],
- sizeof(ADDRESS_RANGE));
- }
-
- //
- // Call FreeLDR's portable entrypoint with our command-line
- //
+ /* Call FreeLDR's portable entrypoint with our command-line */
BootMain(ArmBoardBlock->CommandLine);
}
-BOOLEAN
-ArmDiskNormalizeSystemPath(IN OUT PCHAR SystemPath,
- IN unsigned Size)
+VOID
+ArmPrepareForReactOS(IN BOOLEAN Setup)
{
- /* Only RAMDISK supported for now */
- if (!strstr(SystemPath, "ramdisk(0)")) return FALSE;
- return TRUE;
+ return;
}
BOOLEAN
@@ -95,28 +101,42 @@ ArmDiskGetBootPath(OUT PCHAR BootPath,
PCONFIGURATION_COMPONENT_DATA
ArmHwDetect(VOID)
{
- PCONFIGURATION_COMPONENT_DATA RootNode;
+ ARM_CACHE_REGISTER CacheReg;
- //
- // Create the root node
- //
+ /* Create the root node */
+ if (ArmHwDetectRan++) return RootNode;
FldrCreateSystemKey(&RootNode);
- //
- // TODO:
- // There's no such thing as "PnP" on embedded hardware.
- // The boot loader will send us a device tree, similar to ACPI
- // or OpenFirmware device trees, and we will convert it to ARC.
- //
+ /*
+ * TODO:
+ * There's no such thing as "PnP" on embedded hardware.
+ * The boot loader will send us a device tree, similar to ACPI
+ * or OpenFirmware device trees, and we will convert it to ARC.
+ */
- //
- // Register RAMDISK Device
- //
+ /* Get cache information */
+ CacheReg = KeArmCacheRegisterGet();
+ FirstLevelDcacheSize = SizeBits[CacheReg.DSize];
+ FirstLevelDcacheFillSize = LenBits[CacheReg.DLength];
+ FirstLevelDcacheFillSize <<= 2;
+ FirstLevelIcacheSize = SizeBits[CacheReg.ISize];
+ FirstLevelIcacheFillSize = LenBits[CacheReg.ILength];
+ FirstLevelIcacheFillSize <<= 2;
+ SecondLevelDcacheSize =
+ SecondLevelDcacheFillSize =
+ SecondLevelIcacheSize =
+ SecondLevelIcacheFillSize = 0;
+
+ /* Register RAMDISK Device */
RamDiskInitialize();
- //
- // Return the root node
- //
+ /* Fill out the ARC disk block */
+ reactos_arc_disk_info.Signature = 0xBADAB00F;
+ reactos_arc_disk_info.CheckSum = 0xDEADBABE;
+ reactos_arc_disk_info.ArcName = "ramdisk(0)";
+ reactos_disk_count = 1;
+
+ /* Return the root node */
return RootNode;
}
@@ -124,34 +144,26 @@ ULONG
ArmMemGetMemoryMap(OUT PBIOS_MEMORY_MAP BiosMemoryMap,
IN ULONG MaxMemoryMapSize)
{
- //
- // Return whatever the board returned to us (CS0 Base + Size and FLASH0)
- //
- RtlCopyMemory(BiosMemoryMap,
- ArmBoardBlock->MemoryMap,
- ArmBoardBlock->MemoryMapEntryCount * sizeof(BIOS_MEMORY_MAP));
+ /* Return whatever the board returned to us (CS0 Base + Size and FLASH0) */
+ memcpy(BiosMemoryMap,
+ ArmBoardBlock->MemoryMap,
+ ArmBoardBlock->MemoryMapEntryCount * sizeof(BIOS_MEMORY_MAP));
return ArmBoardBlock->MemoryMapEntryCount;
}
VOID
MachInit(IN PCCH CommandLine)
{
- //
- // Setup board-specific ARM routines
- //
+ /* Setup board-specific ARM routines */
switch (ArmBoardBlock->BoardType)
{
- //
- // Check for Feroceon-base boards
- //
+ /* Check for Feroceon-base boards */
case MACH_TYPE_FEROCEON:
TuiPrintf("Not implemented\n");
while (TRUE);
break;
- //
- // Check for ARM Versatile PB boards
- //
+ /* Check for ARM Versatile PB boards */
case MACH_TYPE_VERSATILE_PB:
/* Copy Machine Routines from Firmware Table */
@@ -161,16 +173,7 @@ MachInit(IN PCCH CommandLine)
MachVtbl.VideoClearScreen = ArmBoardBlock->VideoClearScreen;
MachVtbl.VideoSetDisplayMode = ArmBoardBlock->VideoSetDisplayMode;
MachVtbl.VideoGetDisplaySize = ArmBoardBlock->VideoGetDisplaySize;
- MachVtbl.VideoGetBufferSize = ArmBoardBlock->VideoGetBufferSize;
- MachVtbl.VideoSetTextCursorPosition = ArmBoardBlock->VideoSetTextCursorPosition;
- MachVtbl.VideoSetTextCursorPosition = ArmBoardBlock->VideoSetTextCursorPosition;
- MachVtbl.VideoHideShowTextCursor = ArmBoardBlock->VideoHideShowTextCursor;
MachVtbl.VideoPutChar = ArmBoardBlock->VideoPutChar;
- MachVtbl.VideoCopyOffScreenBufferToVRAM = ArmBoardBlock->VideoCopyOffScreenBufferToVRAM;
- MachVtbl.VideoIsPaletteFixed = ArmBoardBlock->VideoIsPaletteFixed;
- MachVtbl.VideoSetPaletteColor = ArmBoardBlock->VideoSetPaletteColor;
- MachVtbl.VideoGetPaletteColor = ArmBoardBlock->VideoGetPaletteColor;
- MachVtbl.VideoSync = ArmBoardBlock->VideoSync;
MachVtbl.GetTime = ArmBoardBlock->GetTime;
/* Setup the disk and file system buffers */
@@ -178,10 +181,10 @@ MachInit(IN PCCH CommandLine)
gFileSysBuffer = 0x00090000;
break;
- //
- // Check for TI OMAP3 boards
- // For now that means only Beagle, but ZOOM and others should be ok too
- //
+ /*
+ * Check for TI OMAP3 boards
+ * For now that means only Beagle, but ZOOM and others should be ok too
+ */
case MACH_TYPE_OMAP3_BEAGLE:
TuiPrintf("Not implemented\n");
while (TRUE);
@@ -191,22 +194,9 @@ MachInit(IN PCCH CommandLine)
ASSERT(FALSE);
}
- //
- // Setup generic ARM routines for all boards
- //
+ /* Setup generic ARM routines for all boards */
MachVtbl.PrepareForReactOS = ArmPrepareForReactOS;
MachVtbl.GetMemoryMap = ArmMemGetMemoryMap;
MachVtbl.HwDetect = ArmHwDetect;
-
- //
- // Setup disk I/O routines
- //
MachVtbl.DiskGetBootPath = ArmDiskGetBootPath;
- MachVtbl.DiskNormalizeSystemPath = ArmDiskNormalizeSystemPath;
-
- //
- // We can now print to the console
- //
- TuiPrintf("%s for ARM\n", GetFreeLoaderVersionString());
- TuiPrintf("Bootargs: %s\n\n", CommandLine);
}
diff --git a/reactos/boot/freeldr/freeldr/arch/i386/halstub.c b/reactos/boot/freeldr/freeldr/arch/i386/halstub.c
new file mode 100644
index 00000000000..02aca2b67de
--- /dev/null
+++ b/reactos/boot/freeldr/freeldr/arch/i386/halstub.c
@@ -0,0 +1,97 @@
+/*
+* PROJECT: ReactOS Kernel
+* LICENSE: GPL - See COPYING in the top level directory
+* FILE: boot/freeldr/freeldr/arch/i386/hal/halstub.c
+* PURPOSE: I/O Stub HAL Routines
+* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
+*/
+
+/* INCLUDES ******************************************************************/
+
+#include
+#define NDEBUG
+#include
+
+/* FUNCTIONS *****************************************************************/
+
+NTSTATUS
+FASTCALL
+xHalIoReadPartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN BOOLEAN ReturnRecognizedPartitions,
+ OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer)
+{
+ return IoReadPartitionTable(DeviceObject,
+ SectorSize,
+ ReturnRecognizedPartitions,
+ PartitionBuffer);
+}
+
+UCHAR
+NTAPI
+xHalVectorToIDTEntry(IN ULONG Vector)
+{
+ /* Return the vector */
+ return Vector;
+}
+
+VOID
+NTAPI
+xHalHaltSystem(VOID)
+{
+ /* Halt execution */
+ while (TRUE);
+}
+
+/* GLOBALS *******************************************************************/
+
+HAL_DISPATCH HalDispatchTable =
+{
+ HAL_DISPATCH_VERSION,
+ (pHalQuerySystemInformation)NULL,
+ (pHalSetSystemInformation)NULL,
+ (pHalQueryBusSlots)NULL,
+ 0,
+ (pHalExamineMBR)NULL,
+ (pHalIoAssignDriveLetters)NULL,
+ (pHalIoReadPartitionTable)xHalIoReadPartitionTable,
+ (pHalIoSetPartitionInformation)NULL,
+ (pHalIoWritePartitionTable)NULL,
+ (pHalHandlerForBus)NULL,
+ (pHalReferenceBusHandler)NULL,
+ (pHalReferenceBusHandler)NULL,
+ (pHalInitPnpDriver)NULL,
+ (pHalInitPowerManagement)NULL,
+ (pHalGetDmaAdapter)NULL,
+ (pHalGetInterruptTranslator)NULL,
+ (pHalStartMirroring)NULL,
+ (pHalEndMirroring)NULL,
+ (pHalMirrorPhysicalMemory)NULL,
+ (pHalEndOfBoot)NULL,
+ (pHalMirrorVerify)NULL
+};
+
+HAL_PRIVATE_DISPATCH HalPrivateDispatchTable =
+{
+ HAL_PRIVATE_DISPATCH_VERSION,
+ (pHalHandlerForBus)NULL,
+ (pHalHandlerForConfigSpace)NULL,
+ (pHalLocateHiberRanges)NULL,
+ (pHalRegisterBusHandler)NULL,
+ (pHalSetWakeEnable)NULL,
+ (pHalSetWakeAlarm)NULL,
+ (pHalTranslateBusAddress)NULL,
+ (pHalAssignSlotResources)NULL,
+ (pHalHaltSystem)xHalHaltSystem,
+ (pHalFindBusAddressTranslation)NULL,
+ (pHalResetDisplay)NULL,
+ (pHalAllocateMapRegisters)NULL,
+ (pKdSetupPciDeviceForDebugging)NULL,
+ (pKdReleasePciDeviceForDebugging)NULL,
+ (pKdGetAcpiTablePhase0)NULL,
+ (pKdCheckPowerButton)NULL,
+ (pHalVectorToIDTEntry)xHalVectorToIDTEntry,
+ (pKdMapPhysicalMemory64)NULL,
+ (pKdUnmapVirtualAddress)NULL
+};
diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hardware.c b/reactos/boot/freeldr/freeldr/arch/i386/hardware.c
index 6b3d7a4dcc4..d4654ccd138 100644
--- a/reactos/boot/freeldr/freeldr/arch/i386/hardware.c
+++ b/reactos/boot/freeldr/freeldr/arch/i386/hardware.c
@@ -433,11 +433,27 @@ static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId)
ULONGLONG SectorOffset = 0;
ULONGLONG SectorCount = 0;
PARTITION_TABLE_ENTRY PartitionTableEntry;
+ GEOMETRY Geometry;
+ EXTENDED_GEOMETRY ExtGeometry;
CHAR FileName[1];
if (!DissectArcPath(Path, FileName, &DriveNumber, &DrivePartition))
return EINVAL;
- SectorSize = (DrivePartition == 0xff ? 2048 : 512);
+
+ ExtGeometry.Size = sizeof(EXTENDED_GEOMETRY);
+ if (DiskGetExtendedDriveParameters(DriveNumber, &ExtGeometry, ExtGeometry.Size))
+ {
+ SectorSize = ExtGeometry.BytesPerSector;
+ SectorCount = ExtGeometry.Sectors;
+ }
+ else if (MachDiskGetDriveGeometry(DriveNumber, &Geometry))
+ {
+ SectorSize = Geometry.BytesPerSector;
+ SectorCount = Geometry.Sectors;
+ }
+ else
+ return EINVAL;
+
if (DrivePartition != 0xff && DrivePartition != 0)
{
if (!DiskGetPartitionEntry(DriveNumber, DrivePartition, &PartitionTableEntry))
@@ -445,10 +461,6 @@ static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId)
SectorOffset = PartitionTableEntry.SectorCountBeforePartition;
SectorCount = PartitionTableEntry.PartitionSectorCount;
}
- else
- {
- SectorCount = 0; /* FIXME */
- }
Context = MmHeapAlloc(sizeof(DISKCONTEXT));
if (!Context)
diff --git a/reactos/boot/freeldr/freeldr/arch/i386/loader.c b/reactos/boot/freeldr/freeldr/arch/i386/loader.c
index 70ad27f2be0..c9ae5c454e1 100644
--- a/reactos/boot/freeldr/freeldr/arch/i386/loader.c
+++ b/reactos/boot/freeldr/freeldr/arch/i386/loader.c
@@ -17,7 +17,6 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#define _NTSYSTEM_
#include
#define NDEBUG
diff --git a/reactos/boot/freeldr/freeldr/arch/i386/ntoskrnl.c b/reactos/boot/freeldr/freeldr/arch/i386/ntoskrnl.c
new file mode 100644
index 00000000000..dcc51ef2b59
--- /dev/null
+++ b/reactos/boot/freeldr/freeldr/arch/i386/ntoskrnl.c
@@ -0,0 +1,114 @@
+#include
+#define NDEBUG
+#include
+
+VOID
+NTAPI
+KeInitializeEvent(
+ IN PRKEVENT Event,
+ IN EVENT_TYPE Type,
+ IN BOOLEAN State)
+{
+}
+
+VOID
+FASTCALL
+KiAcquireSpinLock(
+ IN PKSPIN_LOCK SpinLock)
+{
+}
+
+VOID
+FASTCALL
+KiReleaseSpinLock(
+ IN PKSPIN_LOCK SpinLock)
+{
+}
+
+VOID
+NTAPI
+KeSetTimeIncrement(
+ IN ULONG MaxIncrement,
+ IN ULONG MinIncrement)
+{
+}
+
+NTKERNELAPI
+VOID
+FASTCALL
+IoAssignDriveLetters(
+ IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
+ IN PSTRING NtDeviceName,
+ OUT PUCHAR NtSystemPath,
+ OUT PSTRING NtSystemPathString)
+{
+}
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoSetPartitionInformation(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG PartitionNumber,
+ IN ULONG PartitionType)
+{
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoWritePartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG SectorsPerTrack,
+ IN ULONG NumberOfHeads,
+ IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer)
+{
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTHALAPI
+VOID
+NTAPI
+KeStallExecutionProcessor(
+ IN ULONG MicroSeconds)
+{
+ REGS Regs;
+ ULONG usec_this;
+
+ // Int 15h AH=86h
+ // BIOS - WAIT (AT,PS)
+ //
+ // AH = 86h
+ // CX:DX = interval in microseconds
+ // Return:
+ // CF clear if successful (wait interval elapsed)
+ // CF set on error or AH=83h wait already in progress
+ // AH = status (see #00496)
+
+ // Note: The resolution of the wait period is 977 microseconds on
+ // many systems because many BIOSes use the 1/1024 second fast
+ // interrupt from the AT real-time clock chip which is available on INT 70;
+ // because newer BIOSes may have much more precise timers available, it is
+ // not possible to use this function accurately for very short delays unless
+ // the precise behavior of the BIOS is known (or found through testing)
+
+ while (MicroSeconds)
+ {
+ usec_this = MicroSeconds;
+
+ if (usec_this > 4000000)
+ {
+ usec_this = 4000000;
+ }
+
+ Regs.b.ah = 0x86;
+ Regs.w.cx = usec_this >> 16;
+ Regs.w.dx = usec_this & 0xffff;
+ Int386(0x15, &Regs, &Regs);
+
+ MicroSeconds -= usec_this;
+ }
+}
diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/compat.h b/reactos/boot/freeldr/freeldr/arch/powerpc/compat.h
index 66797a6929d..3bc1b7998d7 100644
--- a/reactos/boot/freeldr/freeldr/arch/powerpc/compat.h
+++ b/reactos/boot/freeldr/freeldr/arch/powerpc/compat.h
@@ -1,5 +1,4 @@
-#ifndef _FREELDR_ARCH_COMPAT_H
-#define _FREELDR_ARCH_COMPAT_H
+#pragma once
#define __init
#define __initdata
@@ -104,5 +103,3 @@ void *ioremap(__u32 phys, __u32 size);
void iounmap(void *logical);
__u32 GetPVR();
-
-#endif/*_FREELDR_ARCH_COMPAT_H*/
diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/prep.h b/reactos/boot/freeldr/freeldr/arch/powerpc/prep.h
index 710f6caec69..ea03fa0ae1f 100644
--- a/reactos/boot/freeldr/freeldr/arch/powerpc/prep.h
+++ b/reactos/boot/freeldr/freeldr/arch/powerpc/prep.h
@@ -1,5 +1,4 @@
-#ifndef FREELDR_ARCH_POWERPC_PREP_H
-#define FREELDR_ARCH_POWERPC_PREP_H
+#pragma once
extern struct _pci_desc pci1_desc;
extern struct _idectl_desc ide1_desc;
@@ -27,5 +26,3 @@ void vga_setup
( PCONFIGURATION_COMPONENT_DATA pci_bus,
struct _pci_desc *pci_desc, struct _vga_desc *vga_desc,
int bus, int dev, int fn );
-
-#endif//FREELDR_ARCH_POWERPC_PREP_H
diff --git a/reactos/boot/freeldr/freeldr/bootmgr.c b/reactos/boot/freeldr/freeldr/bootmgr.c
index a83f294cef3..0959de69d69 100644
--- a/reactos/boot/freeldr/freeldr/bootmgr.c
+++ b/reactos/boot/freeldr/freeldr/bootmgr.c
@@ -119,6 +119,12 @@ VOID RunLoader(VOID)
return;
}
+ // Load additional SCSI driver (if any)
+ if (LoadBootDeviceDriver() != ESUCCESS)
+ {
+ UiMessageBoxCritical("Unable to load additional boot device driver");
+ }
+
if (!IniFileInitialize())
{
UiMessageBoxCritical("Error initializing .ini file");
@@ -218,6 +224,7 @@ VOID RunLoader(VOID)
IniOpenSection("Operating Systems", &SectionId);
IniReadSettingByName(SectionId, SectionName, SettingValue, sizeof(SettingValue));
+#ifndef _M_ARM
// Install the drive mapper according to this sections drive mappings
#ifdef __i386__
DriveMapMapDrivesInSection(SectionName);
@@ -270,6 +277,9 @@ VOID RunLoader(VOID)
{
LoadAndBootDrive(SectionName);
}
+#endif
+#else
+ LoadAndBootWindows(SectionName, SettingValue, _WIN32_WINNT_WS03);
#endif
}
diff --git a/reactos/boot/freeldr/freeldr/comm/rs232.c b/reactos/boot/freeldr/freeldr/comm/rs232.c
index 3e3697a6aa0..0ef92cef2cd 100644
--- a/reactos/boot/freeldr/freeldr/comm/rs232.c
+++ b/reactos/boot/freeldr/freeldr/comm/rs232.c
@@ -18,6 +18,8 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+
+#ifndef _M_ARM
#include
@@ -285,3 +287,5 @@ BOOLEAN Rs232PortInUse(ULONG Base)
return FALSE;
#endif
}
+
+#endif /* not _M_ARM */
diff --git a/reactos/boot/freeldr/freeldr/debug.c b/reactos/boot/freeldr/freeldr/debug.c
index 86a4574d71b..11cdc83e4a1 100644
--- a/reactos/boot/freeldr/freeldr/debug.c
+++ b/reactos/boot/freeldr/freeldr/debug.c
@@ -21,7 +21,7 @@
#include
-#if DBG
+#if DBG && !defined(_M_ARM)
//#define DEBUG_ALL
//#define DEBUG_INIFILE
@@ -171,6 +171,12 @@ VOID DebugPrintHeader(ULONG Mask)
case DPRINT_HWDETECT:
DbgPrint("HWDETECT: ");
break;
+ case DPRINT_PELOADER:
+ DbgPrint("PELOADER: ");
+ break;
+ case DPRINT_SCSIPORT:
+ DbgPrint("SCSIPORT: ");
+ break;
default:
DbgPrint("UNKNOWN: ");
break;
@@ -192,6 +198,12 @@ VOID DbgPrintMask(ULONG Mask, char *format, ...)
return;
}
+ // Disable file/line for scsiport messages
+ if (Mask & DPRINT_SCSIPORT)
+ {
+ DebugStartOfLine = FALSE;
+ }
+
// Print the header if we have started a new line
if (DebugStartOfLine)
{
@@ -326,3 +338,22 @@ MsgBoxPrint(const char *Format, ...)
return 0;
}
+NTKERNELAPI
+DECLSPEC_NORETURN
+VOID
+NTAPI
+KeBugCheckEx(
+ IN ULONG BugCheckCode,
+ IN ULONG_PTR BugCheckParameter1,
+ IN ULONG_PTR BugCheckParameter2,
+ IN ULONG_PTR BugCheckParameter3,
+ IN ULONG_PTR BugCheckParameter4)
+{
+ char Buffer[70];
+ sprintf(Buffer, "*** STOP: 0x%08lX (0x%08lX, 0x%08lX, 0x%08lX, 0x%08lX)",
+ BugCheckCode, BugCheckParameter1, BugCheckParameter2,
+ BugCheckParameter3, BugCheckParameter4);
+ UiMessageBoxCritical(Buffer);
+ assert(FALSE);
+ for (;;);
+}
diff --git a/reactos/boot/freeldr/freeldr/disk/disk.c b/reactos/boot/freeldr/freeldr/disk/disk.c
index 1ca0a941499..16ee1be7ad9 100644
--- a/reactos/boot/freeldr/freeldr/disk/disk.c
+++ b/reactos/boot/freeldr/freeldr/disk/disk.c
@@ -17,6 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifndef _M_ARM
#include
#include
@@ -167,3 +168,5 @@ DiskNormalizeSystemPath(char *SystemPath, unsigned Size)
// This function is in arch/i386/i386disk.c
//ULONG DiskGetCacheableBlockCount(ULONG DriveNumber)
+
+#endif
diff --git a/reactos/boot/freeldr/freeldr/disk/partition.c b/reactos/boot/freeldr/freeldr/disk/partition.c
index a0198bfff06..8966e67187a 100644
--- a/reactos/boot/freeldr/freeldr/disk/partition.c
+++ b/reactos/boot/freeldr/freeldr/disk/partition.c
@@ -17,6 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifndef _M_ARM
#include
#include
@@ -238,3 +239,153 @@ BOOLEAN DiskReadBootRecord(ULONG DriveNumber, ULONGLONG LogicalSectorNumber, PMA
return TRUE;
}
+
+NTSTATUS
+NTAPI
+IopReadBootRecord(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONGLONG LogicalSectorNumber,
+ IN ULONG SectorSize,
+ OUT PMASTER_BOOT_RECORD BootRecord)
+{
+ ULONG FileId = (ULONG)DeviceObject;
+ LARGE_INTEGER Position;
+ ULONG BytesRead;
+ ULONG Status;
+
+ Position.QuadPart = LogicalSectorNumber * SectorSize;
+ Status = ArcSeek(FileId, &Position, SeekAbsolute);
+ if (Status != ESUCCESS)
+ return STATUS_IO_DEVICE_ERROR;
+
+ Status = ArcRead(FileId, BootRecord, SectorSize, &BytesRead);
+ if (Status != ESUCCESS || BytesRead != SectorSize)
+ return STATUS_IO_DEVICE_ERROR;
+
+ return STATUS_SUCCESS;
+}
+
+BOOLEAN
+NTAPI
+IopCopyPartitionRecord(
+ IN BOOLEAN ReturnRecognizedPartitions,
+ IN ULONG SectorSize,
+ IN PPARTITION_TABLE_ENTRY PartitionTableEntry,
+ OUT PARTITION_INFORMATION *PartitionEntry)
+{
+ BOOLEAN IsRecognized;
+
+ IsRecognized = TRUE; /* FIXME */
+ if (!IsRecognized && ReturnRecognizedPartitions)
+ return FALSE;
+
+ PartitionEntry->StartingOffset.QuadPart = (ULONGLONG)PartitionTableEntry->SectorCountBeforePartition * SectorSize;
+ PartitionEntry->PartitionLength.QuadPart = (ULONGLONG)PartitionTableEntry->PartitionSectorCount * SectorSize;
+ PartitionEntry->HiddenSectors = 0;
+ PartitionEntry->PartitionNumber = 0; /* Will be filled later */
+ PartitionEntry->PartitionType = PartitionTableEntry->SystemIndicator;
+ PartitionEntry->BootIndicator = (PartitionTableEntry->BootIndicator & 0x80) ? TRUE : FALSE;
+ PartitionEntry->RecognizedPartition = IsRecognized;
+ PartitionEntry->RewritePartition = FALSE;
+
+ return TRUE;
+}
+
+NTKERNELAPI
+NTSTATUS
+FASTCALL
+IoReadPartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN BOOLEAN ReturnRecognizedPartitions,
+ OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer)
+{
+ PMASTER_BOOT_RECORD MasterBootRecord;
+ PDRIVE_LAYOUT_INFORMATION Partitions;
+ ULONG NbPartitions, i, Size;
+ NTSTATUS ret;
+
+ *PartitionBuffer = NULL;
+
+ if (SectorSize < sizeof(MASTER_BOOT_RECORD))
+ return STATUS_NOT_SUPPORTED;
+
+ MasterBootRecord = ExAllocatePool(NonPagedPool, SectorSize);
+ if (!MasterBootRecord)
+ return STATUS_NO_MEMORY;
+
+ /* Read disk MBR */
+ ret = IopReadBootRecord(DeviceObject, 0, SectorSize, MasterBootRecord);
+ if (!NT_SUCCESS(ret))
+ {
+ ExFreePool(MasterBootRecord);
+ return ret;
+ }
+
+ /* Check validity of boot record */
+ if (MasterBootRecord->MasterBootRecordMagic != 0xaa55)
+ {
+ ExFreePool(MasterBootRecord);
+ return STATUS_NOT_SUPPORTED;
+ }
+
+ /* Count number of partitions */
+ NbPartitions = 0;
+ for (i = 0; i < 4; i++)
+ {
+ NbPartitions++;
+
+ if (MasterBootRecord->PartitionTable[i].SystemIndicator == PARTITION_EXTENDED ||
+ MasterBootRecord->PartitionTable[i].SystemIndicator == PARTITION_XINT13_EXTENDED)
+ {
+ /* FIXME: unhandled case; count number of partitions */
+ UNIMPLEMENTED;
+ }
+ }
+
+ if (NbPartitions == 0)
+ {
+ ExFreePool(MasterBootRecord);
+ return STATUS_NOT_SUPPORTED;
+ }
+
+ /* Allocation space to store partitions */
+ Size = FIELD_OFFSET(DRIVE_LAYOUT_INFORMATION, PartitionEntry) +
+ NbPartitions * sizeof(PARTITION_INFORMATION);
+ Partitions = ExAllocatePool(NonPagedPool, Size);
+ if (!Partitions)
+ {
+ ExFreePool(MasterBootRecord);
+ return STATUS_NO_MEMORY;
+ }
+
+ /* Count number of partitions */
+ NbPartitions = 0;
+ for (i = 0; i < 4; i++)
+ {
+ if (IopCopyPartitionRecord(ReturnRecognizedPartitions,
+ SectorSize,
+ &MasterBootRecord->PartitionTable[i],
+ &Partitions->PartitionEntry[NbPartitions]))
+ {
+ Partitions->PartitionEntry[NbPartitions].PartitionNumber = NbPartitions + 1;
+ NbPartitions++;
+ }
+
+ if (MasterBootRecord->PartitionTable[i].SystemIndicator == PARTITION_EXTENDED ||
+ MasterBootRecord->PartitionTable[i].SystemIndicator == PARTITION_XINT13_EXTENDED)
+ {
+ /* FIXME: unhandled case; copy partitions */
+ UNIMPLEMENTED;
+ }
+ }
+
+ Partitions->PartitionCount = NbPartitions;
+ Partitions->Signature = MasterBootRecord->Signature;
+ ExFreePool(MasterBootRecord);
+
+ *PartitionBuffer = Partitions;
+ return STATUS_SUCCESS;
+}
+
+#endif
diff --git a/reactos/boot/freeldr/freeldr/disk/scsiport.c b/reactos/boot/freeldr/freeldr/disk/scsiport.c
new file mode 100644
index 00000000000..d8d15b12d84
--- /dev/null
+++ b/reactos/boot/freeldr/freeldr/disk/scsiport.c
@@ -0,0 +1,1701 @@
+#include
+
+#define _SCSIPORT_
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define NDEBUG
+#include
+
+#define DPRINTM2(fmt, ...) DPRINTM(DPRINT_SCSIPORT, "(%s:%d) SCSIPORT: " fmt, __FILE__, __LINE__, __VA_ARGS__)
+
+#undef UNIMPLEMENTED
+#define UNIMPLEMENTED DPRINTM2("%s UNIMPLEMENTED\n", __FUNCTION__)
+
+#define SCSI_PORT_NEXT_REQUEST_READY 0x0008
+
+typedef struct
+{
+ PVOID NonCachedExtension;
+
+ ULONG BusNum;
+ ULONG MaxTargedIds;
+
+ ULONG InterruptFlags;
+
+ /* SRB extension stuff */
+ ULONG SrbExtensionSize;
+ PVOID SrbExtensionBuffer;
+
+ IO_SCSI_CAPABILITIES PortCapabilities;
+
+ PHW_INITIALIZE HwInitialize;
+ PHW_STARTIO HwStartIo;
+ PHW_INTERRUPT HwInterrupt;
+ PHW_RESET_BUS HwResetBus;
+
+ /* DMA related stuff */
+ PADAPTER_OBJECT AdapterObject;
+
+ ULONG CommonBufferLength;
+
+ PVOID MiniPortDeviceExtension;
+} SCSI_PORT_DEVICE_EXTENSION, *PSCSI_PORT_DEVICE_EXTENSION;
+
+PSCSI_PORT_DEVICE_EXTENSION ScsiDeviceExtensions[SCSI_MAXIMUM_BUSES];
+
+ULONG
+ntohl(
+ IN ULONG Value)
+{
+ FOUR_BYTE Dest;
+ PFOUR_BYTE Source = (PFOUR_BYTE)&Value;
+
+ Dest.Byte0 = Source->Byte3;
+ Dest.Byte1 = Source->Byte2;
+ Dest.Byte2 = Source->Byte1;
+ Dest.Byte3 = Source->Byte0;
+
+ return Dest.AsULong;
+}
+
+BOOLEAN
+SpiSendSynchronousSrb(
+ IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
+ IN PSCSI_REQUEST_BLOCK Srb)
+{
+ BOOLEAN ret;
+
+ ASSERT(!(Srb->SrbFlags & SRB_FLAGS_IS_ACTIVE));
+
+ /* HACK: handle lack of interrupts */
+ while (!(DeviceExtension->InterruptFlags & SCSI_PORT_NEXT_REQUEST_READY))
+ {
+ KeStallExecutionProcessor(100 * 1000);
+ DeviceExtension->HwInterrupt(DeviceExtension->MiniPortDeviceExtension);
+ }
+
+ DeviceExtension->InterruptFlags &= ~SCSI_PORT_NEXT_REQUEST_READY;
+ Srb->SrbFlags |= SRB_FLAGS_IS_ACTIVE;
+
+ if (!DeviceExtension->HwStartIo(
+ DeviceExtension->MiniPortDeviceExtension,
+ Srb))
+ {
+ ExFreePool(Srb);
+ return FALSE;
+ }
+
+ /* HACK: handle lack of interrupts */
+ while (Srb->SrbFlags & SRB_FLAGS_IS_ACTIVE)
+ {
+ KeStallExecutionProcessor(100 * 1000);
+ DeviceExtension->HwInterrupt(DeviceExtension->MiniPortDeviceExtension);
+ }
+
+ ret = SRB_STATUS(Srb->SrbStatus) == SRB_STATUS_SUCCESS;
+ ExFreePool(Srb);
+
+ return ret;
+}
+
+typedef struct tagDISKCONTEXT
+{
+ /* Device ID */
+ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension;
+ ULONG PathId;
+ ULONG TargetId;
+ ULONG Lun;
+
+ /* Device characteristics */
+ ULONG SectorSize;
+ ULONGLONG SectorOffset;
+ ULONGLONG SectorCount;
+ ULONGLONG SectorNumber;
+} DISKCONTEXT;
+
+static LONG DiskClose(ULONG FileId)
+{
+ DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
+
+ ExFreePool(Context);
+ return ESUCCESS;
+}
+
+static LONG DiskGetFileInformation(ULONG FileId, FILEINFORMATION* Information)
+{
+ DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
+
+ RtlZeroMemory(Information, sizeof(FILEINFORMATION));
+ Information->EndingAddress.QuadPart = Context->SectorCount * Context->SectorSize;
+ Information->CurrentAddress.LowPart = Context->SectorNumber * Context->SectorSize;
+
+ return ESUCCESS;
+}
+
+static LONG DiskOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId)
+{
+ PSCSI_REQUEST_BLOCK Srb;
+ PCDB Cdb;
+ READ_CAPACITY_DATA ReadCapacityBuffer;
+
+ DISKCONTEXT* Context;
+ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension;
+ ULONG ScsiBus, PathId, TargetId, Lun, Partition, PathSyntax;
+ ULONG SectorSize;
+ ULONGLONG SectorOffset = 0;
+ ULONGLONG SectorCount;
+
+ /* Parse ARC path */
+ if (!DissectArcPath2(Path, &ScsiBus, &TargetId, &Lun, &Partition, &PathSyntax))
+ return EINVAL;
+ if (PathSyntax != 0) /* scsi() format */
+ return EINVAL;
+ DeviceExtension = ScsiDeviceExtensions[ScsiBus];
+ PathId = ScsiBus - DeviceExtension->BusNum;
+
+ /* Get disk capacity and sector size */
+ Srb = ExAllocatePool(PagedPool, sizeof(SCSI_REQUEST_BLOCK));
+ if (!Srb)
+ return ENOMEM;
+ RtlZeroMemory(Srb, sizeof(SCSI_REQUEST_BLOCK));
+ Srb->Length = sizeof(SCSI_REQUEST_BLOCK);
+ Srb->Function = SRB_FUNCTION_EXECUTE_SCSI;
+ Srb->PathId = PathId;
+ Srb->TargetId = TargetId;
+ Srb->Lun = Lun;
+ Srb->CdbLength = 10;
+ Srb->SrbFlags = SRB_FLAGS_DATA_IN;
+ Srb->DataTransferLength = sizeof(READ_CAPACITY_DATA);
+ Srb->TimeOutValue = 5; /* in seconds */
+ Srb->DataBuffer = &ReadCapacityBuffer;
+ Cdb = (PCDB)Srb->Cdb;
+ Cdb->CDB10.OperationCode = SCSIOP_READ_CAPACITY;
+ if (!SpiSendSynchronousSrb(DeviceExtension, Srb))
+ {
+ return EIO;
+ }
+
+ /* Transform result to host endianness */
+ SectorCount = ntohl(ReadCapacityBuffer.LogicalBlockAddress);
+ SectorSize = ntohl(ReadCapacityBuffer.BytesPerBlock);
+
+ if (Partition != 0)
+ {
+ /* Need to offset start of disk and length */
+ UNIMPLEMENTED;
+ return EIO;
+ }
+
+ Context = ExAllocatePool(PagedPool, sizeof(DISKCONTEXT));
+ if (!Context)
+ return ENOMEM;
+ Context->DeviceExtension = DeviceExtension;
+ Context->PathId = PathId;
+ Context->TargetId = TargetId;
+ Context->Lun = Lun;
+ Context->SectorSize = SectorSize;
+ Context->SectorOffset = SectorOffset;
+ Context->SectorCount = SectorCount;
+ Context->SectorNumber = 0;
+ FsSetDeviceSpecific(*FileId, Context);
+
+ return ESUCCESS;
+}
+
+static LONG DiskRead(ULONG FileId, VOID* Buffer, ULONG N, ULONG* Count)
+{
+ DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
+ PSCSI_REQUEST_BLOCK Srb;
+ PCDB Cdb;
+ ULONG FullSectors, NbSectors;
+ ULONG Lba;
+
+ *Count = 0;
+
+ if (N == 0)
+ return ESUCCESS;
+
+ FullSectors = N / Context->SectorSize;
+ NbSectors = (N + Context->SectorSize - 1) / Context->SectorSize;
+ if (Context->SectorNumber + NbSectors >= Context->SectorCount)
+ return EINVAL;
+ if (FullSectors > 0xffff)
+ return EINVAL;
+
+ /* Read full sectors */
+ Lba = Context->SectorNumber;
+ if (FullSectors > 0)
+ {
+ Srb = ExAllocatePool(PagedPool, sizeof(SCSI_REQUEST_BLOCK));
+ if (!Srb)
+ return ENOMEM;
+
+ RtlZeroMemory(Srb, sizeof(SCSI_REQUEST_BLOCK));
+ Srb->Length = sizeof(SCSI_REQUEST_BLOCK);
+ Srb->Function = SRB_FUNCTION_EXECUTE_SCSI;
+ Srb->PathId = Context->PathId;
+ Srb->TargetId = Context->TargetId;
+ Srb->Lun = Context->Lun;
+ Srb->CdbLength = 10;
+ Srb->SrbFlags = SRB_FLAGS_DATA_IN;
+ Srb->DataTransferLength = FullSectors * Context->SectorSize;
+ Srb->TimeOutValue = 5; /* in seconds */
+ Srb->DataBuffer = Buffer;
+ Cdb = (PCDB)Srb->Cdb;
+ Cdb->CDB10.OperationCode = SCSIOP_READ;
+ Cdb->CDB10.LogicalUnitNumber = Srb->Lun;
+ Cdb->CDB10.LogicalBlockByte0 = (Lba >> 24) & 0xff;
+ Cdb->CDB10.LogicalBlockByte1 = (Lba >> 16) & 0xff;
+ Cdb->CDB10.LogicalBlockByte2 = (Lba >> 8) & 0xff;
+ Cdb->CDB10.LogicalBlockByte3 = Lba & 0xff;
+ Cdb->CDB10.TransferBlocksMsb = (FullSectors >> 8) & 0xff;
+ Cdb->CDB10.TransferBlocksLsb = FullSectors & 0xff;
+ if (!SpiSendSynchronousSrb(Context->DeviceExtension, Srb))
+ {
+ return EIO;
+ }
+ Buffer = (PUCHAR)Buffer + FullSectors * Context->SectorSize;
+ N -= FullSectors * Context->SectorSize;
+ *Count += FullSectors * Context->SectorSize;
+ Lba += FullSectors;
+ }
+
+ /* Read incomplete last sector */
+ if (N > 0)
+ {
+ PUCHAR Sector;
+
+ Sector = ExAllocatePool(PagedPool, Context->SectorSize);
+ if (!Sector)
+ return ENOMEM;
+
+ Srb = ExAllocatePool(PagedPool, sizeof(SCSI_REQUEST_BLOCK));
+ if (!Srb)
+ {
+ ExFreePool(Sector);
+ return ENOMEM;
+ }
+
+ RtlZeroMemory(Srb, sizeof(SCSI_REQUEST_BLOCK));
+ Srb->Length = sizeof(SCSI_REQUEST_BLOCK);
+ Srb->Function = SRB_FUNCTION_EXECUTE_SCSI;
+ Srb->PathId = Context->PathId;
+ Srb->TargetId = Context->TargetId;
+ Srb->Lun = Context->Lun;
+ Srb->CdbLength = 10;
+ Srb->SrbFlags = SRB_FLAGS_DATA_IN;
+ Srb->DataTransferLength = Context->SectorSize;
+ Srb->TimeOutValue = 5; /* in seconds */
+ Srb->DataBuffer = Sector;
+ Cdb = (PCDB)Srb->Cdb;
+ Cdb->CDB10.OperationCode = SCSIOP_READ;
+ Cdb->CDB10.LogicalUnitNumber = Srb->Lun;
+ Cdb->CDB10.LogicalBlockByte0 = (Lba >> 24) & 0xff;
+ Cdb->CDB10.LogicalBlockByte1 = (Lba >> 16) & 0xff;
+ Cdb->CDB10.LogicalBlockByte2 = (Lba >> 8) & 0xff;
+ Cdb->CDB10.LogicalBlockByte3 = Lba & 0xff;
+ Cdb->CDB10.TransferBlocksMsb = 0;
+ Cdb->CDB10.TransferBlocksLsb = 1;
+ if (!SpiSendSynchronousSrb(Context->DeviceExtension, Srb))
+ {
+ ExFreePool(Sector);
+ return EIO;
+ }
+ RtlCopyMemory(Buffer, Sector, N);
+ *Count += N;
+ ExFreePool(Sector);
+ }
+
+ return ESUCCESS;
+}
+
+static LONG DiskSeek(ULONG FileId, LARGE_INTEGER* Position, SEEKMODE SeekMode)
+{
+ DISKCONTEXT* Context = FsGetDeviceSpecific(FileId);
+
+ if (SeekMode != SeekAbsolute)
+ return EINVAL;
+ if (Position->QuadPart & (Context->SectorSize - 1))
+ return EINVAL;
+
+ Context->SectorNumber = Position->QuadPart / Context->SectorSize;
+ return ESUCCESS;
+}
+
+static const DEVVTBL DiskVtbl = {
+ DiskClose,
+ DiskGetFileInformation,
+ DiskOpen,
+ DiskRead,
+ DiskSeek,
+};
+
+NTSTATUS
+SpiCreatePortConfig(
+ IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
+ IN PHW_INITIALIZATION_DATA HwInitData,
+ OUT PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+ IN BOOLEAN ZeroStruct)
+{
+ ULONG Bus;
+
+ /* Zero out the struct if told so */
+ if (ZeroStruct)
+ {
+ /* First zero the portconfig */
+ RtlZeroMemory(ConfigInfo, sizeof(PORT_CONFIGURATION_INFORMATION));
+
+ /* Initialize the struct */
+ ConfigInfo->Length = sizeof(PORT_CONFIGURATION_INFORMATION);
+ ConfigInfo->AdapterInterfaceType = HwInitData->AdapterInterfaceType;
+ ConfigInfo->InterruptMode = Latched;
+ ConfigInfo->DmaChannel = SP_UNINITIALIZED_VALUE;
+ ConfigInfo->DmaPort = SP_UNINITIALIZED_VALUE;
+ ConfigInfo->MaximumTransferLength = SP_UNINITIALIZED_VALUE;
+ ConfigInfo->MaximumNumberOfTargets = SCSI_MAXIMUM_TARGETS_PER_BUS;
+
+ /* Store parameters */
+ ConfigInfo->NeedPhysicalAddresses = HwInitData->NeedPhysicalAddresses;
+ ConfigInfo->MapBuffers = HwInitData->MapBuffers;
+ ConfigInfo->AutoRequestSense = HwInitData->AutoRequestSense;
+ ConfigInfo->ReceiveEvent = HwInitData->ReceiveEvent;
+ ConfigInfo->TaggedQueuing = HwInitData->TaggedQueuing;
+ ConfigInfo->MultipleRequestPerLu = HwInitData->MultipleRequestPerLu;
+
+ /* Get the disk usage */
+ ConfigInfo->AtdiskPrimaryClaimed = FALSE; // FIXME
+ ConfigInfo->AtdiskSecondaryClaimed = FALSE; // FIXME
+
+ /* Initiator bus id is not set */
+ for (Bus = 0; Bus < 8; Bus++)
+ ConfigInfo->InitiatorBusId[Bus] = (CCHAR)SP_UNINITIALIZED_VALUE;
+ }
+
+ ConfigInfo->NumberOfPhysicalBreaks = 17;
+
+ return STATUS_SUCCESS;
+}
+
+VOID
+DDKCDECLAPI
+ScsiDebugPrint(
+ IN ULONG DebugPrintLevel,
+ IN PCCHAR DebugMessage,
+ IN ...)
+{
+ va_list ap;
+ CHAR Buffer[512];
+ ULONG Length;
+
+ if (DebugPrintLevel > 10)
+ return;
+
+ va_start(ap, DebugMessage);
+
+ /* Construct a string */
+ Length = _vsnprintf(Buffer, 512, DebugMessage, ap);
+
+ /* Check if we went past the buffer */
+ if (Length == MAXULONG)
+ {
+ /* Terminate it if we went over-board */
+ Buffer[sizeof(Buffer) - 1] = '\0';
+
+ /* Put maximum */
+ Length = sizeof(Buffer);
+ }
+
+ /* Print the message */
+ DPRINTM(DPRINT_SCSIPORT, "%s", Buffer);
+
+ /* Cleanup */
+ va_end(ap);
+}
+
+VOID
+DDKAPI
+ScsiPortCompleteRequest(
+ IN PVOID HwDeviceExtension,
+ IN UCHAR PathId,
+ IN UCHAR TargetId,
+ IN UCHAR Lun,
+ IN UCHAR SrbStatus)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+#undef ScsiPortConvertPhysicalAddressToUlong
+ULONG
+DDKAPI
+ScsiPortConvertPhysicalAddressToUlong(
+ IN SCSI_PHYSICAL_ADDRESS Address)
+{
+ return Address.LowPart;
+}
+
+SCSI_PHYSICAL_ADDRESS
+DDKAPI
+ScsiPortConvertUlongToPhysicalAddress(
+ IN ULONG UlongAddress)
+{
+ return RtlConvertUlongToLargeInteger(UlongAddress);
+}
+
+VOID
+DDKAPI
+ScsiPortFlushDma(
+ IN PVOID DeviceExtension)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+VOID
+DDKAPI
+ScsiPortFreeDeviceBase(
+ IN PVOID HwDeviceExtension,
+ IN PVOID MappedAddress)
+{
+ // Nothing to do
+}
+
+ULONG
+DDKAPI
+ScsiPortGetBusData(
+ IN PVOID DeviceExtension,
+ IN ULONG BusDataType,
+ IN ULONG SystemIoBusNumber,
+ IN ULONG SlotNumber,
+ IN PVOID Buffer,
+ IN ULONG Length)
+{
+ return HalGetBusDataByOffset(BusDataType, SystemIoBusNumber, SlotNumber, Buffer, 0, Length);
+}
+
+PVOID
+DDKAPI
+ScsiPortGetDeviceBase(
+ IN PVOID HwDeviceExtension,
+ IN INTERFACE_TYPE BusType,
+ IN ULONG SystemIoBusNumber,
+ IN SCSI_PHYSICAL_ADDRESS IoAddress,
+ IN ULONG NumberOfBytes,
+ IN BOOLEAN InIoSpace)
+{
+ PHYSICAL_ADDRESS TranslatedAddress;
+ ULONG AddressSpace;
+
+ AddressSpace = (ULONG)InIoSpace;
+ if (HalTranslateBusAddress(BusType,
+ SystemIoBusNumber,
+ IoAddress,
+ &AddressSpace,
+ &TranslatedAddress) == FALSE)
+ {
+ return NULL;
+ }
+
+ /* I/O space */
+ if (AddressSpace != 0)
+ return (PVOID)TranslatedAddress.u.LowPart;
+
+ // FIXME
+ UNIMPLEMENTED;
+ return (PVOID)IoAddress.LowPart;
+}
+
+PVOID
+DDKAPI
+ScsiPortGetLogicalUnit(
+ IN PVOID HwDeviceExtension,
+ IN UCHAR PathId,
+ IN UCHAR TargetId,
+ IN UCHAR Lun)
+{
+ // FIXME
+ UNIMPLEMENTED;
+ return NULL;
+}
+
+SCSI_PHYSICAL_ADDRESS
+DDKAPI
+ScsiPortGetPhysicalAddress(
+ IN PVOID HwDeviceExtension,
+ IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
+ IN PVOID VirtualAddress,
+ OUT ULONG *Length)
+{
+ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension;
+ SCSI_PHYSICAL_ADDRESS PhysicalAddress;
+ ULONG BufferLength = 0;
+ ULONG Offset;
+
+ DPRINTM2("ScsiPortGetPhysicalAddress(%p %p %p %p)\n",
+ HwDeviceExtension, Srb, VirtualAddress, Length);
+
+ DeviceExtension = ((PSCSI_PORT_DEVICE_EXTENSION)HwDeviceExtension) - 1;
+
+ if (Srb == NULL || Srb->SenseInfoBuffer == VirtualAddress)
+ {
+ /* Simply look it up in the allocated common buffer */
+ Offset = (PUCHAR)VirtualAddress - (PUCHAR)DeviceExtension->SrbExtensionBuffer;
+
+ BufferLength = DeviceExtension->CommonBufferLength - Offset;
+ PhysicalAddress.QuadPart = Offset;
+ }
+ else
+ {
+ /* Nothing */
+ *Length = 0;
+ PhysicalAddress.QuadPart = (LONGLONG)(SP_UNINITIALIZED_VALUE);
+ }
+
+ *Length = BufferLength;
+ return PhysicalAddress;
+}
+
+PSCSI_REQUEST_BLOCK
+DDKAPI
+ScsiPortGetSrb(
+ IN PVOID DeviceExtension,
+ IN UCHAR PathId,
+ IN UCHAR TargetId,
+ IN UCHAR Lun,
+ IN LONG QueueTag)
+{
+ // FIXME
+ UNIMPLEMENTED;
+ return NULL;
+}
+
+NTSTATUS
+SpiAllocateCommonBuffer(
+ IN OUT PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG NonCachedSize)
+{
+ PVOID CommonBuffer;
+ ULONG CommonBufferLength, BufSize;
+
+ /* If size is 0, set it to 16 */
+ if (!DeviceExtension->SrbExtensionSize)
+ DeviceExtension->SrbExtensionSize = 16;
+
+ /* Calculate size */
+ BufSize = DeviceExtension->SrbExtensionSize;
+
+ /* Round it */
+ BufSize = (BufSize + sizeof(LONGLONG) - 1) & ~(sizeof(LONGLONG) - 1);
+
+ /* Sum up into the total common buffer length, and round it to page size */
+ CommonBufferLength =
+ ROUND_TO_PAGES(NonCachedSize);
+
+ /* Allocate it */
+ if (!DeviceExtension->AdapterObject)
+ {
+ /* From nonpaged pool if there is no DMA */
+ CommonBuffer = ExAllocatePool(NonPagedPool, CommonBufferLength);
+ }
+ else
+ {
+ /* Perform a full request since we have a DMA adapter*/
+ UNIMPLEMENTED;
+ CommonBuffer = NULL;
+ }
+
+ /* Fail in case of error */
+ if (!CommonBuffer)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ /* Zero it */
+ RtlZeroMemory(CommonBuffer, CommonBufferLength);
+
+ /* Store its size in Device Extension */
+ DeviceExtension->CommonBufferLength = CommonBufferLength;
+
+ /* SrbExtension buffer is located at the beginning of the buffer */
+ DeviceExtension->SrbExtensionBuffer = CommonBuffer;
+
+ /* Non-cached extension buffer is located at the end of
+ the common buffer */
+ if (NonCachedSize)
+ {
+ CommonBufferLength -= NonCachedSize;
+ DeviceExtension->NonCachedExtension = (PUCHAR)CommonBuffer + CommonBufferLength;
+ }
+ else
+ {
+ DeviceExtension->NonCachedExtension = NULL;
+ }
+
+ return STATUS_SUCCESS;
+}
+
+PVOID
+DDKAPI
+ScsiPortGetUncachedExtension(
+ IN PVOID HwDeviceExtension,
+ IN PPORT_CONFIGURATION_INFORMATION ConfigInfo,
+ IN ULONG NumberOfBytes)
+{
+ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension;
+ DEVICE_DESCRIPTION DeviceDescription;
+ ULONG MapRegistersCount;
+ NTSTATUS Status;
+
+ DPRINTM2("ScsiPortGetUncachedExtension(%p %p %lu)\n",
+ HwDeviceExtension, ConfigInfo, NumberOfBytes);
+
+ DeviceExtension = ((PSCSI_PORT_DEVICE_EXTENSION)HwDeviceExtension) - 1;
+
+ /* Check for allocated common DMA buffer */
+ if (DeviceExtension->SrbExtensionBuffer != NULL)
+ {
+ return NULL;
+ }
+
+ /* Check for DMA adapter object */
+ if (DeviceExtension->AdapterObject == NULL)
+ {
+ /* Initialize DMA adapter description */
+ RtlZeroMemory(&DeviceDescription, sizeof(DEVICE_DESCRIPTION));
+
+ DeviceDescription.Version = DEVICE_DESCRIPTION_VERSION;
+ DeviceDescription.Master = ConfigInfo->Master;
+ DeviceDescription.ScatterGather = ConfigInfo->ScatterGather;
+ DeviceDescription.DemandMode = ConfigInfo->DemandMode;
+ DeviceDescription.Dma32BitAddresses = ConfigInfo->Dma32BitAddresses;
+ DeviceDescription.BusNumber = ConfigInfo->SystemIoBusNumber;
+ DeviceDescription.DmaChannel = ConfigInfo->DmaChannel;
+ DeviceDescription.InterfaceType = ConfigInfo->AdapterInterfaceType;
+ DeviceDescription.DmaWidth = ConfigInfo->DmaWidth;
+ DeviceDescription.DmaSpeed = ConfigInfo->DmaSpeed;
+ DeviceDescription.MaximumLength = ConfigInfo->MaximumTransferLength;
+ DeviceDescription.DmaPort = ConfigInfo->DmaPort;
+
+ /* Get a DMA adapter object */
+#if 0
+ DeviceExtension->AdapterObject =
+ HalGetAdapter(&DeviceDescription, &MapRegistersCount);
+
+ /* Fail in case of error */
+ if (DeviceExtension->AdapterObject == NULL)
+ {
+ return NULL;
+ }
+#else
+ MapRegistersCount = 0;
+#endif
+
+ /* Set number of physical breaks */
+ if (ConfigInfo->NumberOfPhysicalBreaks != 0 &&
+ MapRegistersCount > ConfigInfo->NumberOfPhysicalBreaks)
+ {
+ DeviceExtension->PortCapabilities.MaximumPhysicalPages =
+ ConfigInfo->NumberOfPhysicalBreaks;
+ }
+ else
+ {
+ DeviceExtension->PortCapabilities.MaximumPhysicalPages = MapRegistersCount;
+ }
+ }
+
+ /* Update Srb extension size */
+ if (DeviceExtension->SrbExtensionSize != ConfigInfo->SrbExtensionSize)
+ DeviceExtension->SrbExtensionSize = ConfigInfo->SrbExtensionSize;
+
+ /* Allocate a common DMA buffer */
+ Status = SpiAllocateCommonBuffer(DeviceExtension, NumberOfBytes);
+
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINTM2("SpiAllocateCommonBuffer() failed with Status = 0x%08X!\n", Status);
+ return NULL;
+ }
+
+ return DeviceExtension->NonCachedExtension;
+}
+
+PVOID
+DDKAPI
+ScsiPortGetVirtualAddress(
+ IN PVOID HwDeviceExtension,
+ IN SCSI_PHYSICAL_ADDRESS PhysicalAddress)
+{
+ // FIXME
+ UNIMPLEMENTED;
+ return NULL;
+}
+
+VOID
+SpiScanDevice(
+ IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
+ IN PCHAR ArcName,
+ IN ULONG ScsiBus,
+ IN ULONG TargetId,
+ IN ULONG Lun)
+{
+ ULONG FileId, i;
+ ULONG Status;
+ NTSTATUS ret;
+ struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer;
+ CHAR PartitionName[64];
+
+ /* Register device with partition(0) suffix */
+ sprintf(PartitionName, "%spartition(0)", ArcName);
+ FsRegisterDevice(PartitionName, &DiskVtbl);
+
+ /* Read device partition table */
+ Status = ArcOpen(PartitionName, OpenReadOnly, &FileId);
+ if (Status == ESUCCESS)
+ {
+ ret = HALDISPATCH->HalIoReadPartitionTable((PDEVICE_OBJECT)FileId, 512, FALSE, &PartitionBuffer);
+ if (NT_SUCCESS(ret))
+ {
+ for (i = 0; i < PartitionBuffer->PartitionCount; i++)
+ {
+ if (PartitionBuffer->PartitionEntry[i].PartitionType != PARTITION_ENTRY_UNUSED)
+ {
+ sprintf(PartitionName, "%spartition(%lu)",
+ ArcName, PartitionBuffer->PartitionEntry[i].PartitionNumber);
+ FsRegisterDevice(PartitionName, &DiskVtbl);
+ }
+ }
+ ExFreePool(PartitionBuffer);
+ }
+ ArcClose(FileId);
+ }
+}
+
+VOID
+SpiScanAdapter(
+ IN PSCSI_PORT_DEVICE_EXTENSION DeviceExtension,
+ IN ULONG ScsiBus,
+ IN ULONG PathId)
+{
+ CHAR ArcName[64];
+ PSCSI_REQUEST_BLOCK Srb;
+ PCDB Cdb;
+ INQUIRYDATA InquiryBuffer;
+ ULONG TargetId;
+ ULONG Lun;
+
+ if (!DeviceExtension->HwResetBus(DeviceExtension->MiniPortDeviceExtension, PathId))
+ {
+ return;
+ }
+
+ /* Remember the extension */
+ ScsiDeviceExtensions[ScsiBus] = DeviceExtension;
+
+ for (TargetId = 0; TargetId < DeviceExtension->MaxTargedIds; TargetId++)
+ {
+ Lun = 0;
+ do
+ {
+ DPRINTM2("Scanning SCSI device %d.%d.%d\n",
+ ScsiBus, TargetId, Lun);
+
+ Srb = ExAllocatePool(PagedPool, sizeof(SCSI_REQUEST_BLOCK));
+ if (!Srb)
+ break;
+ RtlZeroMemory(Srb, sizeof(SCSI_REQUEST_BLOCK));
+ Srb->Length = sizeof(SCSI_REQUEST_BLOCK);
+ Srb->Function = SRB_FUNCTION_EXECUTE_SCSI;
+ Srb->PathId = PathId;
+ Srb->TargetId = TargetId;
+ Srb->Lun = Lun;
+ Srb->CdbLength = 6;
+ Srb->SrbFlags = SRB_FLAGS_DATA_IN;
+ Srb->DataTransferLength = INQUIRYDATABUFFERSIZE;
+ Srb->TimeOutValue = 5; /* in seconds */
+ Srb->DataBuffer = &InquiryBuffer;
+ Cdb = (PCDB)Srb->Cdb;
+ Cdb->CDB6INQUIRY.OperationCode = SCSIOP_INQUIRY;
+ Cdb->CDB6INQUIRY.LogicalUnitNumber = Srb->Lun;
+ Cdb->CDB6INQUIRY.AllocationLength = Srb->DataTransferLength;
+ if (!SpiSendSynchronousSrb(DeviceExtension, Srb))
+ {
+ /* Don't check next LUNs */
+ break;
+ }
+
+ /* Device exists, create its ARC name */
+ if (InquiryBuffer.RemovableMedia)
+ {
+ sprintf(ArcName, "scsi(%ld)cdrom(%ld)fdisk(%ld)",
+ ScsiBus, TargetId, Lun);
+ FsRegisterDevice(ArcName, &DiskVtbl);
+ }
+ else
+ {
+ sprintf(ArcName, "scsi(%ld)disk(%ld)rdisk(%ld)",
+ ScsiBus, TargetId, Lun);
+ /* Now, check if it has partitions */
+ SpiScanDevice(DeviceExtension, ArcName, PathId, TargetId, Lun);
+ }
+
+ /* Check next LUN */
+ Lun++;
+ } while (Lun < SCSI_MAXIMUM_LOGICAL_UNITS);
+ }
+}
+
+VOID
+SpiResourceToConfig(
+ IN PHW_INITIALIZATION_DATA HwInitializationData,
+ IN PCM_FULL_RESOURCE_DESCRIPTOR ResourceDescriptor,
+ IN OUT PPORT_CONFIGURATION_INFORMATION PortConfig)
+{
+ PACCESS_RANGE AccessRange;
+ PCM_PARTIAL_RESOURCE_DESCRIPTOR PartialData;
+ ULONG RangeNumber;
+ ULONG Index;
+
+ RangeNumber = 0;
+
+ /* Loop through all entries */
+ for (Index = 0; Index < ResourceDescriptor->PartialResourceList.Count; Index++)
+ {
+ PartialData = &ResourceDescriptor->PartialResourceList.PartialDescriptors[Index];
+
+ switch (PartialData->Type)
+ {
+ case CmResourceTypePort:
+ /* Copy access ranges */
+ if (RangeNumber < HwInitializationData->NumberOfAccessRanges)
+ {
+ DPRINTM2("Got port at 0x%I64x, len 0x%x\n",
+ PartialData->u.Port.Start.QuadPart, PartialData->u.Port.Length);
+ AccessRange = &((*(PortConfig->AccessRanges))[RangeNumber]);
+
+ AccessRange->RangeStart = PartialData->u.Port.Start;
+ AccessRange->RangeLength = PartialData->u.Port.Length;
+
+ AccessRange->RangeInMemory = FALSE;
+ RangeNumber++;
+ }
+ break;
+
+ case CmResourceTypeMemory:
+ /* Copy access ranges */
+ if (RangeNumber < HwInitializationData->NumberOfAccessRanges)
+ {
+ DPRINTM2("Got memory at 0x%I64x, len 0x%x\n",
+ PartialData->u.Memory.Start.QuadPart, PartialData->u.Memory.Length);
+ AccessRange = &((*(PortConfig->AccessRanges))[RangeNumber]);
+
+ AccessRange->RangeStart = PartialData->u.Memory.Start;
+ AccessRange->RangeLength = PartialData->u.Memory.Length;
+
+ AccessRange->RangeInMemory = TRUE;
+ RangeNumber++;
+ }
+ break;
+
+ case CmResourceTypeInterrupt:
+ /* Copy interrupt data */
+ DPRINTM2("Got interrupt level %d, vector %d\n",
+ PartialData->u.Interrupt.Level, PartialData->u.Interrupt.Vector);
+ PortConfig->BusInterruptLevel = PartialData->u.Interrupt.Level;
+ PortConfig->BusInterruptVector = PartialData->u.Interrupt.Vector;
+
+ /* Set interrupt mode accordingly to the resource */
+ if (PartialData->Flags == CM_RESOURCE_INTERRUPT_LATCHED)
+ {
+ PortConfig->InterruptMode = Latched;
+ }
+ else if (PartialData->Flags == CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE)
+ {
+ PortConfig->InterruptMode = LevelSensitive;
+ }
+ break;
+
+ case CmResourceTypeDma:
+ DPRINTM2("Got DMA channel %d, port %d\n",
+ PartialData->u.Dma.Channel, PartialData->u.Dma.Port);
+ PortConfig->DmaChannel = PartialData->u.Dma.Channel;
+ PortConfig->DmaPort = PartialData->u.Dma.Port;
+ break;
+ }
+ }
+}
+
+BOOLEAN
+SpiGetPciConfigData(
+ IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
+ IN OUT PPORT_CONFIGURATION_INFORMATION PortConfig,
+ IN ULONG BusNumber,
+ IN OUT PPCI_SLOT_NUMBER NextSlotNumber)
+{
+ PCI_COMMON_CONFIG PciConfig;
+ PCI_SLOT_NUMBER SlotNumber;
+ ULONG DataSize;
+ ULONG DeviceNumber;
+ ULONG FunctionNumber;
+ CHAR VendorIdString[8];
+ CHAR DeviceIdString[8];
+ PCM_RESOURCE_LIST ResourceList;
+ NTSTATUS Status;
+
+ RtlZeroMemory(&ResourceList, sizeof(PCM_RESOURCE_LIST));
+ SlotNumber.u.AsULONG = 0;
+
+ /* Loop through all devices */
+ for (DeviceNumber = NextSlotNumber->u.bits.DeviceNumber; DeviceNumber < PCI_MAX_DEVICES; DeviceNumber++)
+ {
+ SlotNumber.u.bits.DeviceNumber = DeviceNumber;
+
+ /* Loop through all functions */
+ for (FunctionNumber = NextSlotNumber->u.bits.FunctionNumber; FunctionNumber < PCI_MAX_FUNCTION; FunctionNumber++)
+ {
+ SlotNumber.u.bits.FunctionNumber = FunctionNumber;
+
+ /* Get PCI config bytes */
+ DataSize = HalGetBusDataByOffset(
+ PCIConfiguration,
+ BusNumber,
+ SlotNumber.u.AsULONG,
+ &PciConfig,
+ 0,
+ sizeof(ULONG));
+
+ /* If result of HalGetBusData is 0, then the bus is wrong */
+ if (DataSize == 0)
+ return FALSE;
+
+ /* If result is PCI_INVALID_VENDORID, then this device has no more
+ "Functions" */
+ if (PciConfig.VendorID == PCI_INVALID_VENDORID)
+ break;
+
+ sprintf(VendorIdString, "%04hx", PciConfig.VendorID);
+ sprintf(DeviceIdString, "%04hx", PciConfig.DeviceID);
+
+ if (_strnicmp(VendorIdString, HwInitializationData->VendorId, HwInitializationData->VendorIdLength) ||
+ _strnicmp(DeviceIdString, HwInitializationData->DeviceId, HwInitializationData->DeviceIdLength))
+ {
+ /* It is not our device */
+ continue;
+ }
+
+ DPRINTM2( "Found device 0x%04hx 0x%04hx at %1lu %2lu %1lu\n",
+ PciConfig.VendorID, PciConfig.DeviceID,
+ BusNumber,
+ SlotNumber.u.bits.DeviceNumber, SlotNumber.u.bits.FunctionNumber);
+
+ Status = HalAssignSlotResources(NULL,
+ NULL,
+ NULL,
+ NULL,
+ PCIBus,
+ BusNumber,
+ SlotNumber.u.AsULONG,
+ &ResourceList);
+
+ if (!NT_SUCCESS(Status))
+ break;
+
+ /* Create configuration information */
+ SpiResourceToConfig(HwInitializationData,
+ ResourceList->List,
+ PortConfig);
+
+ /* Free the resource list */
+ ExFreePool(ResourceList);
+
+ /* Set dev & fn numbers */
+ NextSlotNumber->u.bits.DeviceNumber = DeviceNumber;
+ NextSlotNumber->u.bits.FunctionNumber = FunctionNumber + 1;
+
+ /* Save the slot number */
+ PortConfig->SlotNumber = SlotNumber.u.AsULONG;
+
+ return TRUE;
+ }
+ NextSlotNumber->u.bits.FunctionNumber = 0;
+ }
+
+ NextSlotNumber->u.bits.DeviceNumber = 0;
+
+ return FALSE;
+}
+
+ULONG
+DDKAPI
+ScsiPortInitialize(
+ IN PVOID Argument1,
+ IN PVOID Argument2,
+ IN struct _HW_INITIALIZATION_DATA *HwInitializationData,
+ IN PVOID HwContext OPTIONAL)
+{
+ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension;
+ ULONG DeviceExtensionSize;
+ PORT_CONFIGURATION_INFORMATION PortConfig;
+ BOOLEAN Again;
+ BOOLEAN FirstConfigCall = TRUE;
+ PCI_SLOT_NUMBER SlotNumber;
+ NTSTATUS Status;
+
+ if (HwInitializationData->HwInitializationDataSize != sizeof(HW_INITIALIZATION_DATA))
+ {
+ return STATUS_INVALID_PARAMETER;
+ }
+
+ /* Check params for validity */
+ if ((HwInitializationData->HwInitialize == NULL) ||
+ (HwInitializationData->HwStartIo == NULL) ||
+ (HwInitializationData->HwInterrupt == NULL) ||
+ (HwInitializationData->HwFindAdapter == NULL) ||
+ (HwInitializationData->HwResetBus == NULL))
+ {
+ return STATUS_INVALID_PARAMETER;
+ }
+
+ /* Zero starting slot number */
+ SlotNumber.u.AsULONG = 0;
+
+ while (TRUE)
+ {
+ Again = FALSE;
+
+ DeviceExtensionSize = sizeof(SCSI_PORT_DEVICE_EXTENSION) + HwInitializationData->DeviceExtensionSize;
+ DeviceExtension = MmHeapAlloc(DeviceExtensionSize);
+ if (!DeviceExtension)
+ {
+ return STATUS_NO_MEMORY;
+ }
+ RtlZeroMemory(DeviceExtension, DeviceExtensionSize);
+ DeviceExtension->InterruptFlags = SCSI_PORT_NEXT_REQUEST_READY;
+ DeviceExtension->HwInitialize = HwInitializationData->HwInitialize;
+ DeviceExtension->HwStartIo = HwInitializationData->HwStartIo;
+ DeviceExtension->HwInterrupt = HwInitializationData->HwInterrupt;
+ DeviceExtension->HwResetBus = HwInitializationData->HwResetBus;
+ DeviceExtension->MiniPortDeviceExtension = (PVOID)(DeviceExtension + 1);
+
+ Status = SpiCreatePortConfig(DeviceExtension,
+ HwInitializationData,
+ &PortConfig,
+ FirstConfigCall);
+ if (Status != STATUS_SUCCESS)
+ {
+ MmHeapFree(DeviceExtension);
+ return Status;
+ }
+
+ PortConfig.NumberOfAccessRanges = HwInitializationData->NumberOfAccessRanges;
+ PortConfig.AccessRanges = MmHeapAlloc(sizeof(ACCESS_RANGE) * HwInitializationData->NumberOfAccessRanges);
+ if (!PortConfig.AccessRanges)
+ {
+ MmHeapFree(DeviceExtension);
+ return STATUS_NO_MEMORY;
+ }
+ RtlZeroMemory(PortConfig.AccessRanges, sizeof(ACCESS_RANGE) * HwInitializationData->NumberOfAccessRanges);
+
+ /* Search for matching PCI device */
+ if ((HwInitializationData->AdapterInterfaceType == PCIBus) &&
+ (HwInitializationData->VendorIdLength > 0) &&
+ (HwInitializationData->VendorId != NULL) &&
+ (HwInitializationData->DeviceIdLength > 0) &&
+ (HwInitializationData->DeviceId != NULL))
+ {
+ PortConfig.BusInterruptLevel = 0;
+
+ /* Get PCI device data */
+ DPRINTM2("VendorId '%.*s' DeviceId '%.*s'\n",
+ HwInitializationData->VendorIdLength,
+ HwInitializationData->VendorId,
+ HwInitializationData->DeviceIdLength,
+ HwInitializationData->DeviceId);
+
+ if (!SpiGetPciConfigData(HwInitializationData,
+ &PortConfig,
+ 0, /* FIXME */
+ &SlotNumber))
+ {
+ /* Continue to the next bus, nothing here */
+ MmHeapFree(DeviceExtension);
+ return STATUS_INTERNAL_ERROR;
+ }
+
+ if (!PortConfig.BusInterruptLevel)
+ {
+ /* Bypass this slot, because no interrupt was assigned */
+ MmHeapFree(DeviceExtension);
+ return STATUS_INTERNAL_ERROR;
+ }
+ }
+
+ if (HwInitializationData->HwFindAdapter(
+ DeviceExtension->MiniPortDeviceExtension,
+ HwContext,
+ NULL,
+ NULL,
+ &PortConfig,
+ &Again) != SP_RETURN_FOUND)
+ {
+ MmHeapFree(DeviceExtension);
+ return STATUS_INTERNAL_ERROR;
+ }
+
+ /* Copy all stuff which we ever need from PortConfig to the DeviceExtension */
+ if (PortConfig.MaximumNumberOfTargets > SCSI_MAXIMUM_TARGETS_PER_BUS)
+ DeviceExtension->MaxTargedIds = SCSI_MAXIMUM_TARGETS_PER_BUS;
+ else
+ DeviceExtension->MaxTargedIds = PortConfig.MaximumNumberOfTargets;
+
+ DeviceExtension->BusNum = PortConfig.SystemIoBusNumber;
+
+ DPRINTM2("Adapter found: buses = %d, targets = %d\n",
+ PortConfig.NumberOfBuses, DeviceExtension->MaxTargedIds);
+
+ /* Initialize adapter */
+ if (!DeviceExtension->HwInitialize(DeviceExtension->MiniPortDeviceExtension))
+ {
+ MmHeapFree(DeviceExtension);
+ return STATUS_INTERNAL_ERROR;
+ }
+
+ /* Scan bus */
+ {
+ ULONG ScsiBus;
+ for (ScsiBus = 0; ScsiBus < PortConfig.NumberOfBuses; ScsiBus++)
+ {
+ SpiScanAdapter(DeviceExtension, PortConfig.SystemIoBusNumber, ScsiBus);
+ PortConfig.SystemIoBusNumber++;
+ }
+ }
+
+ FirstConfigCall = FALSE;
+ if (!Again)
+ {
+ break;
+ }
+ }
+
+ return STATUS_SUCCESS;
+}
+
+VOID
+DDKAPI
+ScsiPortIoMapTransfer(
+ IN PVOID HwDeviceExtension,
+ IN PSCSI_REQUEST_BLOCK Srb,
+ IN PVOID LogicalAddress,
+ IN ULONG Length)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+VOID
+DDKAPI
+ScsiPortLogError(
+ IN PVOID HwDeviceExtension,
+ IN PSCSI_REQUEST_BLOCK Srb OPTIONAL,
+ IN UCHAR PathId,
+ IN UCHAR TargetId,
+ IN UCHAR Lun,
+ IN ULONG ErrorCode,
+ IN ULONG UniqueId)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+VOID
+DDKAPI
+ScsiPortMoveMemory(
+ IN PVOID WriteBuffer,
+ IN PVOID ReadBuffer,
+ IN ULONG Length)
+{
+ RtlMoveMemory(WriteBuffer, ReadBuffer, Length);
+}
+
+VOID
+DDKCDECLAPI
+ScsiPortNotification(
+ IN SCSI_NOTIFICATION_TYPE NotificationType,
+ IN PVOID HwDeviceExtension,
+ IN ...)
+{
+ PSCSI_PORT_DEVICE_EXTENSION DeviceExtension;
+ PSCSI_REQUEST_BLOCK Srb;
+ va_list ap;
+
+ DeviceExtension = ((PSCSI_PORT_DEVICE_EXTENSION)HwDeviceExtension) - 1;
+
+ va_start(ap, HwDeviceExtension);
+
+ switch (NotificationType)
+ {
+ case RequestComplete:
+ /* Mask the SRB as completed */
+ Srb = va_arg(ap, PSCSI_REQUEST_BLOCK);
+ Srb->SrbFlags &= ~SRB_FLAGS_IS_ACTIVE;
+ break;
+
+ case NextRequest:
+ /* Say that device is ready */
+ DeviceExtension->InterruptFlags |= SCSI_PORT_NEXT_REQUEST_READY;
+ break;
+
+ default:
+ // FIXME
+ UNIMPLEMENTED;
+ }
+
+ va_end(ap);
+}
+
+VOID
+DDKAPI
+ScsiPortReadPortBufferUchar(
+ IN PUCHAR Port,
+ OUT PUCHAR Buffer,
+ IN ULONG Count)
+{
+ __inbytestring(H2I(Port), Buffer, Count);
+}
+
+VOID
+DDKAPI
+ScsiPortReadPortBufferUlong(
+ IN PULONG Port,
+ OUT PULONG Buffer,
+ IN ULONG Count)
+{
+ __indwordstring(H2I(Port), Buffer, Count);
+}
+
+VOID
+DDKAPI
+ScsiPortReadPortBufferUshort(
+ IN PUSHORT Port,
+ OUT PUSHORT Buffer,
+ IN ULONG Count)
+{
+ __inwordstring(H2I(Port), Buffer, Count);
+}
+
+UCHAR
+DDKAPI
+ScsiPortReadPortUchar(
+ IN PUCHAR Port)
+{
+ DPRINTM2("ScsiPortReadPortUchar(%p)\n",
+ Port);
+
+ return READ_PORT_UCHAR(Port);
+}
+
+ULONG
+DDKAPI
+ScsiPortReadPortUlong(
+ IN PULONG Port)
+{
+ return READ_PORT_ULONG(Port);
+}
+
+USHORT
+DDKAPI
+ScsiPortReadPortUshort(
+ IN PUSHORT Port)
+{
+ return READ_PORT_USHORT(Port);
+}
+
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUchar(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUlong(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+VOID
+DDKAPI
+ScsiPortReadRegisterBufferUshort(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+UCHAR
+DDKAPI
+ScsiPortReadRegisterUchar(
+ IN PUCHAR Register)
+{
+ return READ_REGISTER_UCHAR(Register);
+}
+
+ULONG
+DDKAPI
+ScsiPortReadRegisterUlong(
+ IN PULONG Register)
+{
+ return READ_REGISTER_ULONG(Register);
+}
+
+USHORT
+DDKAPI
+ScsiPortReadRegisterUshort(
+ IN PUSHORT Register)
+{
+ return READ_REGISTER_USHORT(Register);
+}
+
+ULONG
+DDKAPI
+ScsiPortSetBusDataByOffset(
+ IN PVOID DeviceExtension,
+ IN ULONG BusDataType,
+ IN ULONG SystemIoBusNumber,
+ IN ULONG SlotNumber,
+ IN PVOID Buffer,
+ IN ULONG Offset,
+ IN ULONG Length)
+{
+ // FIXME
+ UNIMPLEMENTED;
+ return 0;
+}
+
+VOID
+DDKAPI
+ScsiPortStallExecution(
+ IN ULONG Delay)
+{
+ KeStallExecutionProcessor(Delay);
+}
+
+BOOLEAN
+DDKAPI
+ScsiPortValidateRange(
+ IN PVOID HwDeviceExtension,
+ IN INTERFACE_TYPE BusType,
+ IN ULONG SystemIoBusNumber,
+ IN SCSI_PHYSICAL_ADDRESS IoAddress,
+ IN ULONG NumberOfBytes,
+ IN BOOLEAN InIoSpace)
+{
+ // FIXME
+ UNIMPLEMENTED;
+ return TRUE;
+}
+
+#if 0
+// ScsiPortWmi*
+#endif
+
+
+VOID
+DDKAPI
+ScsiPortWritePortBufferUchar(
+ IN PUCHAR Port,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ __outbytestring(H2I(Port), Buffer, Count);
+}
+
+VOID
+DDKAPI
+ScsiPortWritePortBufferUlong(
+ IN PULONG Port,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ __outdwordstring(H2I(Port), Buffer, Count);
+}
+
+VOID
+DDKAPI
+ScsiPortWritePortBufferUshort(
+ IN PUSHORT Port,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ __outwordstring(H2I(Port), Buffer, Count);
+}
+
+VOID
+DDKAPI
+ScsiPortWritePortUchar(
+ IN PUCHAR Port,
+ IN UCHAR Value)
+{
+ WRITE_PORT_UCHAR(Port, Value);
+}
+
+VOID
+DDKAPI
+ScsiPortWritePortUlong(
+ IN PULONG Port,
+ IN ULONG Value)
+{
+ WRITE_PORT_ULONG(Port, Value);
+}
+
+VOID
+DDKAPI
+ScsiPortWritePortUshort(
+ IN PUSHORT Port,
+ IN USHORT Value)
+{
+ WRITE_PORT_USHORT(Port, Value);
+}
+
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUchar(
+ IN PUCHAR Register,
+ IN PUCHAR Buffer,
+ IN ULONG Count)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUlong(
+ IN PULONG Register,
+ IN PULONG Buffer,
+ IN ULONG Count)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+VOID
+DDKAPI
+ScsiPortWriteRegisterBufferUshort(
+ IN PUSHORT Register,
+ IN PUSHORT Buffer,
+ IN ULONG Count)
+{
+ // FIXME
+ UNIMPLEMENTED;
+}
+
+VOID
+DDKAPI
+ScsiPortWriteRegisterUchar(
+ IN PUCHAR Register,
+ IN ULONG Value)
+{
+ WRITE_REGISTER_UCHAR(Register, Value);
+}
+
+VOID
+DDKAPI
+ScsiPortWriteRegisterUlong(
+ IN PULONG Register,
+ IN ULONG Value)
+{
+ WRITE_REGISTER_ULONG(Register, Value);
+}
+
+VOID
+DDKAPI
+ScsiPortWriteRegisterUshort(
+ IN PUSHORT Register,
+ IN USHORT Value)
+{
+ WRITE_REGISTER_USHORT(Register, Value);
+}
+
+ULONG
+LoadBootDeviceDriver(VOID)
+{
+ struct
+ {
+ CHAR* Name;
+ PVOID Function;
+ } ExportTable[] =
+ {
+ { "ScsiDebugPrint", ScsiDebugPrint },
+ { "ScsiPortCompleteRequest", ScsiPortCompleteRequest },
+ { "ScsiPortConvertPhysicalAddressToUlong", ScsiPortConvertPhysicalAddressToUlong },
+ { "ScsiPortConvertUlongToPhysicalAddress", ScsiPortConvertUlongToPhysicalAddress },
+ { "ScsiPortFlushDma", ScsiPortFlushDma },
+ { "ScsiPortFreeDeviceBase", ScsiPortFreeDeviceBase },
+ { "ScsiPortGetBusData", ScsiPortGetBusData },
+ { "ScsiPortGetDeviceBase", ScsiPortGetDeviceBase },
+ { "ScsiPortGetLogicalUnit", ScsiPortGetLogicalUnit },
+ { "ScsiPortGetPhysicalAddress", ScsiPortGetPhysicalAddress },
+ { "ScsiPortGetSrb", ScsiPortGetSrb },
+ { "ScsiPortGetUncachedExtension", ScsiPortGetUncachedExtension },
+ { "ScsiPortGetVirtualAddress", ScsiPortGetVirtualAddress },
+ { "ScsiPortInitialize", ScsiPortInitialize },
+ { "ScsiPortIoMapTransfer", ScsiPortIoMapTransfer },
+ { "ScsiPortLogError", ScsiPortLogError },
+ { "ScsiPortMoveMemory", ScsiPortMoveMemory },
+ { "ScsiPortNotification", ScsiPortNotification },
+ { "ScsiPortReadPortBufferUchar", ScsiPortReadPortBufferUchar },
+ { "ScsiPortReadPortBufferUlong", ScsiPortReadPortBufferUlong },
+ { "ScsiPortReadPortBufferUshort", ScsiPortReadPortBufferUshort },
+ { "ScsiPortReadPortUchar", ScsiPortReadPortUchar },
+ { "ScsiPortReadPortUlong", ScsiPortReadPortUlong },
+ { "ScsiPortReadPortUshort", ScsiPortReadPortUshort },
+ { "ScsiPortReadRegisterBufferUchar", ScsiPortReadRegisterBufferUchar },
+ { "ScsiPortReadRegisterBufferUlong", ScsiPortReadRegisterBufferUlong },
+ { "ScsiPortReadRegisterBufferUshort", ScsiPortReadRegisterBufferUshort },
+ { "ScsiPortReadRegisterUchar", ScsiPortReadRegisterUchar },
+ { "ScsiPortReadRegisterUlong", ScsiPortReadRegisterUlong },
+ { "ScsiPortReadRegisterUshort", ScsiPortReadRegisterUshort },
+ { "ScsiPortSetBusDataByOffset", ScsiPortSetBusDataByOffset },
+ { "ScsiPortStallExecution", ScsiPortStallExecution },
+ { "ScsiPortValidateRange", ScsiPortValidateRange },
+ { "ScsiPortWritePortBufferUchar", ScsiPortWritePortBufferUchar },
+ { "ScsiPortWritePortBufferUlong", ScsiPortWritePortBufferUlong },
+ { "ScsiPortWritePortBufferUshort", ScsiPortWritePortBufferUshort },
+ { "ScsiPortWritePortUchar", ScsiPortWritePortUchar },
+ { "ScsiPortWritePortUlong", ScsiPortWritePortUlong },
+ { "ScsiPortWritePortUshort", ScsiPortWritePortUshort },
+ { "ScsiPortWriteRegisterBufferUchar", ScsiPortWriteRegisterBufferUchar },
+ { "ScsiPortWriteRegisterBufferUlong", ScsiPortWriteRegisterBufferUlong },
+ { "ScsiPortWriteRegisterBufferUshort", ScsiPortWriteRegisterBufferUshort },
+ { "ScsiPortWriteRegisterUchar", ScsiPortWriteRegisterUchar },
+ { "ScsiPortWriteRegisterUlong", ScsiPortWriteRegisterUlong },
+ { "ScsiPortWriteRegisterUshort", ScsiPortWriteRegisterUshort },
+ };
+ IMAGE_DOS_HEADER ImageDosHeader;
+ IMAGE_NT_HEADERS ImageNtHeaders;
+ IMAGE_EXPORT_DIRECTORY ImageExportDirectory;
+ CHAR* TableName[sizeof(ExportTable) / sizeof(ExportTable[0])];
+ USHORT OrdinalTable[sizeof(ExportTable) / sizeof(ExportTable[0])];
+ ULONG FunctionTable[sizeof(ExportTable) / sizeof(ExportTable[0])];
+
+ PIMAGE_NT_HEADERS NtHeaders;
+ LOADER_PARAMETER_BLOCK LoaderBlock;
+ PIMAGE_IMPORT_DESCRIPTOR ImportTable;
+ ULONG ImportTableSize;
+ PLDR_DATA_TABLE_ENTRY BootDdDTE, FreeldrDTE;
+ CHAR NtBootDdPath[MAX_PATH];
+ PVOID ImageBase;
+ ULONG (NTAPI *EntryPoint)(IN PVOID DriverObject, IN PVOID RegistryPath);
+ ULONG i;
+ BOOLEAN Status;
+
+ /* Some initialization of our temporary loader block */
+ RtlZeroMemory(&LoaderBlock, sizeof(LOADER_PARAMETER_BLOCK));
+ InitializeListHead(&LoaderBlock.LoadOrderListHead);
+
+ /* Create our fake executable header for freeldr.sys */
+ RtlZeroMemory(&ImageDosHeader, sizeof(IMAGE_DOS_HEADER));
+ RtlZeroMemory(&ImageNtHeaders, sizeof(IMAGE_NT_HEADERS));
+ RtlZeroMemory(&ImageExportDirectory, sizeof(IMAGE_EXPORT_DIRECTORY));
+ ImageDosHeader.e_magic = SWAPW(IMAGE_DOS_SIGNATURE);
+ ImageDosHeader.e_lfanew = SWAPD((ULONG_PTR)&ImageNtHeaders - (ULONG_PTR)&ImageDosHeader);
+ ImageNtHeaders.Signature = IMAGE_NT_SIGNATURE;
+ ImageNtHeaders.OptionalHeader.NumberOfRvaAndSizes = SWAPD(IMAGE_DIRECTORY_ENTRY_EXPORT + 1);
+ ImageNtHeaders.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress =
+ SWAPW((ULONG_PTR)&ImageExportDirectory - (ULONG_PTR)&ImageDosHeader);
+ ImageNtHeaders.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size = 1;
+ ImageExportDirectory.NumberOfNames = sizeof(ExportTable) / sizeof(ExportTable[0]);
+ ImageExportDirectory.AddressOfNames = (ULONG_PTR)TableName - (ULONG_PTR)&ImageDosHeader;
+ ImageExportDirectory.AddressOfNameOrdinals = (ULONG_PTR)OrdinalTable - (ULONG_PTR)&ImageDosHeader;
+ ImageExportDirectory.NumberOfFunctions = sizeof(ExportTable) / sizeof(ExportTable[0]);
+ ImageExportDirectory.AddressOfFunctions = (ULONG_PTR)FunctionTable - (ULONG_PTR)&ImageDosHeader;
+
+ /* Fill freeldr.sys export table */
+ for (i = 0; i < sizeof(ExportTable) / sizeof(ExportTable[0]); i++)
+ {
+ TableName[i] = PaToVa((PVOID)((ULONG_PTR)ExportTable[i].Name - (ULONG_PTR)&ImageDosHeader));
+ OrdinalTable[i] = i;
+ FunctionTable[i] = (ULONG)((ULONG_PTR)ExportTable[i].Function - (ULONG_PTR)&ImageDosHeader);
+ }
+
+ /* Add freeldr.sys to list of loaded executables */
+ RtlZeroMemory(FreeldrDTE, sizeof(LDR_DATA_TABLE_ENTRY));
+ Status = WinLdrAllocateDataTableEntry(&LoaderBlock, "scsiport.sys",
+ "FREELDR.SYS", &ImageDosHeader, &FreeldrDTE);
+ if (!Status)
+ return EIO;
+
+ /* Create full ntbootdd.sys path */
+ MachDiskGetBootPath(NtBootDdPath, sizeof(NtBootDdPath));
+ strcat(NtBootDdPath, "\\NTBOOTDD.SYS");
+
+ /* Load file */
+ Status = WinLdrLoadImage(NtBootDdPath, LoaderBootDriver, &ImageBase);
+ if (!Status)
+ {
+ /* That's OK. File simply doesn't exist */
+ return ESUCCESS;
+ }
+
+ /* Fix imports */
+ Status = WinLdrAllocateDataTableEntry(&LoaderBlock, "ntbootdd.sys",
+ "NTBOOTDD.SYS", ImageBase, &BootDdDTE);
+ if (!Status)
+ return EIO;
+ Status = WinLdrScanImportDescriptorTable(&LoaderBlock, "", BootDdDTE);
+ if (!Status)
+ return EIO;
+
+ /* Change imports to PA */
+ ImportTable = (PIMAGE_IMPORT_DESCRIPTOR)RtlImageDirectoryEntryToData(VaToPa(BootDdDTE->DllBase),
+ TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ImportTableSize);
+ for (;(ImportTable->Name != 0) && (ImportTable->FirstThunk != 0);ImportTable++)
+ {
+ PIMAGE_THUNK_DATA ThunkData = (PIMAGE_THUNK_DATA)VaToPa(RVA(BootDdDTE->DllBase, ImportTable->FirstThunk));
+
+ while (((PIMAGE_THUNK_DATA)ThunkData)->u1.AddressOfData != 0)
+ {
+ ThunkData->u1.Function = (ULONG)VaToPa((PVOID)ThunkData->u1.Function);
+ ThunkData++;
+ }
+ }
+
+ /* Relocate image to PA */
+ NtHeaders = RtlImageNtHeader(VaToPa(BootDdDTE->DllBase));
+ if (!NtHeaders)
+ return EIO;
+ Status = LdrRelocateImageWithBias(
+ VaToPa(BootDdDTE->DllBase),
+ NtHeaders->OptionalHeader.ImageBase - (ULONG_PTR)BootDdDTE->DllBase,
+ "FreeLdr",
+ TRUE,
+ TRUE, /* in case of conflict still return success */
+ FALSE);
+ if (!Status)
+ return EIO;
+
+ /* Call the entrypoint */
+ EntryPoint = VaToPa(BootDdDTE->EntryPoint);
+ (*EntryPoint)(NULL, NULL);
+
+ return ESUCCESS;
+}
+
+/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/freeldr.c b/reactos/boot/freeldr/freeldr/freeldr.c
index 3fa9b476b06..5761ed9460c 100644
--- a/reactos/boot/freeldr/freeldr/freeldr.c
+++ b/reactos/boot/freeldr/freeldr/freeldr.c
@@ -20,6 +20,9 @@
#include
#include
+VOID NTAPI HalpInitializePciStubs(VOID);
+VOID NTAPI HalpInitBusHandler(VOID);
+
VOID BootMain(LPSTR CmdLine)
{
CmdLineParse(CmdLine);
@@ -44,5 +47,7 @@ VOID BootMain(LPSTR CmdLine)
return;
}
+ HalpInitializePciStubs();
+ HalpInitBusHandler();
RunLoader();
}
diff --git a/reactos/boot/freeldr/freeldr/freeldr.rbuild b/reactos/boot/freeldr/freeldr/freeldr.rbuild
index dc83aaa9878..b513dabca44 100644
--- a/reactos/boot/freeldr/freeldr/freeldr.rbuild
+++ b/reactos/boot/freeldr/freeldr/freeldr.rbuild
@@ -7,6 +7,7 @@
freeldr_startup
freeldr_base64k
freeldr_base
+ mini_hal
freeldr_arch
freeldr_main
rossym
diff --git a/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild b/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild
index 8d8287bba5d..05ca7b327f1 100644
--- a/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild
+++ b/reactos/boot/freeldr/freeldr/freeldr_arch.rbuild
@@ -6,20 +6,9 @@
include
include/reactos/libs
include/reactos/elf
+
-
- -fno-inline
- -fno-zero-initialized-in-bss
-
-
-
-
- -ffreestanding
- -fno-builtin
- -Os
-
-
-
+
@@ -27,6 +16,7 @@
archmach.c
custom.c
drivemap.c
+ halstub.c
hardware.c
hwacpi.c
hwapm.c
@@ -37,6 +27,7 @@
loader.c
machpc.c
miscboot.c
+ ntoskrnl.c
pccons.c
pcdisk.c
pcmem.c
@@ -73,7 +64,6 @@
boot.s
- loader.c
macharm.c
@@ -102,6 +92,11 @@
+
+
+ wlmemory.c
+
+
ntsetup.c
diff --git a/reactos/boot/freeldr/freeldr/freeldr_base.rbuild b/reactos/boot/freeldr/freeldr/freeldr_base.rbuild
index 16076bf18f4..8edcd8ef4d0 100644
--- a/reactos/boot/freeldr/freeldr/freeldr_base.rbuild
+++ b/reactos/boot/freeldr/freeldr/freeldr_base.rbuild
@@ -5,12 +5,9 @@
cache
.
include
+
-
- -fno-inline
- -fno-zero-initialized-in-bss
-
mm.c
time.c
@@ -26,6 +23,7 @@
disk.c
partition.c
ramdisk.c
+ scsiport.c
ext2.c
@@ -56,6 +54,7 @@
libsupp.c
+ directui.c
gui.c
minitui.c
noui.c
@@ -68,24 +67,13 @@
palette.c
video.c
-
-
- conversion.c
- peloader.c
- winldr.c
- wlmemory.c
- wlregistry.c
-
-
-
-
- conversion.c
- peloader.c
- winldr.c
- wlmemory.c
- wlregistry.c
-
-
+
+ conversion.c
+ peloader.c
+ winldr.c
+ wlmemory.c
+ wlregistry.c
+
freeldr.c
debug.c
version.c
diff --git a/reactos/boot/freeldr/freeldr/freeldr_base64k.rbuild b/reactos/boot/freeldr/freeldr/freeldr_base64k.rbuild
index 29bf32cf9ef..b5127e6b4ed 100644
--- a/reactos/boot/freeldr/freeldr/freeldr_base64k.rbuild
+++ b/reactos/boot/freeldr/freeldr/freeldr_base64k.rbuild
@@ -4,10 +4,6 @@
include
include
-
- -fno-inline
- -fno-zero-initialized-in-bss
-
diff --git a/reactos/boot/freeldr/freeldr/freeldr_main.rbuild b/reactos/boot/freeldr/freeldr/freeldr_main.rbuild
index 4a93dff79f0..fbb410e86a4 100644
--- a/reactos/boot/freeldr/freeldr/freeldr_main.rbuild
+++ b/reactos/boot/freeldr/freeldr/freeldr_main.rbuild
@@ -4,9 +4,5 @@
include
include
-
- -fno-inline
- -fno-zero-initialized-in-bss
-
bootmgr.c
diff --git a/reactos/boot/freeldr/freeldr/freeldr_startup.rbuild b/reactos/boot/freeldr/freeldr/freeldr_startup.rbuild
index 57d87958c20..836ecf628dd 100644
--- a/reactos/boot/freeldr/freeldr/freeldr_startup.rbuild
+++ b/reactos/boot/freeldr/freeldr/freeldr_startup.rbuild
@@ -3,10 +3,6 @@
include
include
-
- -fno-inline
- -fno-zero-initialized-in-bss
-
diff --git a/reactos/boot/freeldr/freeldr/fs/ext2.c b/reactos/boot/freeldr/freeldr/fs/ext2.c
index afd37ae5fdd..46f12fbe6d4 100644
--- a/reactos/boot/freeldr/freeldr/fs/ext2.c
+++ b/reactos/boot/freeldr/freeldr/fs/ext2.c
@@ -17,6 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifndef _M_ARM
#include
#include
@@ -1308,3 +1309,6 @@ const DEVVTBL* Ext2Mount(ULONG DeviceId)
else
return NULL;
}
+
+#endif
+
diff --git a/reactos/boot/freeldr/freeldr/fs/fs.c b/reactos/boot/freeldr/freeldr/fs/fs.c
index 49f817c112e..eb23215f789 100644
--- a/reactos/boot/freeldr/freeldr/fs/fs.c
+++ b/reactos/boot/freeldr/freeldr/fs/fs.c
@@ -319,15 +319,26 @@ LONG ArcOpen(CHAR* Path, OPENMODE OpenMode, ULONG* FileId)
FileData[DeviceId].FuncTable = NULL;
return ret;
}
+ else if (!*FileName)
+ {
+ /* Done, caller wanted to open the raw device */
+ *FileId = DeviceId;
+ pDevice->ReferenceCount++;
+ return ESUCCESS;
+ }
/* Try to detect the file system */
+#ifndef _M_ARM
FileData[DeviceId].FileFuncTable = IsoMount(DeviceId);
if (!FileData[DeviceId].FileFuncTable)
+#endif
FileData[DeviceId].FileFuncTable = FatMount(DeviceId);
+#ifndef _M_ARM
if (!FileData[DeviceId].FileFuncTable)
FileData[DeviceId].FileFuncTable = NtfsMount(DeviceId);
if (!FileData[DeviceId].FileFuncTable)
FileData[DeviceId].FileFuncTable = Ext2Mount(DeviceId);
+#endif
if (!FileData[DeviceId].FileFuncTable)
{
/* Error, unable to detect file system */
diff --git a/reactos/boot/freeldr/freeldr/fs/iso.c b/reactos/boot/freeldr/freeldr/fs/iso.c
index fc35402da66..dd1231558d7 100644
--- a/reactos/boot/freeldr/freeldr/fs/iso.c
+++ b/reactos/boot/freeldr/freeldr/fs/iso.c
@@ -18,6 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifndef _M_ARM
#include
#include
@@ -510,3 +511,6 @@ const DEVVTBL* IsoMount(ULONG DeviceId)
else
return NULL;
}
+
+#endif
+
diff --git a/reactos/boot/freeldr/freeldr/fs/ntfs.c b/reactos/boot/freeldr/freeldr/fs/ntfs.c
index 23344dd10e4..830e3ade042 100644
--- a/reactos/boot/freeldr/freeldr/fs/ntfs.c
+++ b/reactos/boot/freeldr/freeldr/fs/ntfs.c
@@ -23,6 +23,7 @@
* - May crash on corrupted filesystem.
*/
+#ifndef _M_ARM
#include
#include
@@ -957,3 +958,5 @@ const DEVVTBL* NtfsMount(ULONG DeviceId)
//
return &NtfsFuncTable;
}
+
+#endif
diff --git a/reactos/boot/freeldr/freeldr/include/arch.h b/reactos/boot/freeldr/freeldr/include/arch.h
index c3e3c45c307..b9a6cc02386 100644
--- a/reactos/boot/freeldr/freeldr/include/arch.h
+++ b/reactos/boot/freeldr/freeldr/include/arch.h
@@ -17,9 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
-#ifndef __ARCH_H
-#define __ARCH_H
+#pragma once
#ifdef _M_AMD64
#include
@@ -176,6 +174,3 @@ VOID SoftReboot(VOID); // Implemented in boot.S
VOID DetectHardware(VOID); // Implemented in hardware.c
#endif /* ! ASM */
-
-
-#endif // #defined __ARCH_H
diff --git a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h
index 0a1ff1d82cb..9068e00f90a 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h
@@ -18,8 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __AMD64_AMD64_H_
-#define __AMD64_AMD64_H_
+#pragma once
// This is needed because headers define wrong one for ReactOS
#undef KIP0PCRADDRESS
@@ -63,6 +62,4 @@ VOID FrLdrSetupGdtIdt();
#endif
-#endif /* __AMD64_AMD64_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/arch/amd64/hardware.h b/reactos/boot/freeldr/freeldr/include/arch/amd64/hardware.h
index c1252af6916..b6da01e555e 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/amd64/hardware.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/amd64/hardware.h
@@ -18,8 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __AMD64_HARDWARE_H_
-#define __AMD64_HARDWARE_H_
+#pragma once
#ifndef __REGISTRY_H
#include "../../reactos/registry.h"
@@ -92,6 +91,4 @@ ULONG PnpBiosGetDeviceNodeCount(ULONG *NodeSize,
ULONG PnpBiosGetDeviceNode(UCHAR *NodeId,
UCHAR *NodeBuffer);
-#endif /* __AMD64_HARDWARE_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h b/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h
index 91ad2d566b4..2efd7e8c74a 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/amd64/machpc.h
@@ -19,8 +19,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __I386_MACHPC_H_
-#define __I386_MACHPC_H_
+#pragma once
#ifndef __MEMORY_H
#include "mm.h"
@@ -59,6 +58,4 @@ TIMEINFO* PcGetTime(VOID);
PCONFIGURATION_COMPONENT_DATA PcHwDetect(VOID);
-#endif /* __I386_MACHPC_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h b/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h
index c09d5bfed4a..1668b4f4daa 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/arm/hardware.h
@@ -6,8 +6,7 @@
* PROGRAMMERS: ReactOS Portable Systems Group
*/
-#ifndef _ARM_HARDWARE_
-#define __ARM_HARDWARE_
+#pragma once
#ifndef __REGISTRY_H
#include "../../reactos/registry.h"
@@ -16,12 +15,6 @@
#include "../../../../../armllb/inc/osloader.h"
#include "../../../../../armllb/inc/machtype.h"
-//
-// Static heap for ARC Hardware Component Tree
-// 16KB oughta be enough for anyone.
-//
-#define HW_MAX_ARC_HEAP_SIZE 16 * 1024
-
//
// ARC Component Configuration Routines
//
@@ -31,21 +24,14 @@ FldrCreateSystemKey(
OUT PCONFIGURATION_COMPONENT_DATA *SystemKey
);
-VOID
-NTAPI
-FldrCreateComponentKey(
- IN PCONFIGURATION_COMPONENT_DATA SystemKey,
- IN CONFIGURATION_CLASS Class,
- IN CONFIGURATION_TYPE Type,
- IN IDENTIFIER_FLAG Flags,
- IN ULONG Key,
- IN ULONG Affinity,
- IN PCHAR IdentifierString,
- IN PCM_PARTIAL_RESOURCE_LIST ResourceList,
- IN ULONG Size,
- OUT PCONFIGURATION_COMPONENT_DATA *ComponentKey
-);
+#define HW_MAX_ARC_HEAP_SIZE 256
extern PARM_BOARD_CONFIGURATION_BLOCK ArmBoardBlock;
-
-#endif
+extern ULONG FirstLevelDcacheSize;
+extern ULONG FirstLevelDcacheFillSize;
+extern ULONG FirstLevelIcacheSize;
+extern ULONG FirstLevelIcacheFillSize;
+extern ULONG SecondLevelDcacheSize;
+extern ULONG SecondLevelDcacheFillSize;
+extern ULONG SecondLevelIcacheSize;
+extern ULONG SecondLevelIcacheFillSize;
diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/custom.h b/reactos/boot/freeldr/freeldr/include/arch/i386/custom.h
index 3594c4a1ebb..1ab1dcdfd78 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/i386/custom.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/i386/custom.h
@@ -17,8 +17,7 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-#ifndef __I386_OPTIONS_H
-#define __I386_OPTIONS_H
+#pragma once
#define HAS_OPTION_MENU_CUSTOM_BOOT
#define HAS_OPTION_MENU_REBOOT
@@ -31,5 +30,3 @@ VOID OptionMenuCustomBootPartition(VOID);
VOID OptionMenuCustomBootBootSectorFile(VOID);
VOID OptionMenuCustomBootReactOS(VOID);
VOID OptionMenuCustomBootLinux(VOID);
-
-#endif // #defined __I386_OPTIONS_H
diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/drivemap.h b/reactos/boot/freeldr/freeldr/include/arch/i386/drivemap.h
index e425fd80d94..aebd893a53b 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/i386/drivemap.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/i386/drivemap.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __I386_DRIVEMAP_H
-#define __I386_DRIVEMAP_H
+#pragma once
#include
typedef struct
@@ -38,5 +37,3 @@ extern PVOID DriveMapInt13HandlerStart;
extern PVOID DriveMapInt13HandlerEnd;
extern ULONG DriveMapOldInt13HandlerAddress;
extern DRIVE_MAP_LIST DriveMapInt13HandlerMapList;
-
-#endif // #defined __I386_DRIVEMAP_H
diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/hardware.h b/reactos/boot/freeldr/freeldr/include/arch/i386/hardware.h
index 6282b266425..c97ba88e9b7 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/i386/hardware.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/i386/hardware.h
@@ -18,8 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __I386_HARDWARE_H_
-#define __I386_HARDWARE_H_
+#pragma once
#ifndef __REGISTRY_H
#include "../../reactos/registry.h"
@@ -92,6 +91,4 @@ ULONG PnpBiosGetDeviceNodeCount(ULONG *NodeSize,
ULONG PnpBiosGetDeviceNode(UCHAR *NodeId,
UCHAR *NodeBuffer);
-#endif /* __I386_HARDWARE_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h b/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h
index c58f5953848..faf26b8b8fd 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h
@@ -18,14 +18,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __I386_I386_H_
-#define __I386_I386_H_
+#pragma once
// This is needed because headers define wrong one for ReactOS
#undef KIP0PCRADDRESS
#define KIP0PCRADDRESS 0xffdff000
-
-#endif /* __I386_I386_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/machpc.h b/reactos/boot/freeldr/freeldr/include/arch/i386/machpc.h
index 7cf78767fb1..1cb40b24f10 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/i386/machpc.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/i386/machpc.h
@@ -19,8 +19,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __I386_MACHPC_H_
-#define __I386_MACHPC_H_
+#pragma once
#ifndef __MEMORY_H
#include "mm.h"
@@ -58,6 +57,4 @@ TIMEINFO* PcGetTime(VOID);
PCONFIGURATION_COMPONENT_DATA PcHwDetect(VOID);
-#endif /* __I386_MACHPC_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/machxbox.h b/reactos/boot/freeldr/freeldr/include/arch/i386/machxbox.h
index 5d0cd1e3395..febba0b8636 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/i386/machxbox.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/i386/machxbox.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __I386_MACHXBOX_H_
-#define __I386_MACHXBOX_H_
+#pragma once
#ifndef __MEMORY_H
#include "mm.h"
@@ -63,7 +62,4 @@ PCONFIGURATION_COMPONENT_DATA XboxHwDetect(VOID);
VOID XboxSetLED(PCSTR Pattern);
-
-#endif /* __I386_HWXBOX_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/miscboot.h b/reactos/boot/freeldr/freeldr/include/arch/i386/miscboot.h
index 3ee8ab3dac4..df17f558848 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/i386/miscboot.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/i386/miscboot.h
@@ -17,11 +17,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __I386_BOOT_H
-#define __I386_BOOT_H
+#pragma once
VOID LoadAndBootBootSector(PCSTR OperatingSystemName);
VOID LoadAndBootPartition(PCSTR OperatingSystemName);
VOID LoadAndBootDrive(PCSTR OperatingSystemName);
-
-#endif // defined __I386_BOOT_H
diff --git a/reactos/boot/freeldr/freeldr/include/arch/powerpc/hardware.h b/reactos/boot/freeldr/freeldr/include/arch/powerpc/hardware.h
index da4a99f94fc..9aebb0fbaea 100644
--- a/reactos/boot/freeldr/freeldr/include/arch/powerpc/hardware.h
+++ b/reactos/boot/freeldr/freeldr/include/arch/powerpc/hardware.h
@@ -18,8 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __POWERPC_HARDWARE_H_
-#define __POWERPC_HARDWARE_H_
+#pragma once
#ifndef __REGISTRY_H
#include "../../reactos/registry.h"
@@ -68,6 +67,4 @@ VOID HalpCalibrateStallExecution(VOID);
ULONGLONG RDTSC(VOID);
-#endif /* __POWERPC_HARDWARE_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/bytesex.h b/reactos/boot/freeldr/freeldr/include/bytesex.h
index ccbfc7cad05..7392ba24cfe 100644
--- a/reactos/boot/freeldr/freeldr/include/bytesex.h
+++ b/reactos/boot/freeldr/freeldr/include/bytesex.h
@@ -1,5 +1,4 @@
-#ifndef __BYTESEX_H_
-#define __BYTESEX_H_
+#pragma once
#ifdef _PPC_
#define SWAPD(x) ((((x)&0xff)<<24)|(((x)&0xff00)<<8)|(((x)>>8)&0xff00)|(((x)>>24)&0xff))
@@ -10,5 +9,3 @@
#endif
#define SD(Object,Field) Object->Field = SWAPD(Object->Field)
#define SW(Object,Field) Object->Field = SWAPW(Object->Field)
-
-#endif/*__BYTESEX_H_*/
diff --git a/reactos/boot/freeldr/freeldr/include/cache.h b/reactos/boot/freeldr/freeldr/include/cache.h
index cd05fd7c26d..abadfd32c93 100644
--- a/reactos/boot/freeldr/freeldr/include/cache.h
+++ b/reactos/boot/freeldr/freeldr/include/cache.h
@@ -18,8 +18,7 @@
*/
-#ifndef __CACHE_H
-#define __CACHE_H
+#pragma once
///////////////////////////////////////////////////////////////////////////////////////
//
@@ -90,5 +89,3 @@ VOID CacheInvalidateCacheData(VOID);
BOOLEAN CacheReadDiskSectors(ULONG DiskNumber, ULONG StartSector, ULONG SectorCount, PVOID Buffer);
BOOLEAN CacheForceDiskSectorsIntoCache(ULONG DiskNumber, ULONG StartSector, ULONG SectorCount);
BOOLEAN CacheReleaseMemory(ULONG MinimumAmountToRelease);
-
-#endif // defined __CACHE_H
diff --git a/reactos/boot/freeldr/freeldr/include/cmdline.h b/reactos/boot/freeldr/freeldr/include/cmdline.h
index 1910ef8c0c9..05b92f1410c 100644
--- a/reactos/boot/freeldr/freeldr/include/cmdline.h
+++ b/reactos/boot/freeldr/freeldr/include/cmdline.h
@@ -18,8 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __CMDLINE_H__
-#define __CMDLINE_H__
+#pragma once
typedef struct tagCMDLINEINFO
{
@@ -32,6 +31,4 @@ void CmdLineParse(char *CmdLine);
const char *CmdLineGetDefaultOS(void);
LONG CmdLineGetTimeOut(void);
-#endif /* __CMDLINE_H__ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/comm.h b/reactos/boot/freeldr/freeldr/include/comm.h
index 58ba8594946..511b705de50 100644
--- a/reactos/boot/freeldr/freeldr/include/comm.h
+++ b/reactos/boot/freeldr/freeldr/include/comm.h
@@ -19,14 +19,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __RS232_H
-#define __RS232_H
+#pragma once
BOOLEAN Rs232PortInitialize(ULONG ComPort, ULONG BaudRate);
BOOLEAN Rs232PortGetByte(PUCHAR ByteRecieved);
BOOLEAN Rs232PortPollByte(PUCHAR ByteRecieved);
VOID Rs232PortPutByte(UCHAR ByteToSend);
BOOLEAN Rs232PortInUse(ULONG Base);
-
-
-#endif // defined __RS232_H
diff --git a/reactos/boot/freeldr/freeldr/include/debug.h b/reactos/boot/freeldr/freeldr/include/debug.h
index b0d3c626ff2..1e855360491 100644
--- a/reactos/boot/freeldr/freeldr/include/debug.h
+++ b/reactos/boot/freeldr/freeldr/include/debug.h
@@ -35,11 +35,12 @@
#define DPRINT_HWDETECT 0x00000400 // OR this with DebugPrintMask to enable hardware detection messages
#define DPRINT_WINDOWS 0x00000800 // OR this with DebugPrintMask to enable messages from Windows loader
#define DPRINT_PELOADER 0x00001000 // OR this with DebugPrintMask to enable messages from PE images loader
+#define DPRINT_SCSIPORT 0x00002000 // OR this with DebugPrintMask to enable messages from SCSI miniport
extern char* g_file;
extern int g_line;
-#if DBG
+#if DBG && !defined(_M_ARM)
VOID DbgPrintMask(ULONG Mask, char *format, ...);
VOID DebugInit(VOID);
@@ -80,7 +81,7 @@ void MEMORY_WRITE_BREAKPOINT4(unsigned long addr);
#else
- #define DebugInit()
+ #define DebugInit(x)
#define DPRINTM(_x_, ...)
#define BugCheck(_x_)
#define DbgDumpBuffer(_x_, _y_, _z_)
diff --git a/reactos/boot/freeldr/freeldr/include/disk.h b/reactos/boot/freeldr/freeldr/include/disk.h
index a1a09fac410..daaaa495e55 100644
--- a/reactos/boot/freeldr/freeldr/include/disk.h
+++ b/reactos/boot/freeldr/freeldr/include/disk.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __DISK_H
-#define __DISK_H
+#pragma once
#include
@@ -142,4 +141,4 @@ BOOLEAN DiskGetFirstPartitionEntry(PMASTER_BOOT_RECORD MasterBootRecord, PPARTIT
BOOLEAN DiskGetFirstExtendedPartitionEntry(PMASTER_BOOT_RECORD MasterBootRecord, PPARTITION_TABLE_ENTRY PartitionTableEntry);
BOOLEAN DiskReadBootRecord(ULONG DriveNumber, ULONGLONG LogicalSectorNumber, PMASTER_BOOT_RECORD BootRecord);
-#endif // defined __DISK_H
+ULONG LoadBootDeviceDriver(VOID);
diff --git a/reactos/boot/freeldr/freeldr/include/freeldr.h b/reactos/boot/freeldr/freeldr/include/freeldr.h
index ca8788da288..c80fed6b6f8 100644
--- a/reactos/boot/freeldr/freeldr/include/freeldr.h
+++ b/reactos/boot/freeldr/freeldr/include/freeldr.h
@@ -32,6 +32,7 @@
#define NTOSAPI
#define printf TuiPrintf
#include
+#include
#include
#include
#include
@@ -39,6 +40,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -60,6 +62,8 @@
#include
#include
#include
+#include
+#include
/* file system headers */
#include
#include
diff --git a/reactos/boot/freeldr/freeldr/include/fs.h b/reactos/boot/freeldr/freeldr/include/fs.h
index 1ecaceaacb2..2aa15257386 100644
--- a/reactos/boot/freeldr/freeldr/include/fs.h
+++ b/reactos/boot/freeldr/freeldr/include/fs.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __FS_H
-#define __FS_H
+#pragma once
typedef struct tagDEVVTBL
{
@@ -60,5 +59,3 @@ ULONG FsGetNumPathParts(PCSTR Path);
VOID FsGetFirstNameFromPath(PCHAR Buffer, PCSTR Path);
#define MAX_FDS 60
-
-#endif // #defined __FS_H
diff --git a/reactos/boot/freeldr/freeldr/include/fs/ext2.h b/reactos/boot/freeldr/freeldr/include/fs/ext2.h
index 5189f6ebf45..8a2b518a4be 100644
--- a/reactos/boot/freeldr/freeldr/include/fs/ext2.h
+++ b/reactos/boot/freeldr/freeldr/include/fs/ext2.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __EXT2_H
-#define __EXT2_H
+#pragma once
/*
* grub/fs/ext2.c
@@ -237,5 +236,3 @@ typedef struct
} EXT2_FILE_INFO, * PEXT2_FILE_INFO;
const DEVVTBL* Ext2Mount(ULONG DeviceId);
-
-#endif // #defined __EXT2_H
diff --git a/reactos/boot/freeldr/freeldr/include/fs/fat.h b/reactos/boot/freeldr/freeldr/include/fs/fat.h
index 5812f0a80f1..1bf99bfff24 100644
--- a/reactos/boot/freeldr/freeldr/include/fs/fat.h
+++ b/reactos/boot/freeldr/freeldr/include/fs/fat.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __FAT_H
-#define __FAT_H
+#pragma once
#include
typedef struct _FAT_BOOTSECTOR
@@ -174,5 +173,3 @@ typedef struct
#define ISFATX(FT) ((FT) == FATX16 || (FT) == FATX32)
const DEVVTBL* FatMount(ULONG DeviceId);
-
-#endif // #defined __FAT_H
diff --git a/reactos/boot/freeldr/freeldr/include/fs/iso.h b/reactos/boot/freeldr/freeldr/include/fs/iso.h
index 957d083b3ff..eacfc970407 100644
--- a/reactos/boot/freeldr/freeldr/include/fs/iso.h
+++ b/reactos/boot/freeldr/freeldr/include/fs/iso.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __ISO_H
-#define __ISO_H
+#pragma once
#include
struct _DIR_RECORD
@@ -100,5 +99,3 @@ typedef struct
} ISO_FILE_INFO, * PISO_FILE_INFO;
const DEVVTBL* IsoMount(ULONG DeviceId);
-
-#endif // #defined __FAT_H
diff --git a/reactos/boot/freeldr/freeldr/include/fs/ntfs.h b/reactos/boot/freeldr/freeldr/include/fs/ntfs.h
index 06421f76e99..123508632da 100644
--- a/reactos/boot/freeldr/freeldr/include/fs/ntfs.h
+++ b/reactos/boot/freeldr/freeldr/include/fs/ntfs.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __NTFS_H
-#define __NTFS_H
+#pragma once
#define NTFS_FILE_MFT 0
#define NTFS_FILE_MFTMIRR 1
@@ -226,5 +225,3 @@ typedef struct
#include
const DEVVTBL* NtfsMount(ULONG DeviceId);
-
-#endif // #defined __NTFS_H
diff --git a/reactos/boot/freeldr/freeldr/include/inffile.h b/reactos/boot/freeldr/freeldr/include/inffile.h
index 938f8b90a84..89afe6de322 100644
--- a/reactos/boot/freeldr/freeldr/include/inffile.h
+++ b/reactos/boot/freeldr/freeldr/include/inffile.h
@@ -25,9 +25,7 @@
* Eric Kohl
*/
-#ifndef __INFCACHE_H__
-#define __INFCACHE_H__
-
+#pragma once
#define STATUS_BAD_SECTION_NAME_LINE (0xC0700001)
#define STATUS_SECTION_NAME_TOO_LONG (0xC0700002)
@@ -125,6 +123,4 @@ InfGetDataField (PINFCONTEXT Context,
ULONG FieldIndex,
PCSTR *Data);
-#endif /* __INFCACHE_H__ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/inifile.h b/reactos/boot/freeldr/freeldr/include/inifile.h
index 72d633e7ac4..ac71d551408 100644
--- a/reactos/boot/freeldr/freeldr/include/inifile.h
+++ b/reactos/boot/freeldr/freeldr/include/inifile.h
@@ -17,13 +17,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __PARSEINI_H
-#define __PARSEINI_H
+#pragma once
#define INI_FILE_COMMENT_CHAR ';'
-
-
// This structure describes a single .ini file item
// The item format in the .ini file is:
// Name=Value
@@ -78,6 +75,3 @@ BOOLEAN IniReadSettingByNumber(ULONG_PTR SectionId, ULONG SettingNumber, PCHAR S
BOOLEAN IniReadSettingByName(ULONG_PTR SectionId, PCSTR SettingName, PCHAR Buffer, ULONG BufferSize);
BOOLEAN IniAddSection(PCSTR SectionName, ULONG_PTR* SectionId);
BOOLEAN IniAddSettingValueToSection(ULONG_PTR SectionId, PCSTR SettingName, PCSTR SettingValue);
-
-
-#endif // defined __PARSEINI_H
diff --git a/reactos/boot/freeldr/freeldr/include/keycodes.h b/reactos/boot/freeldr/freeldr/include/keycodes.h
index 55e03edbc8a..5d781f92389 100644
--- a/reactos/boot/freeldr/freeldr/include/keycodes.h
+++ b/reactos/boot/freeldr/freeldr/include/keycodes.h
@@ -17,9 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __KEYCODES_H
-#define __KEYCODES_H
-
+#pragma once
// Key codes
#define KEY_EXTENDED 0x00
@@ -41,6 +39,3 @@
#define KEY_F8 0x42
#define KEY_F9 0x43
#define KEY_F10 0x44
-
-
-#endif // #defined __KEYCODES_H
diff --git a/reactos/boot/freeldr/freeldr/include/machine.h b/reactos/boot/freeldr/freeldr/include/machine.h
index 440755de6a7..0c0076f4760 100644
--- a/reactos/boot/freeldr/freeldr/include/machine.h
+++ b/reactos/boot/freeldr/freeldr/include/machine.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __MACHINE_H_
-#define __MACHINE_H_
+#pragma once
#ifndef __DISK_H
#include "disk.h"
@@ -126,6 +125,4 @@ VOID MachPrepareForReactOS(IN BOOLEAN Setup);
#define MachDiskGetCacheableBlockCount(Drive) MachVtbl.DiskGetCacheableBlockCount(Drive)
#define MachHwDetect() MachVtbl.HwDetect()
-#endif /* __MACHINE_H_ */
-
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/include/mm.h b/reactos/boot/freeldr/freeldr/include/mm.h
index cfec1478eaa..a7840e37791 100644
--- a/reactos/boot/freeldr/freeldr/include/mm.h
+++ b/reactos/boot/freeldr/freeldr/include/mm.h
@@ -17,9 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
-#ifndef __MEMORY_H
-#define __MEMORY_H
+#pragma once
typedef enum
{
@@ -119,4 +117,6 @@ PVOID MmAllocateHighestMemoryBelowAddress(ULONG MemorySize, PVOID DesiredAddress
PVOID MmHeapAlloc(ULONG MemorySize);
VOID MmHeapFree(PVOID MemoryPointer);
-#endif // defined __MEMORY_H
+#define ExAllocatePool(pool, size) MmHeapAlloc(size)
+#define ExAllocatePoolWithTag(pool, size, tag) MmHeapAlloc(size)
+#define ExFreePool(p) MmHeapFree(p)
diff --git a/reactos/boot/freeldr/freeldr/include/multiboot.h b/reactos/boot/freeldr/freeldr/include/multiboot.h
index be28f2b246c..dd3467f28d2 100644
--- a/reactos/boot/freeldr/freeldr/include/multiboot.h
+++ b/reactos/boot/freeldr/freeldr/include/multiboot.h
@@ -16,8 +16,7 @@
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __MULTIBOOT_H
-#define __MULTIBOOT_H
+#pragma once
/* Macros. */
@@ -103,6 +102,3 @@ typedef struct memory_map
} memory_map_t;
#endif /* ! ASM */
-
-
-#endif // defined __MULTIBOOT_H
diff --git a/reactos/boot/freeldr/freeldr/include/ntoskrnl.h b/reactos/boot/freeldr/freeldr/include/ntoskrnl.h
new file mode 100644
index 00000000000..f2e9e468008
--- /dev/null
+++ b/reactos/boot/freeldr/freeldr/include/ntoskrnl.h
@@ -0,0 +1,17 @@
+#include
+#undef _NTHAL_
+//#undef DECLSPEC_IMPORT
+//#define DECLSPEC_IMPORT
+#undef NTSYSAPI
+#define NTSYSAPI
+
+/* Windows Device Driver Kit */
+#include
+#include
+
+//typedef GUID UUID;
+
+/* Disk stuff */
+typedef PVOID PLOADER_PARAMETER_BLOCK;
+#include
+#include
diff --git a/reactos/boot/freeldr/freeldr/include/of.h b/reactos/boot/freeldr/freeldr/include/of.h
index 8ab77b293b5..76c9d2162ce 100644
--- a/reactos/boot/freeldr/freeldr/include/of.h
+++ b/reactos/boot/freeldr/freeldr/include/of.h
@@ -1,5 +1,4 @@
-#ifndef FREELDR_OF_H
-#define FREELDR_OF_H
+#pragma once
#define OF_FAILED 0
#define ERR_NOT_FOUND 0xc0000010
@@ -15,5 +14,3 @@ extern of_proxy ofproxy;
int setjmp( jmp_buf buf );
int longjmp( jmp_buf buf, int retval );
int ofw_callmethod_ret(const char *method, int handle, int nargs, int *args, int ret);
-
-#endif/*FREELDR_OF_H*/
diff --git a/reactos/boot/freeldr/freeldr/include/options.h b/reactos/boot/freeldr/freeldr/include/options.h
index bfa64798cd3..124b64e2326 100644
--- a/reactos/boot/freeldr/freeldr/include/options.h
+++ b/reactos/boot/freeldr/freeldr/include/options.h
@@ -17,9 +17,6 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __OPTIONS_H
-#define __OPTIONS_H
+#pragma once
VOID DoOptionsMenu(VOID);
-
-#endif // #defined __OPTIONS_H
diff --git a/reactos/boot/freeldr/freeldr/include/oslist.h b/reactos/boot/freeldr/freeldr/include/oslist.h
index 0f3ab77faef..04df0fa789b 100644
--- a/reactos/boot/freeldr/freeldr/include/oslist.h
+++ b/reactos/boot/freeldr/freeldr/include/oslist.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __OSLIST_H
-#define __OSLIST_H
+#pragma once
typedef struct tagOperatingSystemItem
{
@@ -28,5 +27,3 @@ typedef struct tagOperatingSystemItem
} OperatingSystemItem;
OperatingSystemItem* InitOperatingSystemList(ULONG* OperatingSystemCountPointer);
-
-#endif // #defined __OSLIST_H
diff --git a/reactos/boot/freeldr/freeldr/include/ramdisk.h b/reactos/boot/freeldr/freeldr/include/ramdisk.h
index c77c09e6876..8979bcf98a8 100644
--- a/reactos/boot/freeldr/freeldr/include/ramdisk.h
+++ b/reactos/boot/freeldr/freeldr/include/ramdisk.h
@@ -6,8 +6,7 @@
* PROGRAMMERS: ReactOS Portable Systems Group
*/
-#ifndef _RAMDISK_
-#define _RAMDISK_
+#pragma once
//
// Ramdisk Routines
@@ -26,5 +25,3 @@ RamDiskInitialize(
extern PVOID gRamDiskBase;
extern ULONG gRamDiskSize;
-
-#endif
diff --git a/reactos/boot/freeldr/freeldr/include/reactos.h b/reactos/boot/freeldr/freeldr/include/reactos.h
index de159735d35..82e23abb946 100644
--- a/reactos/boot/freeldr/freeldr/include/reactos.h
+++ b/reactos/boot/freeldr/freeldr/include/reactos.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __REACTOS_H
-#define __REACTOS_H
+#pragma once
/* Base Addres of Kernel in Physical Memory */
#define KERNEL_BASE_PHYS 0x800000
@@ -74,6 +73,14 @@ VOID ReactOSRunSetupLoader(VOID);
// ARC Path Functions
//
///////////////////////////////////////////////////////////////////////////////////////
+BOOLEAN
+DissectArcPath2(
+ IN CHAR* ArcPath,
+ OUT ULONG* x,
+ OUT ULONG* y,
+ OUT ULONG* z,
+ OUT ULONG* Partition,
+ OUT ULONG *PathSyntax);
BOOLEAN DissectArcPath(CHAR *ArcPath, CHAR *BootPath, ULONG* BootDrive, ULONG* BootPartition);
VOID ConstructArcPath(PCHAR ArcPath, PCHAR SystemFolder, ULONG Disk, ULONG Partition);
ULONG ConvertArcNameToBiosDriveNumber(PCHAR ArcPath);
@@ -128,5 +135,3 @@ FrLdrLoadImage(
IN INT nPos,
IN ULONG ImageType
);
-
-#endif // defined __REACTOS_H
diff --git a/reactos/boot/freeldr/freeldr/include/rtl.h b/reactos/boot/freeldr/freeldr/include/rtl.h
index 877f217a352..d4ef384e9d0 100644
--- a/reactos/boot/freeldr/freeldr/include/rtl.h
+++ b/reactos/boot/freeldr/freeldr/include/rtl.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __STDLIB_H
-#define __STDLIB_H
+#pragma once
#include
@@ -28,5 +27,3 @@ char * convert_i64_to_ascii(char *buf, int c, unsigned long long num);
void PcBeep(void);
void delay(unsigned msec);
void sound(int freq);
-
-#endif // defined __STDLIB_H
diff --git a/reactos/boot/freeldr/freeldr/include/ui.h b/reactos/boot/freeldr/freeldr/include/ui.h
index ee58003b0d4..1b57fd9e069 100644
--- a/reactos/boot/freeldr/freeldr/include/ui.h
+++ b/reactos/boot/freeldr/freeldr/include/ui.h
@@ -17,9 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __UI_H
-#define __UI_H
-
+#pragma once
extern ULONG UiScreenWidth; // Screen Width
extern ULONG UiScreenHeight; // Screen Height
@@ -176,5 +174,3 @@ extern UIVTBL UiVtbl;
#define D_HORZ (0xcd) /* Double horizontal line.*/
#define VERT (0xb3) /* Single vertical line */
#define D_VERT (0xba) /* Double vertical line. */
-
-#endif // #defined __UI_H
diff --git a/reactos/boot/freeldr/freeldr/include/ui/gui.h b/reactos/boot/freeldr/freeldr/include/ui/gui.h
index 076fa05aacb..77a983a5eb9 100644
--- a/reactos/boot/freeldr/freeldr/include/ui/gui.h
+++ b/reactos/boot/freeldr/freeldr/include/ui/gui.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __GUI_H
-#define __GUI_H
+#pragma once
#define TUI_SCREEN_MEM 0xB8000
#define TITLE_BOX_CHAR_HEIGHT 5
@@ -52,5 +51,3 @@ UCHAR GuiTextToFillStyle(PCSTR FillStyleText); // Converts the text fill into
BOOLEAN GuiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem);
extern const UIVTBL GuiVtbl;
-
-#endif // #defined __GUI_H
diff --git a/reactos/boot/freeldr/freeldr/include/ui/minitui.h b/reactos/boot/freeldr/freeldr/include/ui/minitui.h
index d20230b25d4..d845c5202ed 100644
--- a/reactos/boot/freeldr/freeldr/include/ui/minitui.h
+++ b/reactos/boot/freeldr/freeldr/include/ui/minitui.h
@@ -6,8 +6,7 @@
* PROGRAMMERS: Herv Poussineau
*/
-#ifndef __MINITUI_H
-#define __MINITUI_H
+#pragma once
///////////////////////////////////////////////////////////////////////////////////////
//
@@ -29,5 +28,3 @@ VOID MiniTuiDrawProgressBar(ULONG Left, ULONG Top, ULONG Right, ULONG Bottom, UL
VOID MiniTuiDrawMenu(PUI_MENU_INFO MenuInfo);
extern const UIVTBL MiniTuiVtbl;
-
-#endif // #defined __TUI_H
diff --git a/reactos/boot/freeldr/freeldr/include/ui/noui.h b/reactos/boot/freeldr/freeldr/include/ui/noui.h
index df53ce1bdfd..de027d7951b 100644
--- a/reactos/boot/freeldr/freeldr/include/ui/noui.h
+++ b/reactos/boot/freeldr/freeldr/include/ui/noui.h
@@ -6,8 +6,7 @@
* PROGRAMMERS: Herv Poussineau
*/
-#ifndef _NOUI_H_
-#define _NOUI_H_
+#pragma once
///////////////////////////////////////////////////////////////////////////////////////
//
@@ -47,5 +46,3 @@ VOID NoUiDrawMenu(PUI_MENU_INFO MenuInfo);
BOOLEAN NoUiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
VOID NoUiDrawMenu(PUI_MENU_INFO MenuInfo);
-
-#endif /* _NOUI_H_ */
diff --git a/reactos/boot/freeldr/freeldr/include/ui/tui.h b/reactos/boot/freeldr/freeldr/include/ui/tui.h
index 5c0c0c34c0a..ad7faa4cf8e 100644
--- a/reactos/boot/freeldr/freeldr/include/ui/tui.h
+++ b/reactos/boot/freeldr/freeldr/include/ui/tui.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __TUI_H
-#define __TUI_H
+#pragma once
#define TUI_SCREEN_MEM 0xB8000
#define TUI_TITLE_BOX_CHAR_HEIGHT 5
@@ -80,12 +79,6 @@ VOID NTAPI TuiDrawMenuItem(PUI_MENU_INFO MenuInfo, ULONG MenuItemNumber);
ULONG NTAPI TuiProcessMenuKeyboardEvent(PUI_MENU_INFO MenuInfo, UiMenuKeyPressFilterCallback KeyPressFilter);
BOOLEAN TuiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultMenuItem, LONG MenuTimeOut, ULONG* SelectedMenuItem, BOOLEAN CanEscape, UiMenuKeyPressFilterCallback KeyPressFilter);
-
-
-
-
-
-
/* Definitions for corners, depending on HORIZ and VERT */
#define UL (0xda)
#define UR (0xbf) /* HORZ and VERT */
@@ -108,5 +101,3 @@ BOOLEAN TuiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG DefaultM
#define VD_LR (0xbd)
extern const UIVTBL TuiVtbl;
-
-#endif // #defined __TUI_H
diff --git a/reactos/boot/freeldr/freeldr/include/ver.h b/reactos/boot/freeldr/freeldr/include/ver.h
index 2f94f80a1a5..d078f8e1416 100644
--- a/reactos/boot/freeldr/freeldr/include/ver.h
+++ b/reactos/boot/freeldr/freeldr/include/ver.h
@@ -17,9 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __VERSION_H
-#define __VERSION_H
-
+#pragma once
/* just some stuff */
#define VERSION "FreeLoader v3.0"
@@ -44,6 +42,3 @@
PCHAR GetFreeLoaderVersionString(VOID);
#endif // ASM
-
-
-#endif // defined __VERSION_H
diff --git a/reactos/boot/freeldr/freeldr/include/video.h b/reactos/boot/freeldr/freeldr/include/video.h
index 60d338a10ac..921f28dd521 100644
--- a/reactos/boot/freeldr/freeldr/include/video.h
+++ b/reactos/boot/freeldr/freeldr/include/video.h
@@ -17,8 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __VIDEO_H
-#define __VIDEO_H
+#pragma once
#include
typedef struct
@@ -43,6 +42,3 @@ VOID VideoRestorePaletteState(PPALETTE_ENTRY Palette, ULONG ColorCount);
VOID VideoSetAllColorsToBlack(ULONG ColorCount);
VOID VideoFadeIn(PPALETTE_ENTRY Palette, ULONG ColorCount);
VOID VideoFadeOut(ULONG ColorCount);
-
-
-#endif // defined __VIDEO_H
diff --git a/reactos/boot/freeldr/freeldr/include/winldr.h b/reactos/boot/freeldr/freeldr/include/winldr.h
index 8fc5ef8ee3d..ac42a407922 100644
--- a/reactos/boot/freeldr/freeldr/include/winldr.h
+++ b/reactos/boot/freeldr/freeldr/include/winldr.h
@@ -18,9 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __WINLDR_H
-#define __WINLDR_H
-
+#pragma once
///////////////////////////////////////////////////////////////////////////////////////
//
@@ -108,6 +106,3 @@ typedef struct /* Root System Descriptor Pointer */
CHAR reserved [3]; /* reserved field must be 0 */
} RSDP_DESCRIPTOR, *PRSDP_DESCRIPTOR;
#include
-
-
-#endif // defined __WINLDR_H
diff --git a/reactos/boot/freeldr/freeldr/linuxboot.c b/reactos/boot/freeldr/freeldr/linuxboot.c
index e3755c97046..10c2017eb0c 100644
--- a/reactos/boot/freeldr/freeldr/linuxboot.c
+++ b/reactos/boot/freeldr/freeldr/linuxboot.c
@@ -17,10 +17,10 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
+#ifndef _M_ARM
+
#include
#include
-
#ifdef __i386__
#define LINUX_READ_CHUNK_SIZE 0x20000 // Read 128k at a time
@@ -516,3 +516,4 @@ BOOLEAN LinuxReadInitrd(PFILE LinuxInitrdFile)
return TRUE;
}
#endif /* __i386__ */
+#endif
diff --git a/reactos/boot/freeldr/freeldr/mm/meminit.c b/reactos/boot/freeldr/freeldr/mm/meminit.c
index e3e62c802c2..f59a43f7b54 100644
--- a/reactos/boot/freeldr/freeldr/mm/meminit.c
+++ b/reactos/boot/freeldr/freeldr/mm/meminit.c
@@ -102,8 +102,11 @@ VOID MmInitializeHeap(PVOID PageLookupTable)
{
ULONG PagesNeeded;
ULONG HeapStart;
-
+ MEMORY_TYPE Type;
+ PPAGE_LOOKUP_TABLE_ITEM RealPageLookupTable = (PPAGE_LOOKUP_TABLE_ITEM)PageLookupTable;
+
// HACK: Make it so it doesn't overlap kernel space
+ Type = RealPageLookupTable[0x100].PageAllocated;
MmMarkPagesInLookupTable(PageLookupTableAddress, 0x100, 0xFF, LoaderSystemCode);
// Find contigious memory block for HEAP:STACK
@@ -111,7 +114,7 @@ VOID MmInitializeHeap(PVOID PageLookupTable)
HeapStart = MmFindAvailablePages(PageLookupTable, TotalPagesInLookupTable, PagesNeeded, FALSE);
// Unapply the hack
- MmMarkPagesInLookupTable(PageLookupTableAddress, 0x100, 0xFF, LoaderFree);
+ MmMarkPagesInLookupTable(PageLookupTableAddress, 0x100, 0xFF, Type);
if (HeapStart == 0)
{
diff --git a/reactos/boot/freeldr/freeldr/mm/mm.c b/reactos/boot/freeldr/freeldr/mm/mm.c
index c06bb00f632..f4a4c69b095 100644
--- a/reactos/boot/freeldr/freeldr/mm/mm.c
+++ b/reactos/boot/freeldr/freeldr/mm/mm.c
@@ -345,3 +345,54 @@ PPAGE_LOOKUP_TABLE_ITEM MmGetMemoryMap(ULONG *NoEntries)
return RealPageLookupTable;
}
+
+#undef ExAllocatePoolWithTag
+NTKERNELAPI
+PVOID
+NTAPI
+ExAllocatePoolWithTag(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag)
+{
+ return MmHeapAlloc(NumberOfBytes);
+}
+
+#undef ExFreePool
+NTKERNELAPI
+VOID
+NTAPI
+ExFreePool(
+ IN PVOID P)
+{
+ MmHeapFree(P);
+}
+
+PVOID
+NTAPI
+RtlAllocateHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN SIZE_T Size)
+{
+ PVOID ptr;
+
+ ptr = MmHeapAlloc(Size);
+ if (ptr && (Flags & HEAP_ZERO_MEMORY))
+ {
+ RtlZeroMemory(ptr, Size);
+ }
+
+ return ptr;
+}
+
+BOOLEAN
+NTAPI
+RtlFreeHeap(
+ IN PVOID HeapHandle,
+ IN ULONG Flags,
+ IN PVOID HeapBase)
+{
+ MmHeapFree(HeapBase);
+ return TRUE;
+}
diff --git a/reactos/boot/freeldr/freeldr/reactos/arcname.c b/reactos/boot/freeldr/freeldr/reactos/arcname.c
index e46022c6c6b..3ca69fadb51 100644
--- a/reactos/boot/freeldr/freeldr/reactos/arcname.c
+++ b/reactos/boot/freeldr/freeldr/reactos/arcname.c
@@ -104,6 +104,62 @@ BOOLEAN DissectArcPath(CHAR *ArcPath, CHAR *BootPath, ULONG* BootDrive, ULONG* B
return TRUE;
}
+/* PathSyntax: scsi() = 0, multi() = 1, ramdisk() = 2 */
+BOOLEAN
+DissectArcPath2(
+ IN CHAR* ArcPath,
+ OUT ULONG* x,
+ OUT ULONG* y,
+ OUT ULONG* z,
+ OUT ULONG* Partition,
+ OUT ULONG *PathSyntax)
+{
+ /* Detect ramdisk() */
+ if (_strnicmp(ArcPath, "ramdisk(0)", 10) == 0)
+ {
+ *x = *y = *z = 0;
+ *Partition = 1;
+ *PathSyntax = 2;
+ return TRUE;
+ }
+ /* Detect scsi()disk()rdisk()partition() */
+ else if (sscanf(ArcPath, "scsi(%lu)disk(%lu)rdisk(%lu)partition(%lu)", x, y, z, Partition) == 4)
+ {
+ *PathSyntax = 0;
+ return TRUE;
+ }
+ /* Detect scsi()cdrom()fdisk() */
+ else if (sscanf(ArcPath, "scsi(%lu)cdrom(%lu)fdisk(%lu)", x, y, z) == 3)
+ {
+ *Partition = 0;
+ *PathSyntax = 0;
+ return TRUE;
+ }
+ /* Detect multi()disk()rdisk()partition() */
+ else if (sscanf(ArcPath, "multi(%lu)disk(%lu)rdisk(%lu)partition(%lu)", x, y, z, Partition) == 4)
+ {
+ *PathSyntax = 1;
+ return TRUE;
+ }
+ /* Detect multi()disk()cdrom() */
+ else if (sscanf(ArcPath, "multi(%lu)disk(%lu)cdrom(%lu)", x, y, z) == 3)
+ {
+ *Partition = 1;
+ *PathSyntax = 1;
+ return TRUE;
+ }
+ /* Detect multi()disk()fdisk() */
+ else if (sscanf(ArcPath, "multi(%lu)disk(%lu)fdisk(%lu)", x, y, z) == 3)
+ {
+ *Partition = 1;
+ *PathSyntax = 1;
+ return TRUE;
+ }
+
+ /* Unknown syntax */
+ return FALSE;
+}
+
VOID ConstructArcPath(PCHAR ArcPath, PCHAR SystemFolder, ULONG Disk, ULONG Partition)
{
char tmp[50];
diff --git a/reactos/boot/freeldr/freeldr/reactos/imageldr.c b/reactos/boot/freeldr/freeldr/reactos/imageldr.c
index 1e50115c83f..296e3afc10a 100644
--- a/reactos/boot/freeldr/freeldr/reactos/imageldr.c
+++ b/reactos/boot/freeldr/freeldr/reactos/imageldr.c
@@ -1,3 +1,4 @@
+#ifndef _M_ARM
#include
#include
@@ -780,5 +781,5 @@ FrLdrMapImage(IN PFILE Image,
/* Return the final mapped address */
return LoadBase;
}
-
+#endif
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/reactos/reactos.c b/reactos/boot/freeldr/freeldr/reactos/reactos.c
index 0700dca676e..12c8c6647e4 100644
--- a/reactos/boot/freeldr/freeldr/reactos/reactos.c
+++ b/reactos/boot/freeldr/freeldr/reactos/reactos.c
@@ -18,6 +18,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifndef _M_ARM
#include
#include
@@ -889,6 +890,7 @@ LoadAndBootReactOS(PCSTR OperatingSystemName)
* Load boot drivers
*/
FrLdrLoadBootDrivers(szBootPath, 40);
+ UiDrawProgressBarCenter(100, 100, szLoadingMsg);
//UiUnInitialize("Booting ReactOS...");
//
@@ -901,5 +903,6 @@ LoadAndBootReactOS(PCSTR OperatingSystemName)
//
FrLdrStartup(0x2badb002);
}
+#endif
/* EOF */
diff --git a/reactos/boot/freeldr/freeldr/setupldr.rbuild b/reactos/boot/freeldr/freeldr/setupldr.rbuild
index 20d0c745430..0a352f48602 100644
--- a/reactos/boot/freeldr/freeldr/setupldr.rbuild
+++ b/reactos/boot/freeldr/freeldr/setupldr.rbuild
@@ -11,6 +11,7 @@
cmlib
rtl
libcntpr
+ mini_hal
-nostartfiles
-nostdlib
diff --git a/reactos/boot/freeldr/freeldr/ui/directui.c b/reactos/boot/freeldr/freeldr/ui/directui.c
new file mode 100644
index 00000000000..2a9db377bd6
--- /dev/null
+++ b/reactos/boot/freeldr/freeldr/ui/directui.c
@@ -0,0 +1,574 @@
+/*
+ * PROJECT: ReactOS Boot Loader
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: boot/freeldr/freeldr/ui/directui.c
+ * PURPOSE: FreeLDR UI Routines
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+#ifdef _M_ARM
+
+/* INCLUDES *******************************************************************/
+
+#include
+#include
+
+/* GLOBALS ********************************************************************/
+
+/* FUNCTIONS ******************************************************************/
+
+ULONG UiScreenWidth;
+ULONG UiScreenHeight;
+UCHAR UiMenuFgColor = COLOR_GRAY;
+UCHAR UiMenuBgColor = COLOR_BLACK;
+UCHAR UiTextColor = COLOR_GRAY;
+UCHAR UiSelectedTextColor = COLOR_BLACK;
+UCHAR UiSelectedTextBgColor = COLOR_GRAY;
+CHAR UiTimeText[260] = "Seconds until highlighted choice will be started automatically: ";
+
+INT
+TuiPrintf(const char *Format,
+ ...)
+{
+ int i;
+ int Length;
+ va_list ap;
+ CHAR Buffer[512];
+
+ va_start(ap, Format);
+ Length = _vsnprintf(Buffer, sizeof(Buffer), Format, ap);
+ va_end(ap);
+
+ if (Length == -1) Length = sizeof(Buffer);
+
+ for (i = 0; i < Length; i++)
+ {
+ MachConsPutChar(Buffer[i]);
+ }
+
+ return Length;
+}
+
+BOOLEAN
+UiInitialize(IN BOOLEAN ShowGui)
+{
+ ULONG Depth;
+
+ /* Nothing to do */
+ if (!ShowGui) return TRUE;
+
+ /* Set mode and query size */
+ MachVideoSetDisplayMode(NULL, TRUE);
+ MachVideoGetDisplaySize(&UiScreenWidth, &UiScreenHeight, &Depth);
+ return TRUE;
+}
+
+VOID
+UiUnInitialize(IN PCSTR BootText)
+{
+ /* Nothing to do */
+ return;
+}
+
+VOID
+UiDrawBackdrop(VOID)
+{
+ /* Clear the screen */
+ MachVideoClearScreen(ATTR(COLOR_WHITE, COLOR_BLACK));
+}
+
+VOID
+UiDrawText(IN ULONG X,
+ IN ULONG Y,
+ IN PCSTR Text,
+ IN UCHAR Attr)
+{
+ ULONG i, j;
+
+ /* Draw the text character by character, but don't exceed the width */
+ for (i = X, j = 0; Text[j] && i < UiScreenWidth; i++, j++)
+ {
+ /* Write the character */
+ MachVideoPutChar(Text[j], Attr, i, Y);
+ }
+}
+
+VOID
+UiDrawCenteredText(IN ULONG Left,
+ IN ULONG Top,
+ IN ULONG Right,
+ IN ULONG Bottom,
+ IN PCSTR TextString,
+ IN UCHAR Attr)
+{
+ ULONG TextLength, BoxWidth, BoxHeight, LineBreakCount, Index, LastIndex;
+ ULONG RealLeft, RealTop, X, Y;
+ CHAR Temp[2];
+
+ /* Query text length */
+ TextLength = strlen(TextString);
+
+ /* Count the new lines and the box width */
+ LineBreakCount = 0;
+ BoxWidth = 0;
+ LastIndex = 0;
+ for (Index=0; Index < TextLength; Index++)
+ {
+ /* Scan for new lines */
+ if (TextString[Index] == '\n')
+ {
+ /* Remember the new line */
+ LastIndex = Index;
+ LineBreakCount++;
+ }
+ else
+ {
+ /* Check for new larger box width */
+ if ((Index - LastIndex) > BoxWidth)
+ {
+ /* Update it */
+ BoxWidth = (Index - LastIndex);
+ }
+ }
+ }
+
+ /* Base the box height on the number of lines */
+ BoxHeight = LineBreakCount + 1;
+
+ /* Create the centered coordinates */
+ RealLeft = (((Right - Left) - BoxWidth) / 2) + Left;
+ RealTop = (((Bottom - Top) - BoxHeight) / 2) + Top;
+
+ /* Now go for a second scan */
+ LastIndex = 0;
+ for (Index=0; Index < TextLength; Index++)
+ {
+ /* Look for new lines again */
+ if (TextString[Index] == '\n')
+ {
+ /* Update where the text should start */
+ RealTop++;
+ LastIndex = 0;
+ }
+ else
+ {
+ /* We've got a line of text to print, do it */
+ X = RealLeft + LastIndex;
+ Y = RealTop;
+ LastIndex++;
+ Temp[0] = TextString[Index];
+ Temp[1] = 0;
+ UiDrawText(X, Y, Temp, Attr);
+ }
+ }
+}
+
+VOID
+UiDrawStatusText(IN PCSTR StatusText)
+{
+ return;
+}
+
+VOID
+UiInfoBox(IN PCSTR MessageText)
+{
+ TuiPrintf(MessageText);
+}
+
+VOID
+UiMessageBox(IN PCSTR MessageText)
+{
+ TuiPrintf(MessageText);
+}
+
+VOID
+UiMessageBoxCritical(IN PCSTR MessageText)
+{
+ TuiPrintf(MessageText);
+}
+
+VOID
+UiDrawProgressBarCenter(IN ULONG Position,
+ IN ULONG Range,
+ IN PCHAR ProgressText)
+{
+ ULONG Left, Top, Right, Bottom, Width, Height;
+
+ /* Build the coordinates and sizes */
+ Height = 2;
+ Width = UiScreenWidth;
+ Left = 0;
+ Right = (Left + Width) - 1;
+ Top = UiScreenHeight - Height - 4;
+ Bottom = Top + Height + 1;
+
+ /* Draw the progress bar */
+ UiDrawProgressBar(Left, Top, Right, Bottom, Position, Range, ProgressText);
+}
+
+VOID
+UiDrawProgressBar(IN ULONG Left,
+ IN ULONG Top,
+ IN ULONG Right,
+ IN ULONG Bottom,
+ IN ULONG Position,
+ IN ULONG Range,
+ IN PCHAR ProgressText)
+{
+ ULONG i, ProgressBarWidth;
+
+ /* Calculate the width of the bar proper */
+ ProgressBarWidth = (Right - Left) - 3;
+
+ /* First make sure the progress bar text fits */
+ UiTruncateStringEllipsis(ProgressText, ProgressBarWidth - 4);
+ if (Position > Range) Position = Range;
+
+ /* Draw the "Loading..." text */
+ UiDrawCenteredText(Left + 2, Top + 1, Right - 2, Top + 1, ProgressText, ATTR(7, 0));
+
+ /* Draw the percent complete */
+ for (i = 0; i < (Position * ProgressBarWidth) / Range; i++)
+ {
+ /* Use the fill character */
+ UiDrawText(Left + 2 + i, Top + 2, "\xDB", ATTR(UiTextColor, UiMenuBgColor));
+ }
+}
+
+VOID
+UiShowMessageBoxesInSection(IN PCSTR SectionName)
+{
+ return;
+}
+
+VOID
+UiTruncateStringEllipsis(IN PCHAR StringText,
+ IN ULONG MaxChars)
+{
+ /* If it's too large, just add some ellipsis past the maximum */
+ if (strlen(StringText) > MaxChars) strcpy(&StringText[MaxChars - 3], "...");
+}
+
+VOID
+NTAPI
+UiDrawMenuBox(IN PUI_MENU_INFO MenuInfo)
+{
+ CHAR MenuLineText[80], TempString[80];
+ ULONG i;
+
+ /* If there is a timeout draw the time remaining */
+ if (MenuInfo->MenuTimeRemaining >= 0)
+ {
+ /* Copy the integral time text string, and remove the last 2 chars */
+ strcpy(TempString, UiTimeText);
+ i = strlen(TempString);
+ TempString[i - 2] = 0;
+
+ /* Display the first part of the string and the remaining time */
+ strcpy(MenuLineText, TempString);
+ _itoa(MenuInfo->MenuTimeRemaining, TempString, 10);
+ strcat(MenuLineText, TempString);
+
+ /* Add the last 2 chars */
+ strcat(MenuLineText, &UiTimeText[i - 2]);
+
+ /* Display under the menu directly */
+ UiDrawText(0,
+ MenuInfo->Bottom + 3,
+ MenuLineText,
+ ATTR(UiMenuFgColor, UiMenuBgColor));
+ }
+ else
+ {
+ /* Erase the timeout string with spaces, and 0-terminate for sure */
+ for (i=0; iBottom + 3,
+ MenuLineText,
+ ATTR(UiMenuFgColor, UiMenuBgColor));
+ }
+
+ /* Loop each item */
+ for (i = 0; i < MenuInfo->MenuItemCount; i++)
+ {
+ /* Check if it's a separator */
+ if (!(_stricmp(MenuInfo->MenuItemList[i], "SEPARATOR")))
+ {
+ /* Draw the separator line */
+ UiDrawText(MenuInfo->Left,
+ MenuInfo->Top + i + 1,
+ "\xC7",
+ ATTR(UiMenuFgColor, UiMenuBgColor));
+ UiDrawText(MenuInfo->Right,
+ MenuInfo->Top + i + 1,
+ "\xB6",
+ ATTR(UiMenuFgColor, UiMenuBgColor));
+ }
+ }
+}
+
+VOID
+NTAPI
+UiDrawMenuItem(IN PUI_MENU_INFO MenuInfo,
+ IN ULONG MenuItemNumber)
+{
+ CHAR MenuLineText[80];
+ UCHAR Attribute = ATTR(UiTextColor, UiMenuBgColor);
+
+ /* Simply left-align it */
+ MenuLineText[0] = '\0';
+ strcat(MenuLineText, " ");
+
+ /* Now append the text string */
+ strcat(MenuLineText, MenuInfo->MenuItemList[MenuItemNumber]);
+
+ /* If it is a separator */
+ if (!(_stricmp(MenuInfo->MenuItemList[MenuItemNumber], "SEPARATOR")))
+ {
+ /* Make it a separator line and use menu colors */
+ memset(MenuLineText, 0, 80);
+ memset(MenuLineText, 0xC4, (MenuInfo->Right - MenuInfo->Left - 1));
+ Attribute = ATTR(UiMenuFgColor, UiMenuBgColor);
+ }
+ else if (MenuItemNumber == MenuInfo->SelectedMenuItem)
+ {
+ /* If this is the selected item, use the selected colors */
+ Attribute = ATTR(UiSelectedTextColor, UiSelectedTextBgColor);
+ }
+
+ /* Draw the item */
+ UiDrawText(MenuInfo->Left + 1,
+ MenuInfo->Top + 1 + MenuItemNumber,
+ MenuLineText,
+ Attribute);
+}
+
+VOID
+UiDrawMenu(IN PUI_MENU_INFO MenuInfo)
+{
+ ULONG i;
+
+ /* No GUI status bar text, just minimal text. first to tell the user to choose */
+ UiDrawText(0,
+ MenuInfo->Top - 2,
+ "Please select the operating system to start:",
+ ATTR(UiMenuFgColor, UiMenuBgColor));
+
+ /* Now tell him how to choose */
+ UiDrawText(0,
+ MenuInfo->Bottom + 1,
+ "Use the up and down arrow keys to move the highlight to "
+ "your choice.",
+ ATTR(UiMenuFgColor, UiMenuBgColor));
+ UiDrawText(0,
+ MenuInfo->Bottom + 2,
+ "Press ENTER to choose.",
+ ATTR(UiMenuFgColor, UiMenuBgColor));
+
+ /* And offer F8 options */
+ UiDrawText(0,
+ UiScreenHeight - 4,
+ "For troubleshooting and advanced startup options for "
+ "ReactOS, press F8.",
+ ATTR(UiMenuFgColor, UiMenuBgColor));
+
+ /* Draw the menu box */
+ UiDrawMenuBox(MenuInfo);
+
+ /* Draw each line of the menu */
+ for (i = 0; i < MenuInfo->MenuItemCount; i++) UiDrawMenuItem(MenuInfo, i);
+}
+
+ULONG
+NTAPI
+UiProcessMenuKeyboardEvent(IN PUI_MENU_INFO MenuInfo,
+ IN UiMenuKeyPressFilterCallback KeyPressFilter)
+{
+ ULONG KeyEvent = 0, Selected, Count;
+
+ /* Check for a keypress */
+ if (MachConsKbHit())
+ {
+ /* Check if the timeout is not already complete */
+ if (MenuInfo->MenuTimeRemaining != -1)
+ {
+ //
+ // Cancel it and remove it
+ //
+ MenuInfo->MenuTimeRemaining = -1;
+ UiDrawMenuBox(MenuInfo);
+ }
+
+ /* Get the key */
+ KeyEvent = MachConsGetCh();
+
+ /* Is it extended? Then get the extended key */
+ if (!KeyEvent) KeyEvent = MachConsGetCh();
+
+ /* Call the supplied key filter callback function to see if it is going to handle this keypress. */
+ if ((KeyPressFilter) && (KeyPressFilter(KeyEvent)))
+ {
+ /* It processed the key character, so redraw and exit */
+ UiDrawMenu(MenuInfo);
+ return 0;
+ }
+
+ /* Process the key */
+ if ((KeyEvent == KEY_UP) || (KeyEvent == KEY_DOWN))
+ {
+ /* Get the current selected item and count */
+ Selected = MenuInfo->SelectedMenuItem;
+ Count = MenuInfo->MenuItemCount - 1;
+
+ /* Check if this was a key up and there's a selected menu item */
+ if ((KeyEvent == KEY_UP) && (Selected))
+ {
+ /* Update the menu (Deselect previous item) */
+ MenuInfo->SelectedMenuItem--;
+ UiDrawMenuItem(MenuInfo, Selected);
+ Selected--;
+
+ /* Skip past any separators */
+ if ((Selected) &&
+ !(_stricmp(MenuInfo->MenuItemList[Selected], "SEPARATOR")))
+ {
+ MenuInfo->SelectedMenuItem--;
+ }
+ }
+ else if ((KeyEvent == KEY_DOWN) && (Selected < Count))
+ {
+ /* Update the menu (deselect previous item) */
+ MenuInfo->SelectedMenuItem++;
+ UiDrawMenuItem(MenuInfo, Selected);
+ Selected++;
+
+ /* Skip past any separators */
+ if ((Selected < Count) &&
+ !(_stricmp(MenuInfo->MenuItemList[Selected], "SEPARATOR")))
+ {
+ MenuInfo->SelectedMenuItem++;
+ }
+ }
+
+ /* Select new item and update video buffer */
+ UiDrawMenuItem(MenuInfo, MenuInfo->SelectedMenuItem);
+ }
+ }
+
+ /* Return the pressed key */
+ return KeyEvent;
+}
+
+VOID
+NTAPI
+UiCalcMenuBoxSize(IN PUI_MENU_INFO MenuInfo)
+{
+ ULONG i, Width = 0, Height, Length;
+
+ /* Height is the menu item count plus 2 (top border & bottom border) */
+ Height = MenuInfo->MenuItemCount + 2;
+ Height -= 1; // Height is zero-based
+
+ /* Loop every item */
+ for (i = 0; i < MenuInfo->MenuItemCount; i++)
+ {
+ /* Get the string length and make it become the new width if necessary */
+ Length = strlen(MenuInfo->MenuItemList[i]);
+ if (Length > Width) Width = Length;
+ }
+
+ /* Allow room for left & right borders, plus 8 spaces on each side */
+ Width += 18;
+
+ /* Put the menu in the default left-corner position */
+ MenuInfo->Left = -1;
+ MenuInfo->Top = 4;
+
+ /* The other margins are the same */
+ MenuInfo->Right = (MenuInfo->Left) + Width;
+ MenuInfo->Bottom = (MenuInfo->Top) + Height;
+}
+
+BOOLEAN
+UiDisplayMenu(IN PCSTR MenuItemList[],
+ IN ULONG MenuItemCount,
+ IN ULONG DefaultMenuItem,
+ IN LONG MenuTimeOut,
+ OUT PULONG SelectedMenuItem,
+ IN BOOLEAN CanEscape,
+ IN UiMenuKeyPressFilterCallback KeyPressFilter)
+{
+ UI_MENU_INFO MenuInformation;
+ ULONG LastClockSecond;
+ ULONG CurrentClockSecond;
+ ULONG KeyPress;
+
+ /* Check if there's no timeout */
+ if (!MenuTimeOut)
+ {
+ /* Return the default selected item */
+ if (SelectedMenuItem) *SelectedMenuItem = DefaultMenuItem;
+ return TRUE;
+ }
+
+ /* Setup the MENU_INFO structure */
+ MenuInformation.MenuItemList = MenuItemList;
+ MenuInformation.MenuItemCount = MenuItemCount;
+ MenuInformation.MenuTimeRemaining = MenuTimeOut;
+ MenuInformation.SelectedMenuItem = DefaultMenuItem;
+
+ /* Calculate the size of the menu box */
+ UiCalcMenuBoxSize(&MenuInformation);
+
+ /* Draw the menu */
+ UiDrawMenu(&MenuInformation);
+
+ /* Get the current second of time */
+ LastClockSecond = ArcGetTime()->Second;
+
+ /* Process keys */
+ while (TRUE)
+ {
+ /* Process key presses */
+ KeyPress = UiProcessMenuKeyboardEvent(&MenuInformation,
+ KeyPressFilter);
+
+ /* Check for ENTER or ESC */
+ if (KeyPress == KEY_ENTER) break;
+ if (CanEscape && KeyPress == KEY_ESC) return FALSE;
+
+ /* Check if there is a countdown */
+ if (MenuInformation.MenuTimeRemaining)
+ {
+ /* Get the updated time, seconds only */
+ CurrentClockSecond = ArcGetTime()->Second;
+
+ /* Check if more then a second has now elapsed */
+ if (CurrentClockSecond != LastClockSecond)
+ {
+ /* Update the time information */
+ LastClockSecond = CurrentClockSecond;
+ MenuInformation.MenuTimeRemaining--;
+
+ /* Update the menu */
+ UiDrawMenuBox(&MenuInformation);
+ }
+ }
+ else
+ {
+ /* A time out occurred, exit this loop and return default OS */
+ break;
+ }
+ }
+
+ /* Return the selected item */
+ if (SelectedMenuItem) *SelectedMenuItem = MenuInformation.SelectedMenuItem;
+ return TRUE;
+}
+
+#endif
diff --git a/reactos/boot/freeldr/freeldr/ui/gui.c b/reactos/boot/freeldr/freeldr/ui/gui.c
index e188ecd9a97..56b0faa7641 100644
--- a/reactos/boot/freeldr/freeldr/ui/gui.c
+++ b/reactos/boot/freeldr/freeldr/ui/gui.c
@@ -17,6 +17,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
+#ifndef _M_ARM
#include
VOID GuiDrawBackdrop(VOID)
@@ -103,3 +104,4 @@ const UIVTBL GuiVtbl =
NULL, NULL, NULL, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
+#endif
diff --git a/reactos/boot/freeldr/freeldr/ui/minitui.c b/reactos/boot/freeldr/freeldr/ui/minitui.c
index bbc36a82dd8..adaa68c777d 100644
--- a/reactos/boot/freeldr/freeldr/ui/minitui.c
+++ b/reactos/boot/freeldr/freeldr/ui/minitui.c
@@ -6,7 +6,7 @@
* PROGRAMMERS: Brian Palmer
* Herv Poussineau
*/
-
+#ifndef _M_ARM
#include
VOID MiniTuiDrawBackdrop(VOID)
@@ -154,3 +154,4 @@ const UIVTBL MiniTuiVtbl =
TuiDisplayMenu,
MiniTuiDrawMenu,
};
+#endif
diff --git a/reactos/boot/freeldr/freeldr/ui/noui.c b/reactos/boot/freeldr/freeldr/ui/noui.c
index a52c81cf45c..433ddb73387 100644
--- a/reactos/boot/freeldr/freeldr/ui/noui.c
+++ b/reactos/boot/freeldr/freeldr/ui/noui.c
@@ -5,7 +5,7 @@
* PURPOSE: No Text UI interface
* PROGRAMMERS: Herv Poussineau
*/
-
+#ifndef _M_ARM
#include
BOOLEAN NoUiInitialize(VOID)
@@ -118,3 +118,4 @@ BOOLEAN NoUiDisplayMenu(PCSTR MenuItemList[], ULONG MenuItemCount, ULONG Default
VOID NoUiDrawMenu(PUI_MENU_INFO MenuInfo)
{
}
+#endif
diff --git a/reactos/boot/freeldr/freeldr/ui/tui.c b/reactos/boot/freeldr/freeldr/ui/tui.c
index d0016f463a8..91356d28122 100644
--- a/reactos/boot/freeldr/freeldr/ui/tui.c
+++ b/reactos/boot/freeldr/freeldr/ui/tui.c
@@ -16,7 +16,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
+#ifndef _M_ARM
#include
PVOID TextVideoBuffer = NULL;
@@ -325,13 +325,8 @@ VOID TuiDrawText(ULONG X, ULONG Y, PCSTR Text, UCHAR Attr)
// Draw the text
for (i=X, j=0; Text[j] && i
/* FUNCTIONS *****************************************************************/
@@ -530,3 +530,4 @@ TuiProcessMenuKeyboardEvent(PUI_MENU_INFO MenuInfo,
//
return KeyEvent;
}
+#endif
diff --git a/reactos/boot/freeldr/freeldr/ui/ui.c b/reactos/boot/freeldr/freeldr/ui/ui.c
index 4864f0adb40..9a6a237f27e 100644
--- a/reactos/boot/freeldr/freeldr/ui/ui.c
+++ b/reactos/boot/freeldr/freeldr/ui/ui.c
@@ -16,7 +16,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
+#ifndef _M_ARM
#include
#include
@@ -496,3 +496,4 @@ BOOLEAN UiEditBox(PCSTR MessageText, PCHAR EditTextBuffer, ULONG Length)
{
return UiVtbl.EditBox(MessageText, EditTextBuffer, Length);
}
+#endif
diff --git a/reactos/boot/freeldr/freeldr/video/fade.c b/reactos/boot/freeldr/freeldr/video/fade.c
index 9839f2afaab..4cfd4352d46 100644
--- a/reactos/boot/freeldr/freeldr/video/fade.c
+++ b/reactos/boot/freeldr/freeldr/video/fade.c
@@ -16,7 +16,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
+#ifndef _M_ARM
#include
#define RGB_MAX 64
@@ -130,3 +130,4 @@ VOID VideoFadeOut(ULONG ColorCount)
}
}
}
+#endif
diff --git a/reactos/boot/freeldr/freeldr/video/palette.c b/reactos/boot/freeldr/freeldr/video/palette.c
index 8b1f469531c..c631648381a 100644
--- a/reactos/boot/freeldr/freeldr/video/palette.c
+++ b/reactos/boot/freeldr/freeldr/video/palette.c
@@ -16,9 +16,8 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
+#ifndef _M_ARM
#include
-
VOID VideoSavePaletteState(PPALETTE_ENTRY Palette, ULONG ColorCount)
{
ULONG Color;
@@ -40,3 +39,4 @@ VOID VideoRestorePaletteState(PPALETTE_ENTRY Palette, ULONG ColorCount)
MachVideoSetPaletteColor(Color, Palette[Color].Red, Palette[Color].Green, Palette[Color].Blue);
}
}
+#endif
diff --git a/reactos/boot/freeldr/freeldr/video/video.c b/reactos/boot/freeldr/freeldr/video/video.c
index 0f9fc9a14eb..5401d81320e 100644
--- a/reactos/boot/freeldr/freeldr/video/video.c
+++ b/reactos/boot/freeldr/freeldr/video/video.c
@@ -16,7 +16,7 @@
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-
+#ifndef _M_ARM
#include
PVOID VideoOffScreenBuffer = NULL;
@@ -42,3 +42,4 @@ VOID VideoCopyOffScreenBufferToVRAM(VOID)
{
MachVideoCopyOffScreenBufferToVRAM(VideoOffScreenBuffer);
}
+#endif
diff --git a/reactos/boot/freeldr/freeldr/windows/arm/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/arm/wlmemory.c
new file mode 100644
index 00000000000..660656a5722
--- /dev/null
+++ b/reactos/boot/freeldr/freeldr/windows/arm/wlmemory.c
@@ -0,0 +1,256 @@
+/*
+ * PROJECT: ReactOS Boot Loader
+ * LICENSE: BSD - See COPYING.ARM in the top level directory
+ * FILE: boot/freeldr/arch/arm/loader.c
+ * PURPOSE: ARM Kernel Loader
+ * PROGRAMMERS: ReactOS Portable Systems Group
+ */
+
+/* INCLUDES ***************************************************************/
+
+#include
+#include
+#include
+#include
+
+#define PFN_SHIFT 12
+#define LARGE_PFN_SHIFT 20
+
+#define PTE_BASE 0xC0000000
+#define PDE_BASE 0xC0400000
+#define PDR_BASE 0xFFD00000
+#define MMIO_BASE 0x10000000
+#define VECTOR_BASE 0xFFFF0000
+
+#define LowMemPageTableIndex 0
+#define KernelPageTableIndex (KSEG0_BASE >> PDE_SHIFT)
+#define StartupPtePageTableIndex (PTE_BASE >> PDE_SHIFT)
+#define StartupPdePageTableIndex (PDE_BASE >> PDE_SHIFT)
+#define MmioPageTableIndex (MMIO_BASE >> PDE_SHIFT)
+#define PdrPageTableIndex (PDR_BASE >> PDE_SHIFT)
+#define VectorPageTableIndex (VECTOR_BASE >> PDE_SHIFT)
+
+/* Converts a Physical Address into a Page Frame Number */
+#define PaToPfn(p) ((p) >> PFN_SHIFT)
+#define PaToLargePfn(p) ((p) >> LARGE_PFN_SHIFT)
+#define PaPtrToPfn(p) (((ULONG_PTR)(p)) >> PFN_SHIFT)
+
+/* Converts a Physical Address into a Coarse Page Table PFN */
+#define PaPtrToPdePfn(p) (((ULONG_PTR)(p)) >> CPT_SHIFT)
+
+typedef struct _KPDR_PAGE
+{
+ PAGE_DIRECTORY_ARM PageDir; // 0xC0400000 [0xFFD00000]
+ CHAR HyperSpace[233 * PAGE_SIZE]; // 0xC0404000 [0xFFD04000]
+ PAGE_TABLE_ARM KernelPageTable[3]; // 0xC04ED000 [0xFFDED000]
+ CHAR SharedData[PAGE_SIZE]; // 0xC04F0000 [0xFFDF0000]
+ CHAR KernelStack[KERNEL_STACK_SIZE]; // 0xC04F1000 [0xFFDF1000]
+ CHAR PanicStack[KERNEL_STACK_SIZE]; // 0xC04F4000 [0xFFDF4000]
+ CHAR InterruptStack[KERNEL_STACK_SIZE]; // 0xC04F7000 [0xFFDF7000]
+ CHAR InitialProcess[PAGE_SIZE]; // 0xC04FA000 [0xFFDFA000]
+ CHAR InitialThread[PAGE_SIZE]; // 0xC04FB000 [0xFFDFB000]
+ CHAR Prcb[PAGE_SIZE]; // 0xC04FC000 [0xFFDFC000]
+ PAGE_TABLE_ARM PageDirPageTable; // 0xC04FD000 [0xFFDFD000]
+ PAGE_TABLE_ARM VectorPageTable; // 0xC04FE000 [0xFFDFE000]
+ CHAR Pcr[PAGE_SIZE]; // 0xC04FF000 [0xFFDFF000]
+} KPDR_PAGE, *PKPDR_PAGE;
+
+C_ASSERT(sizeof(KPDR_PAGE) == (1 * 1024 * 1024));
+
+HARDWARE_PTE_ARMV6 TempPte;
+HARDWARE_LARGE_PTE_ARMV6 TempLargePte;
+HARDWARE_PDE_ARMV6 TempPde;
+PKPDR_PAGE PdrPage;
+
+/* FUNCTIONS **************************************************************/
+
+BOOLEAN
+MempSetupPaging(IN ULONG StartPage,
+ IN ULONG NumberOfPages)
+{
+ return TRUE;
+}
+
+VOID
+MempUnmapPage(IN ULONG Page)
+{
+ return;
+}
+
+VOID
+MempDump(VOID)
+{
+ return;
+}
+
+BOOLEAN
+WinLdrMapSpecialPages(ULONG PcrBasePage)
+{
+ ULONG i;
+ PHARDWARE_PTE_ARMV6 PointerPte;
+ PHARDWARE_PDE_ARMV6 PointerPde;
+ PHARDWARE_LARGE_PTE_ARMV6 LargePte;
+ PFN_NUMBER Pfn;
+
+ /* Setup the Startup PDE */
+ LargePte = &PdrPage->PageDir.Pte[StartupPdePageTableIndex];
+ TempLargePte.PageFrameNumber = PaToLargePfn((ULONG_PTR)&PdrPage->PageDir);
+ *LargePte = TempLargePte;
+
+ /* Map-in the PDR */
+ LargePte = &PdrPage->PageDir.Pte[PdrPageTableIndex];
+ *LargePte = TempLargePte;
+
+ /* After this point, any MiAddressToPde is guaranteed not to fault */
+
+ /*
+ * Link them in the Startup PDE.
+ * Note these are the entries in the PD at (MiAddressToPde(PTE_BASE)).
+ */
+ PointerPde = &PdrPage->PageDir.Pde[StartupPtePageTableIndex];
+ Pfn = PaPtrToPdePfn(&PdrPage->PageDirPageTable);
+ for (i = 0; i < 4; i++)
+ {
+ TempPde.PageFrameNumber = Pfn++;
+ *PointerPde++ = TempPde;
+ }
+
+ /*
+ * Now map these page tables in PTE space (MiAddressToPte(PTE_BASE)).
+ * Note that they all live on a single page, since each is 1KB.
+ */
+ PointerPte = &PdrPage->PageDirPageTable.Pte[0x300];
+ TempPte.PageFrameNumber = PaPtrToPfn(&PdrPage->PageDirPageTable);
+ *PointerPte = TempPte;
+
+ /*
+ * After this point, MiAddressToPte((PDE_BASE) to MiAddressToPte(PDE_TOP))
+ * is guaranteed not to fault.
+ * Any subsequent page allocation will first need its page table created
+ * and mapped in the PTE_BASE first, then the page table itself will be
+ * editable through its flat PTE address.
+ */
+
+ /* Setup the Vector PDE */
+ PointerPde = &PdrPage->PageDir.Pde[VectorPageTableIndex];
+ TempPde.PageFrameNumber = PaPtrToPdePfn(&PdrPage->VectorPageTable);
+ *PointerPde = TempPde;
+
+ /* Setup the Vector PTEs */
+ PointerPte = &PdrPage->VectorPageTable.Pte[0xF0];
+ TempPte.PageFrameNumber = 0;
+ *PointerPte = TempPte;
+
+ /* TODO: Map in the kernel CPTs */
+ return TRUE;
+}
+
+VOID
+WinLdrSetupForNt(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
+ IN PVOID *GdtIdt,
+ IN ULONG *PcrBasePage,
+ IN ULONG *TssBasePage)
+{
+ PKPDR_PAGE PdrPage = (PVOID)0xFFD00000;
+
+ /* Load cache information */
+ LoaderBlock->u.Arm.FirstLevelDcacheSize = FirstLevelDcacheSize;
+ LoaderBlock->u.Arm.FirstLevelDcacheFillSize = FirstLevelDcacheFillSize;
+ LoaderBlock->u.Arm.FirstLevelIcacheSize = FirstLevelIcacheSize;
+ LoaderBlock->u.Arm.FirstLevelIcacheFillSize = FirstLevelIcacheFillSize;
+ LoaderBlock->u.Arm.SecondLevelDcacheSize = SecondLevelDcacheSize;
+ LoaderBlock->u.Arm.SecondLevelDcacheFillSize = SecondLevelDcacheFillSize;
+ LoaderBlock->u.Arm.SecondLevelIcacheSize = SecondLevelIcacheSize;
+ LoaderBlock->u.Arm.SecondLevelIcacheFillSize = SecondLevelIcacheSize;
+
+ /* Write initial context information */
+ LoaderBlock->KernelStack = (ULONG_PTR)PdrPage->KernelStack;
+ LoaderBlock->KernelStack += KERNEL_STACK_SIZE;
+ LoaderBlock->u.Arm.PanicStack = (ULONG_PTR)PdrPage->PanicStack;
+ LoaderBlock->u.Arm.PanicStack += KERNEL_STACK_SIZE;
+ LoaderBlock->u.Arm.InterruptStack = (ULONG_PTR)PdrPage->InterruptStack;
+ LoaderBlock->u.Arm.InterruptStack += KERNEL_STACK_SIZE;
+ LoaderBlock->Prcb = (ULONG_PTR)PdrPage->Prcb;
+ LoaderBlock->Process = (ULONG_PTR)PdrPage->InitialProcess;
+ LoaderBlock->Thread = (ULONG_PTR)PdrPage->InitialThread;
+}
+
+BOOLEAN
+MempAllocatePageTables(VOID)
+{
+ ULONG i;
+ PHARDWARE_PTE_ARMV6 PointerPte;
+ PHARDWARE_PDE_ARMV6 PointerPde;
+ PHARDWARE_LARGE_PTE_ARMV6 LargePte;
+ PFN_NUMBER Pfn;
+
+ /* Setup templates */
+ TempPte.Accessed = TempPte.Valid = TempLargePte.LargePage = TempLargePte.Accessed = TempPde.Valid = 1;
+
+ /* Allocate the 1MB "PDR" (Processor Data Region). Must be 1MB aligned */
+ PdrPage = MmAllocateMemoryAtAddress(sizeof(KPDR_PAGE), (PVOID)0x700000, LoaderMemoryData);
+
+ /* Setup the Low Memory PDE as an identity-mapped Large Page (1MB) */
+ LargePte = &PdrPage->PageDir.Pte[LowMemPageTableIndex];
+ *LargePte = TempLargePte;
+
+ /* Setup the MMIO PDE as two identity mapped large pages -- the kernel will blow these away later */
+ LargePte = &PdrPage->PageDir.Pte[MmioPageTableIndex];
+ Pfn = PaToLargePfn(0x10000000);
+ for (i = 0; i < 2; i++)
+ {
+ TempLargePte.PageFrameNumber = Pfn++;
+ *LargePte++ = TempLargePte;
+ }
+
+ /* Setup the Kernel PDEs */
+ PointerPde = &PdrPage->PageDir.Pde[KernelPageTableIndex];
+ Pfn = PaPtrToPdePfn(PdrPage->KernelPageTable);
+ for (i = 0; i < 12; i++)
+ {
+ TempPde.PageFrameNumber = Pfn;
+ *PointerPde++ = TempPde;
+ Pfn++;
+ }
+
+ /* Setup the Kernel PTEs */
+ PointerPte = PdrPage->KernelPageTable[0].Pte;
+ Pfn = 0;
+ for (i = 0; i < 3072; i++)
+ {
+ TempPte.PageFrameNumber = Pfn++;
+ *PointerPte++ = TempPte;
+ }
+
+ /* Done */
+ return TRUE;
+}
+
+VOID
+WinLdrSetProcessorContext(PVOID GdtIdt,
+ IN ULONG Pcr,
+ IN ULONG Tss)
+{
+ ARM_CONTROL_REGISTER ControlRegister;
+ ARM_TTB_REGISTER TtbRegister;
+ ARM_DOMAIN_REGISTER DomainRegister;
+
+ /* Set the TTBR */
+ TtbRegister.AsUlong = (ULONG_PTR)&PdrPage->PageDir;
+ ASSERT(TtbRegister.Reserved == 0);
+ KeArmTranslationTableRegisterSet(TtbRegister);
+
+ /* Disable domains and simply use access bits on PTEs */
+ DomainRegister.AsUlong = 0;
+ DomainRegister.Domain0 = ClientDomain;
+ KeArmDomainRegisterSet(DomainRegister);
+
+ /* Enable ARMv6+ paging (MMU), caches and the access bit */
+ ControlRegister = KeArmControlRegisterGet();
+ ControlRegister.MmuEnabled = TRUE;
+ ControlRegister.ICacheEnabled = TRUE;
+ ControlRegister.DCacheEnabled = TRUE;
+ ControlRegister.ForceAp = TRUE;
+ ControlRegister.ExtendedPageTables = TRUE;
+ KeArmControlRegisterSet(ControlRegister);
+}
diff --git a/reactos/boot/freeldr/freeldr/windows/peloader.c b/reactos/boot/freeldr/freeldr/windows/peloader.c
index 42ca170bb17..fae23d6b90c 100644
--- a/reactos/boot/freeldr/freeldr/windows/peloader.c
+++ b/reactos/boot/freeldr/freeldr/windows/peloader.c
@@ -56,7 +56,7 @@ WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock,
PLDR_DATA_TABLE_ENTRY DataTableEntry;
LIST_ENTRY *ModuleEntry;
- DPRINTM(DPRINT_PELOADER, "WinLdrCheckForLoadedDll: DllName %X, LoadedEntry: %X\n",
+ DPRINTM(DPRINT_PELOADER, "WinLdrCheckForLoadedDll: DllName %s, LoadedEntry: %X\n",
DllName, LoadedEntry);
/* Just go through each entry in the LoadOrderList and compare loaded module's
@@ -277,7 +277,7 @@ WinLdrLoadImage(IN PCHAR FileName,
Status = ArcOpen(FileName, OpenReadOnly, &FileId);
if (Status != ESUCCESS)
{
- UiMessageBox("Can not open the file");
+ //UiMessageBox("Can not open the file");
return FALSE;
}
diff --git a/reactos/boot/freeldr/freeldr/windows/winldr.c b/reactos/boot/freeldr/freeldr/windows/winldr.c
index 4d9651518e9..dc210bd6a6d 100644
--- a/reactos/boot/freeldr/freeldr/windows/winldr.c
+++ b/reactos/boot/freeldr/freeldr/windows/winldr.c
@@ -37,6 +37,7 @@ extern char reactos_arc_strings[32][256];
extern BOOLEAN UseRealHeap;
extern ULONG LoaderPagesSpanned;
+extern BOOLEAN AcpiPresent;
BOOLEAN
WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock,
@@ -196,6 +197,13 @@ WinLdrInitializePhase1(PLOADER_PARAMETER_BLOCK LoaderBlock,
Extension->MinorVersion = VersionToBoot & 0xFF;
Extension->Profile.Status = 2;
+ /* Check if ACPI is present */
+ if (AcpiPresent)
+ {
+ /* See KiRosFrldrLpbToNtLpb for details */
+ Extension->AcpiTable = (PVOID)1;
+ }
+
/* Load drivers database */
strcpy(MiscFiles, BootPath);
strcat(MiscFiles, "AppPatch\\drvmain.sdb");
@@ -224,7 +232,7 @@ WinLdrLoadDeviceDriver(PLOADER_PARAMETER_BLOCK LoaderBlock,
PVOID DriverBase;
// Separate the path to file name and directory path
- sprintf(DriverPath, "%S", FilePath->Buffer);
+ snprintf(DriverPath, sizeof(DriverPath), "%wZ", FilePath);
DriverNamePos = strrchr(DriverPath, '\\');
if (DriverNamePos != NULL)
{
@@ -253,7 +261,7 @@ WinLdrLoadDeviceDriver(PLOADER_PARAMETER_BLOCK LoaderBlock,
}
// It's not loaded, we have to load it
- sprintf(FullPath,"%s%S", BootPath, FilePath->Buffer);
+ snprintf(FullPath, sizeof(FullPath), "%s%wZ", BootPath, FilePath);
Status = WinLdrLoadImage(FullPath, LoaderBootDriver, &DriverBase);
if (!Status)
{
@@ -320,6 +328,7 @@ WinLdrLoadBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock,
// Convert the RegistryPath and DTE addresses to VA since we are not going to use it anymore
BootDriver->RegistryPath.Buffer = PaToVa(BootDriver->RegistryPath.Buffer);
+ BootDriver->FilePath.Buffer = PaToVa(BootDriver->FilePath.Buffer);
BootDriver->LdrEntry = PaToVa(BootDriver->LdrEntry);
NextBd = BootDriver->Link.Flink;
@@ -590,7 +599,7 @@ LoadAndBootWindows(PCSTR OperatingSystemName,
DbgPrint("Heeelooo\n");
/* Save final value of LoaderPagesSpanned */
- LoaderBlock->Extension->LoaderPagesSpanned = LoaderPagesSpanned;
+ LoaderBlockVA->Extension->LoaderPagesSpanned = LoaderPagesSpanned;
DPRINTM(DPRINT_WINDOWS, "Hello from paged mode, KiSystemStartup %p, LoaderBlockVA %p!\n",
KiSystemStartup, LoaderBlockVA);
diff --git a/reactos/boot/freeldr/freeldr/windows/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/wlmemory.c
index 668dea3c33d..bfa68ab904e 100644
--- a/reactos/boot/freeldr/freeldr/windows/wlmemory.c
+++ b/reactos/boot/freeldr/freeldr/windows/wlmemory.c
@@ -198,6 +198,10 @@ MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
}
}
+#ifdef _M_ARM
+#define PKTSS PVOID
+#endif
+
BOOLEAN
WinLdrTurnOnPaging(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock,
ULONG PcrBasePage,
diff --git a/reactos/boot/freeldr/install/install.h b/reactos/boot/freeldr/install/install.h
index beace9228b7..a2c5eff0fb9 100644
--- a/reactos/boot/freeldr/install/install.h
+++ b/reactos/boot/freeldr/install/install.h
@@ -18,7 +18,4 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __INSTALL_H
-#define __INSTALL_H
-
-#endif // defined __INSTALL_H
+#pragma once
diff --git a/reactos/boot/freeldr/install/linux/finstext2.h b/reactos/boot/freeldr/install/linux/finstext2.h
index b4aa6ae9118..12b3ee80a93 100644
--- a/reactos/boot/freeldr/install/linux/finstext2.h
+++ b/reactos/boot/freeldr/install/linux/finstext2.h
@@ -1,6 +1,4 @@
-#ifndef __FINSTEXT2_H
-#define __FINSTEXT2_H
-
+#pragma once
#define PACKED __attribute__((packed))
@@ -28,8 +26,4 @@ typedef struct
unsigned char BootPartition;
unsigned short BootSignature;
-} PACKED EXT2_BOOTCODE, *PEXT2_BOOTCODE;
-
-
-
-#endif // defined __FINSTEXT2_H
\ No newline at end of file
+} PACKED EXT2_BOOTCODE, *PEXT2_BOOTCODE;
\ No newline at end of file
diff --git a/reactos/boot/freeldr/install/volume.h b/reactos/boot/freeldr/install/volume.h
index f173a6a455c..26654fc3009 100644
--- a/reactos/boot/freeldr/install/volume.h
+++ b/reactos/boot/freeldr/install/volume.h
@@ -18,12 +18,9 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
-#ifndef __VOLUME_H
-#define __VOLUME_H
+#pragma once
BOOL OpenVolume(LPCTSTR lpszVolumeName);
void CloseVolume(void);
BOOL ReadVolumeSector(ULONG SectorNumber, PVOID SectorBuffer);
BOOL WriteVolumeSector(ULONG SectorNumber, PVOID SectorBuffer);
-
-#endif // defined __VOLUME_H
diff --git a/reactos/dll/cpl/access/access.h b/reactos/dll/cpl/access/access.h
index 954b0940f68..88c29d2c8c7 100644
--- a/reactos/dll/cpl/access/access.h
+++ b/reactos/dll/cpl/access/access.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_SYSDM_H
-#define __CPL_SYSDM_H
+#pragma once
typedef LONG (CALLBACK *APPLET_INITPROC)(VOID);
@@ -59,6 +58,4 @@ INT_PTR CALLBACK KeyboardPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
INT_PTR CALLBACK MousePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK SoundPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-#endif /* __CPL_SYSDM_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/access/lang/de-DE.rc b/reactos/dll/cpl/access/lang/de-DE.rc
index 3f8de377b94..50fb674e97b 100644
--- a/reactos/dll/cpl/access/lang/de-DE.rc
+++ b/reactos/dll/cpl/access/lang/de-DE.rc
@@ -23,7 +23,7 @@ BEGIN
AUTOCHECKBOX "&Signalfunktion benutzen",IDC_TOGGLE_BOX,PROPSHEETPADDING(2),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
PUSHBUTTON "Ei&nstellungen",IDC_TOGGLE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(20)+2,PROPSHEETPADDING(15),14
- AUTOCHECKBOX "Extra Tastaturhilfe in &Programmen anzeigen ",IDC_KEYBOARD_EXTRA,PROPSHEETPADDING(1),LABELLINE(23)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),14
+ AUTOCHECKBOX "Extra-Tastaturhilfe in &Programmen anzeigen ",IDC_KEYBOARD_EXTRA,PROPSHEETPADDING(1),LABELLINE(23)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),14
END
@@ -75,7 +75,7 @@ CAPTION "Maus"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
GROUPBOX "Tastaturmaus",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
- LTEXT "Aktivieren Sie diese Option, um den Mauszeiger mit dem Nummernpad der Tastatur zu steuern.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
+ LTEXT "Aktivieren Sie diese Option, um den Mauszeiger mit den Nummerntasten der Tastatur zu steuern.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
AUTOCHECKBOX "&Tastaturmaus aktivieren",IDC_MOUSE_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14
PUSHBUTTON "&Einstellungen",IDC_MOUSE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14
END
@@ -112,12 +112,12 @@ CAPTION "Einstellungen f
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Tastenkombination",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
- LTEXT "Drcken Sie fnfmal die Umschalttaste um die Einrastfunktion zu aktivieren.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
+ LTEXT "Drcken Sie fnfmal die Umschalttaste, um die Einrastfunktion zu aktivieren.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
AUTOCHECKBOX "Tastenkombination a&ktivieren",IDC_STICKY_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETPADDING(17)+4,14
GROUPBOX "Optionen",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1)
AUTOCHECKBOX "&Zum Einrasten Feststelltaste zweimal drcken.",IDC_STICKY_LOCK_CHECK,PROPSHEETPADDING(2),LABELLINE(10)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14
- AUTOCHECKBOX "&Einrastfunktion deaktivieren wenn zwei Tasten gedrckt sind.",IDC_STICKY_UNLOCK_CHECK,PROPSHEETPADDING(2),LABELLINE(12),PROPSHEETWIDTH-PROPSHEETPADDING(4),14
+ AUTOCHECKBOX "&Einrastfunktion deaktivieren, wenn zwei Tasten gedrckt sind.",IDC_STICKY_UNLOCK_CHECK,PROPSHEETPADDING(2),LABELLINE(12),PROPSHEETWIDTH-PROPSHEETPADDING(4),14
GROUPBOX "Mitteilungen",-1,PROPSHEETPADDING(1),LABELLINE(15),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1)
AUTOCHECKBOX "&Ausgabe eines Tons wenn die Feststelltaste gedrckt wird.",IDC_STICKY_SOUND_CHECK,PROPSHEETPADDING(2),LABELLINE(16)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14
@@ -130,7 +130,7 @@ END
IDD_FILTERKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Anschlagverzgerung Einstellungen"
+CAPTION "AnschlagverzgerungseEinstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Tastenkombination",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
@@ -150,13 +150,13 @@ BEGIN
AUTOCHECKBOX "Status der Ansc&hlagverzgerung auf dem Bildschirm anzeigen.",IDC_FILTER_STATUS_CHECK,PROPSHEETPADDING(2),LABELLINE(20)+6,PROPSHEETWIDTH-PROPSHEETPADDING(4),10
DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14
- PUSHBUTTON "Abrechen", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14
+ PUSHBUTTON "Abbrechen", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14
END
IDD_TOGGLEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Toggle Keys Einstellungen"
+CAPTION "Toggle-Keys-Einstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Tastenkombination",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
@@ -170,14 +170,14 @@ END
IDD_CONTRASTOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Hoher Konstrast Einstellungen"
+CAPTION "Einstellungen fr hohen Konstrast"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Tastenkombination",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
LTEXT "Die Tastenkombination fr hohen Kontrast ist:\nDrcke .",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3)
AUTOCHECKBOX "&Whle Schnelltaste",IDC_CONTRAST_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14
- GROUPBOX "Hoher Kontrast Farbschema",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1)
+ GROUPBOX "Hoher-Kontrast-Farbschema",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1)
LTEXT "Derzeitiges Farbschema:",-1,PROPSHEETPADDING(2),LABELLINE(10)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1)
COMBOBOX IDC_CONTRAST_COMBO, PROPSHEETPADDING(2), LABELLINE(11)+2, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6),
CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP
@@ -189,7 +189,7 @@ END
IDD_MOUSEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Tastaturmaus Einstellungen"
+CAPTION "Tastaturmaus-Einstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Tastenkombiation",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1)
@@ -223,10 +223,10 @@ END
IDD_BOUNCEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Erweiterte Anschlagverzgerung Einstellungen"
+CAPTION "Einstellungen fr die erweiterte Anschlagverzgerung"
FONT 8, "MS Shell Dlg"
BEGIN
- GROUPBOX "Bounce Keys",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5)
+ GROUPBOX "Tastenanschlge",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5)
LTEXT "&Tastenanschlge igorieren, die schneller wiederholt werden als:",-1,PROPSHEETPADDING(2),LABELLINE(2)+1,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2)
COMBOBOX IDC_BOUNCE_TIME_COMBO, PROPSHEETPADDING(2), LABELLINE(3)+5, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6),
CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP
@@ -241,10 +241,10 @@ END
IDD_REPEATKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Erweiterte Anschlagverzgerung Einstellungen"
+CAPTION "Einstellungen fr die erweiterte Anschlagverzgerung"
FONT 8, "MS Shell Dlg"
BEGIN
- GROUPBOX "Repeat Keys",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(12)
+ GROUPBOX "Tastenwiederholung",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(12)
LTEXT "Tastatureinstellungen in der Systemsteuerung bergehen:",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2)
AUTORADIOBUTTON "&Keine Wiederholung",IDC_REPEAT_NOREPEAT_RADIO,PROPSHEETPADDING(2),LABELLINE(3)+3,78,LABELLINE(1),WS_GROUP
@@ -273,7 +273,7 @@ END
IDD_SERIALKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "SerialKeys Einstellungen"
+CAPTION "SerialKeys-Einstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Serial Keys",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(10)
diff --git a/reactos/dll/cpl/access/resource.h b/reactos/dll/cpl/access/resource.h
index 88f6ffa889e..04ab1183ddf 100644
--- a/reactos/dll/cpl/access/resource.h
+++ b/reactos/dll/cpl/access/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* metrics */
#define PROPSHEETWIDTH 246
@@ -113,6 +112,4 @@
#define IDC_SERIAL_PORT_COMBO 275
#define IDC_SERIAL_BAUD_COMBO 276
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/appwiz/appwiz.h b/reactos/dll/cpl/appwiz/appwiz.h
index c243997817a..8ee2bd4c6b3 100644
--- a/reactos/dll/cpl/appwiz/appwiz.h
+++ b/reactos/dll/cpl/appwiz/appwiz.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_APPWIZ_H
-#define __CPL_APPWIZ_H
+#pragma once
#define COBJMACROS
#include
@@ -41,6 +40,4 @@ NewLinkHere(HWND hwndCPl, UINT uMsg, LPARAM lParam1, LPARAM lParam2);
void ShowLastWin32Error(HWND hWndOwner);
-#endif /* __CPL_APPWIZ_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/appwiz/lang/de-DE.rc b/reactos/dll/cpl/appwiz/lang/de-DE.rc
index fe55301c09f..b2c32d21b94 100644
--- a/reactos/dll/cpl/appwiz/lang/de-DE.rc
+++ b/reactos/dll/cpl/appwiz/lang/de-DE.rc
@@ -43,7 +43,7 @@ END
STRINGTABLE
BEGIN
- IDS_CPLSYSTEMNAME "Programme Hinzufgen/Entfernen"
+ IDS_CPLSYSTEMNAME "Programme hinzufgen/entfernen"
IDS_CPLSYSTEMDESCRIPTION "Installiert Programme und erstellt Verknpfungen."
IDS_CREATE_SHORTCUT "Verknpfung erstellen"
IDS_ERROR_NOT_FOUND "Die Datei %s konnte nicht gefunden werden."
diff --git a/reactos/dll/cpl/appwiz/resource.h b/reactos/dll/cpl/appwiz/resource.h
index e889fafe2f6..b0dda4080cf 100644
--- a/reactos/dll/cpl/appwiz/resource.h
+++ b/reactos/dll/cpl/appwiz/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* metrics */
#define PROPSHEETWIDTH 380
@@ -32,6 +31,4 @@
#define IDC_SHORTCUT_BROWSE 108
#define IDC_SHORTCUT_NAME 109
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/console/lang/de-DE.rc b/reactos/dll/cpl/console/lang/de-DE.rc
index e01dc0ad68c..a6611419d53 100644
--- a/reactos/dll/cpl/console/lang/de-DE.rc
+++ b/reactos/dll/cpl/console/lang/de-DE.rc
@@ -20,7 +20,7 @@ GROUPBOX "Cursorgr
CONTROL "&Klein", IDC_RADIO_SMALL_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 25, 25, 90, 10
CONTROL "&Mittel", IDC_RADIO_MEDIUM_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 25, 40, 90, 10
CONTROL "&Gro", IDC_RADIO_LARGE_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 25, 55, 90, 10
-GROUPBOX "Display Einstellungen", -1, 140, 15, 100, 70, WS_CHILD | WS_VISIBLE | WS_GROUP
+GROUPBOX "Anzeigeeinstellungen", -1, 140, 15, 100, 70, WS_CHILD | WS_VISIBLE | WS_GROUP
CONTROL "&Fenster", IDC_RADIO_DISPLAY_WINDOW, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 150, 35, 70, 10
CONTROL "V&ollbild", IDC_RADIO_DISPLAY_FULL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 150, 50, 70, 10
GROUPBOX "Befehlsspeicher:", -1, 15, 90, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP
@@ -34,7 +34,7 @@ CHECKBOX "&Alte Duplikate l
GROUPBOX "Bearbeitungsoptionen", -1, 140, 90, 100, 70, BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP
-CHECKBOX "&QuickEdit Modus", IDC_CHECK_QUICK_EDIT, 150, 100, 70, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP
+CHECKBOX "&QuickEdit-Modus", IDC_CHECK_QUICK_EDIT, 150, 100, 70, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP
CHECKBOX "&Einfgemodus", IDC_CHECK_INSERT_MODE, 150, 120, 70, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP
END
@@ -53,7 +53,7 @@ LISTBOX IDC_LBOX_TYPE, 10, 120, 110, 50, LBS_DISABLENOSCROLL | WS_VSCROLL
GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 10, 155, 200, 50
CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 165, 95, 35
LTEXT "Jedes Zeichen ist:", -1, 130, 165, 75, 10
-LTEXT "screen pixel breit\nscreen pixel hoch", -1, 140, 180, 65, 20
+LTEXT "Bildschirmpixe breit\nBildschirmpixel hoch", -1, 140, 180, 65, 20
LTEXT "", IDC_FONT_SIZE_X, 125, 180, 10, 10
LTEXT "", IDC_FONT_SIZE_Y, 125, 188, 10, 10
END
@@ -147,5 +147,5 @@ BEGIN
IDS_CPLDESCRIPTION "Konfiguriert die Konsoleneigenschaften."
IDS_APPLY_SHORTCUT_ALL "Modifiziere die &Verknpfung, die das Fenster startete"
IDS_SCREEN_TEXT "C:\ReactOS> dir\nSYSTEM 10-01-99 5:00\nSYSTEM32 10-01-99 5:00"
- IDS_RASTERFONTS "Raster Schriften"
+ IDS_RASTERFONTS "Rasterschriften"
END
diff --git a/reactos/dll/cpl/console/resource.h b/reactos/dll/cpl/console/resource.h
index e621cc60ea5..09ffcced27c 100644
--- a/reactos/dll/cpl/console/resource.h
+++ b/reactos/dll/cpl/console/resource.h
@@ -1,5 +1,4 @@
-#ifndef RESOURCE_H__
-#define RESOURCE_H__
+#pragma once
#define IDC_CPLICON 40
#define IDS_CPLNAME 41
@@ -92,5 +91,3 @@
//string ids
#define IDS_SCREEN_TEXT 700
#define IDS_RASTERFONTS 701
-
-#endif
diff --git a/reactos/dll/cpl/desk/desk.h b/reactos/dll/cpl/desk/desk.h
index 8b1d9de7d90..a486eadbe65 100644
--- a/reactos/dll/cpl/desk/desk.h
+++ b/reactos/dll/cpl/desk/desk.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_DESK_H__
-#define __CPL_DESK_H__
+#pragma once
#define COBJMACROS
#include
@@ -96,6 +95,3 @@ HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY,LPCWSTR,UINT,IDataObject*);
INT_PTR CALLBACK
AdvGeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-
-#endif /* __CPL_DESK_H__ */
-
diff --git a/reactos/dll/cpl/desk/lang/de-DE.rc b/reactos/dll/cpl/desk/lang/de-DE.rc
index 4deba826591..d0829d9fbc0 100644
--- a/reactos/dll/cpl/desk/lang/de-DE.rc
+++ b/reactos/dll/cpl/desk/lang/de-DE.rc
@@ -124,7 +124,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Einstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Verschieben Sie die Monitor-Symbole, sodass sie der physikalischen Anordnung Ihrer Monitore entsprechen.",-1,3,1,240,16
+ LTEXT "Verschieben Sie die Monitor-Symbole, so dass sie der physikalischen Anordnung Ihrer Monitore entsprechen.",-1,3,1,240,16
CONTROL "",IDC_SETTINGS_MONSEL,"MONITORSELWNDCLASS",WS_CHILD|WS_VISIBLE|WS_TABSTOP,3,20,240,82,WS_EX_CLIENTEDGE
LTEXT "&Anzeige:",1820,3,106,30,8
LTEXT "",IDC_SETTINGS_DEVICE,9,115,224,8
@@ -178,8 +178,8 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_SLIDEEFFECT "Slide-Effekt"
- IDS_FADEEFFECT "Fade-Effekt"
+ IDS_SLIDEEFFECT "Gleiten"
+ IDS_FADEEFFECT "Ausblenden"
END
STRINGTABLE DISCARDABLE
diff --git a/reactos/dll/cpl/desk/lang/pl-PL.rc b/reactos/dll/cpl/desk/lang/pl-PL.rc
index 0c4761b23e3..01d7c796d70 100644
--- a/reactos/dll/cpl/desk/lang/pl-PL.rc
+++ b/reactos/dll/cpl/desk/lang/pl-PL.rc
@@ -63,7 +63,7 @@ BEGIN
WS_VISIBLE | WS_BORDER, 7, 7, 232, 120
LTEXT "Schemat kolorw", IDC_STATIC, 7, 140, 64, 7
COMBOBOX IDC_APPEARANCE_UI_ITEM, 7, 169, 120, 54, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- PUSHBUTTON "&Effects...", IDC_APPEARANCE_EFFECTS, 182, 150, 56, 15
+ PUSHBUTTON "&Efekty...", IDC_APPEARANCE_EFFECTS, 182, 150, 56, 15
PUSHBUTTON "Zaawansowane", IDC_APPEARANCE_ADVANCED, 182, 170, 56, 15
END
@@ -108,24 +108,24 @@ END
IDD_EFFAPPEARANCE DIALOGEX DISCARDABLE 0, 0, 285, 185
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE
-CAPTION "Effects"
+CAPTION "Efekty"
FONT 8, "MS Shell Dlg"
BEGIN
- CONTROL "&Use the following transition effect for menus and tooltips:",IDC_EFFAPPEARANCE_ANIMATION,"button",
+ CONTROL "&Uyj nastpujcego efektu przejcia dla menu i etykiet narzdzi:",IDC_EFFAPPEARANCE_ANIMATION,"button",
BS_AUTOCHECKBOX | WS_TABSTOP, 10, 5, 285, 19
COMBOBOX IDC_EFFAPPEARANCE_ANIMATIONTYPE, 20, 25, 80, 19 , CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_CHILD | WS_VSCROLL | WS_TABSTOP
- CONTROL "U&se the following method to smooth edges of screen fonts:",IDC_EFFAPPEARANCE_SMOOTHING,"button",
+ CONTROL "U&yj nastpujcej metody wygadzania krawdzi czcionek ekranowych:",IDC_EFFAPPEARANCE_SMOOTHING,"button",
BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED, 10, 42, 285, 19
COMBOBOX IDC_EFFAPPEARANCE_SMOOTHINGTYPE, 20, 62, 80, 19 , CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP | WS_DISABLED
- CONTROL "Us&e large icons",IDC_EFFAPPEARANCE_LARGEICONS,"button",
+ CONTROL "Uy&j duych ikon",IDC_EFFAPPEARANCE_LARGEICONS,"button",
BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED, 10, 80, 285, 19
- CONTROL "Show sh&adows under menus",IDC_EFFAPPEARANCE_SETDROPSHADOW,"button",
+ CONTROL "Pok&a cienie pod menu",IDC_EFFAPPEARANCE_SETDROPSHADOW,"button",
BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED, 10, 95, 285, 19
- CONTROL "Show &window contents while dragging",IDC_EFFAPPEARANCE_DRAGFULLWINDOWS,"button",
+ CONTROL "Poka za&warto okna podczas przecigania",IDC_EFFAPPEARANCE_DRAGFULLWINDOWS,"button",
BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED, 10, 110, 285, 19
- CONTROL "&Hide underlined letters for keyboard navigation until I press the Alt key",IDC_EFFAPPEARANCE_KEYBOARDCUES,"button",
+ CONTROL "U&kryj podkrelenie liter do nawigacji klawiatur dopki nie nacisn klawisza Alt",IDC_EFFAPPEARANCE_KEYBOARDCUES,"button",
BS_AUTOCHECKBOX | WS_TABSTOP, 10, 125, 285, 19
- PUSHBUTTON "Cancel", IDCANCEL, 226, 165, 50, 14
+ PUSHBUTTON "Anuluj", IDCANCEL, 226, 165, 50, 14
DEFPUSHBUTTON "OK", IDOK, 172, 165, 50, 14
END
@@ -188,13 +188,13 @@ END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_SLIDEEFFECT "Slide effect"
- IDS_FADEEFFECT "Fade effect"
+ IDS_SLIDEEFFECT "Efekt przewijania"
+ IDS_FADEEFFECT "Efekt przejcia"
END
STRINGTABLE DISCARDABLE
BEGIN
- IDS_STANDARDEFFECT "Standard"
+ IDS_STANDARDEFFECT "Standardowe"
IDS_CLEARTYPEEFFECT "ClearType"
END
diff --git a/reactos/dll/cpl/desk/monslctl.h b/reactos/dll/cpl/desk/monslctl.h
index 28326ea7683..7ee32440ae4 100644
--- a/reactos/dll/cpl/desk/monslctl.h
+++ b/reactos/dll/cpl/desk/monslctl.h
@@ -1,5 +1,4 @@
-#ifndef __MONSLCTL__H
-#define __MONSLCTL__H
+#pragma once
/* Control extended styles */
#define MSLM_EX_ALLOWSELECTNONE 0x1
@@ -214,5 +213,3 @@ typedef struct _MONSL_MONNMMONITORCHANGING
BOOL RegisterMonitorSelectionControl(IN HINSTANCE hInstance);
VOID UnregisterMonitorSelectionControl(IN HINSTANCE hInstance);
-
-#endif /* __MONSLCTL__H */
diff --git a/reactos/dll/cpl/desk/resource.h b/reactos/dll/cpl/desk/resource.h
index 54fa074dd39..ae02abac30f 100644
--- a/reactos/dll/cpl/desk/resource.h
+++ b/reactos/dll/cpl/desk/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_DESK_RESOURCE_H__
-#define __CPL_DESK_RESOURCE_H__
+#pragma once
/* metrics */
#define PROPSHEETWIDTH 246
@@ -185,7 +184,3 @@
#define IDC_RESTART_RB 5002
#define IDC_WITHOUTREBOOT_RB 5003
#define IDC_ASKME_RB 5004
-
-#endif /* __CPL_DESK_RESOURCE_H__ */
-
-
diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.h b/reactos/dll/cpl/hdwwiz/hdwwiz.h
index b480ad10165..3712adb222a 100644
--- a/reactos/dll/cpl/hdwwiz/hdwwiz.h
+++ b/reactos/dll/cpl/hdwwiz/hdwwiz.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_HDWWIZ_H
-#define __CPL_HDWWIZ_H
+#pragma once
#include
#include
@@ -19,6 +18,4 @@
extern HINSTANCE hApplet;
-#endif /* __CPL_HDWWIZ_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/hdwwiz/lang/de-DE.rc b/reactos/dll/cpl/hdwwiz/lang/de-DE.rc
index 6ef031b23be..9fb5c2daac2 100644
--- a/reactos/dll/cpl/hdwwiz/lang/de-DE.rc
+++ b/reactos/dll/cpl/hdwwiz/lang/de-DE.rc
@@ -2,21 +2,21 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
IDD_STARTPAGE DIALOG DISCARDABLE 0, 0, 317, 186
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Wilkommen zum Hardware Assistenten", IDC_FINISHTITLE, 114, 8, 203, 24
+ LTEXT "Wilkommen zum Hardwareassistenten", IDC_FINISHTITLE, 114, 8, 203, 24
LTEXT "Dieser Assistent untersttzt Sie bei:", -1, 114, 40, 182, 8
LTEXT "1) Software installieren, um die an den Computer angeschlossene Hardware zu untersttzen.", -1, 121, 56, 184, 16
LTEXT "2) Probleme lsen, die Sie mit Ihrer Hardware haben.", -1, 121, 78, 185, 16
ICON IDI_WARNINGICON, IDC_WARNINGICON, 124, 109, 20, 20
- LTEXT "Falls die Hardware mit einer Installations CD geliefert wurde, ist es empfehlenswert den Assistenten zu beenden und die Installations CD des Anbieters zu verwenden.", 503, 150, 106, 155, 50
- LTEXT "Klicken Sie ""Weiter"", um fortzufahren.", -1, 114, 166, 193, 8
+ LTEXT "Falls die Hardware mit einer Installations-CD geliefert wurde, ist es empfehlenswert, den Assistenten zu beenden und die Installations-CD des Anbieters zu verwenden.", 503, 150, 106, 155, 50
+ LTEXT "Klicken Sie auf ""Weiter"", um fortzufahren.", -1, 114, 166, 193, 8
END
IDD_SEARCHPAGE DIALOG DISCARDABLE 0, 0, 317, 143
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "", IDC_STATUSTEXT, 21, 8, 275, 32
@@ -25,7 +25,7 @@ END
IDD_ISCONNECTEDPAGE DIALOG DISCARDABLE 0, 0, 317, 143
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Ist die Hardware bereits am Computer angeschlossen?", -1, 20, 11, 275, 8
@@ -35,21 +35,21 @@ END
IDD_PROBELISTPAGE DIALOG DISCARDABLE 0, 0, 317, 143
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Whlen Sie aus der Liste ein installiertes Gert aus und klicken Sie auf ""Weiter"", um die Einstellungen zu berprfen und mgliche Probleme zu lsen.", -1, 21, 8, 275, 22
- LTEXT "Um Hardware zu installieren, die nicht in der Liste aufgelistet ist, klicken Sie ""Ein neues Gert hinzufgen.""", -1, 21, 32, 275, 24
+ LTEXT "Um Hardware zu installieren, die nicht in der Liste aufgelistet ist, klicken Sie auf ""Ein neues Gert hinzufgen.""", -1, 21, 32, 275, 24
LTEXT "I&nstallierte Hardware:", -1, 21, 62, 140, 8
CONTROL "", IDC_PROBELIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | LVS_NOCOLUMNHEADER, 21, 72, 275, 66
END
IDD_SELECTWAYPAGE DIALOG DISCARDABLE 0, 0, 317, 143
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Der Assistent kann automatisch Hardware suchen und diese installieren. Oder, falls Sie das zu installierende Gert genau kennen, knnen Sie es aus der Liste auswhlen.", -1, 21, 8, 280, 24
+ LTEXT "Der Assistent kann automatisch Hardware suchen und diese installieren oder, falls Sie das zu installierende Gert genau kennen, knnen Sie es aus der Liste auswhlen.", -1, 21, 8, 280, 24
LTEXT "Wie wollen Sie den Assistenten fortsetzen?", -1, 23, 40, 275, 8
AUTORADIOBUTTON "Automatisch nach neuer Hardware &suchen und installieren (empfohlen)", IDC_AUTOINSTALL, 30, 55, 266, 8, WS_GROUP | NOT WS_TABSTOP
AUTORADIOBUTTON "&Manuell aus der Liste ausgewhlte Hardware installieren (erweitert)", IDC_MANUALLYINST, 30, 70, 266, 8, NOT WS_TABSTOP
@@ -57,7 +57,7 @@ END
IDD_DETECTEDHWPAGE DIALOG DISCARDABLE 0, 0, 317, 143
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "", IDC_STATUSTEXT, 21, 9, 275, 40
@@ -67,20 +67,20 @@ END
IDD_HWTYPESPAGE DIALOG DISCARDABLE 0, 0, 317, 143
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Wenn Sie die Hardwarekategorie, die Sie bentigen nicht finden, whlen Sie ""Alle Gerte"".", IDC_STATUSTEXT, 21, 9, 275, 18
- LTEXT "Bekannte &Hardware Typen:", IDC_HWTYPESTEXT, 21, 31, 180, 8
+ LTEXT "Wenn Sie die Hardwarekategorie, die Sie bentigen, nicht finden, whlen Sie ""Alle Gerte"".", IDC_STATUSTEXT, 21, 9, 275, 18
+ LTEXT "Bekannte &Hardwaretypen:", IDC_HWTYPESTEXT, 21, 31, 180, 8
CONTROL "", IDC_HWTYPESLIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | LVS_NOCOLUMNHEADER, 21, 42, 275, 92
END
IDD_PROGRESSPAGE DIALOG DISCARDABLE 0, 0, 317, 143
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Der Hardware Suchvorgang kann mehere Minuten dauern.", -1, 21, 8, 275, 15
+ LTEXT "Der Hardware-Suchvorgang kann mehrere Minuten dauern.", -1, 21, 8, 275, 15
LTEXT "Fortschitt:", IDC_TPROGRESSTEXT, 21, 25, 275, 8
CONTROL "", IDC_TPROGRESSBAR, "msctls_progress32", 0, 21, 37, 275, 14
LTEXT "", IDC_PROGRESSTEXT, 58, 58, 200, 8, SS_NOPREFIX
@@ -89,21 +89,21 @@ END
IDD_FINISHPAGE DIALOG DISCARDABLE 0, 0, 317, 186
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Hardware Assistent wird vervollstndigt", IDC_FINISHTITLE, 114, 8, 203, 24
- LTEXT "Der Hardware Assistent wurde erfolgreich abgeschlossen.", -1, 114, 32, 193, 19
+ LTEXT "Hardwareassistent wird vervollstndigt", IDC_FINISHTITLE, 114, 8, 203, 24
+ LTEXT "Der Hardwareassistent wurde erfolgreich abgeschlossen.", -1, 114, 32, 193, 19
LTEXT "", IDC_STATUSTEXT, 114, 70, 193, 92
LTEXT "Klicken Sie ""Beenden"", um den Assistenten zu schlieen.", -1, 114, 166, 192, 8
END
IDD_ISFOUNDPAGE DIALOG DISCARDABLE 0, 0, 317, 186
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Hardware Assistent wird vervollstndigt", IDC_FINISHTITLE, 114, 8, 203, 24
+ LTEXT "Hardwareassistent wird vervollstndigt", IDC_FINISHTITLE, 114, 8, 203, 24
LTEXT "Der Assistent fand folgende Hardware an ihrem Computer:", -1, 114, 32, 193, 19
LTEXT "Klicken Sie ""Beenden"", um den Assistenten zu schlieen.", -1, 114, 166, 132, 8
CONTROL "", IDC_FOUNDHARDWARELIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | LVS_REPORT | LVS_NOSORTHEADER | LVS_SINGLESEL | LVS_SHAREIMAGELISTS, 114, 56, 193, 78
@@ -111,10 +111,10 @@ END
IDD_HWSTATUSPAGE DIALOG DISCARDABLE 0, 0, 317, 186
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Hardware Assistent wird vervollstndigt", IDC_FINISHTITLE, 114, 8, 195, 28
+ LTEXT "Hardwareassistent wird vervollstndigt", IDC_FINISHTITLE, 114, 8, 195, 28
LTEXT "Derzeitiger Status der ausgewhlten Hardware:", -1, 114, 40, 193, 19
EDITTEXT IDC_HWSTATUSEDIT, 114, 60, 193, 70, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | NOT WS_TABSTOP
LTEXT "Klicken Sie ""Beenden"", um Hilfe zum Lsen von mglichen Problemen zu erhalten.", -1, 114, 136, 193, 16
@@ -123,10 +123,10 @@ END
IDD_NOTCONNECTEDPAGE DIALOG DISCARDABLE 0, 0, 317, 186
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware Assistent"
+CAPTION "Hardwareassistent"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Hardware Assistent kann nicht fortgesetzt werden", IDC_FINISHTITLE, 114, 8, 203, 28
+ LTEXT "Hardwareassistent kann nicht fortgesetzt werden", IDC_FINISHTITLE, 114, 8, 203, 28
LTEXT "Um fortsetzen zu knnen, verbinden Sie folgende Hardware mit dem Computer.", -1, 114, 40, 193, 16
AUTOCHECKBOX "&Nach Beenden den Computer neustarten, um die Hardware anschlieen zu knnen.", IDC_TURNOFFCHECKBOX, 114, 64, 203, 20, BS_TOP | BS_MULTILINE
LTEXT "In den meisten Fllen wird ReactOS die Hardware automatisch installieren, wenn Sie sie mit dem Computer verbinden. Andernfalls knnen Sie den Assistenten erneut starten, um die zu untersttzende Hardware zu installieren.", -1, 114, 98, 193, 32
@@ -139,7 +139,7 @@ BEGIN
IDS_CPLDESCRIPTION "Installiert neue Hardwarekomponenten."
IDS_SEARCHTITLE "Bitte warten Sie, whrend der Assistent neue Hardware sucht..."
IDS_SEARCHTEXT "Dieser Assistent sucht nach Hardware, die vor kurzem an Ihren Computer angeschlossen, aber noch nicht installiert wurde."
- IDS_ISCONNECTED "Ist die Hardware bereits verbunden?"
+ IDS_ISCONNECTED "Ist die Hardware bereits angeschlossen?"
IDS_PROBELISTTITLE "Folgende Hardware ist bereits auf Ihrem Computer installiert"
IDS_ADDNEWDEVICE "Ein neues Gert hinzufgen"
IDS_SELECTWAYTITLE "Der Assistent kann Sie bei der Installation anderer Hardware untersttzen"
diff --git a/reactos/dll/cpl/hdwwiz/resource.h b/reactos/dll/cpl/hdwwiz/resource.h
index 98f8a9c6c75..1d5a832bf89 100644
--- a/reactos/dll/cpl/hdwwiz/resource.h
+++ b/reactos/dll/cpl/hdwwiz/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* Icons */
#define IDI_CPLICON 100
@@ -57,6 +56,4 @@
#define IDC_NOTCONNECTED 505
#define IDC_TURNOFFCHECKBOX 506
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/input/input.h b/reactos/dll/cpl/input/input.h
index 3e2ca9fe3e4..edfe121878f 100644
--- a/reactos/dll/cpl/input/input.h
+++ b/reactos/dll/cpl/input/input.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_INPUT_H
-#define __CPL_INPUT_H
+#pragma once
#include
#include
@@ -66,6 +65,4 @@ GetHotkeys(LPTSTR szHotkey, LPTSTR szLangHotkey, LPTSTR szLayoutHotkey);
void ShowLastWin32Error(HWND hWndOwner);
-#endif /* __CPL_INPUT_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/input/lang/de-DE.rc b/reactos/dll/cpl/input/lang/de-DE.rc
index c44f155bbb8..6412b5a6348 100644
--- a/reactos/dll/cpl/input/lang/de-DE.rc
+++ b/reactos/dll/cpl/input/lang/de-DE.rc
@@ -5,7 +5,7 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Einstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Whlen Sie die Dienste, die Sie fr die Eingabesprachen in der Liste verwenden wollen.\nVerwenden Sie Hinzufgen und Entfernen, um die Liste zu bearbeiten.", -1, 9, 6, 238, 25
+ LTEXT "Whlen Sie die Dienste aus, die Sie fr die Eingabesprachen in der Liste verwenden wollen.\nVerwenden Sie Hinzufgen und Entfernen, um die Liste zu bearbeiten.", -1, 9, 6, 238, 25
CONTROL "TEXT", IDC_KEYLAYOUT_LIST, "SYSLISTVIEW32", WS_BORDER | WS_VSCROLL | WS_TABSTOP | LVS_SORTASCENDING | LVS_REPORT | 0x0000808D, 8, 36, 237, 101
PUSHBUTTON "&Als Standard", IDC_SET_DEFAULT, 101, 159, 144, 14
PUSHBUTTON "&Hinzufgen...", IDC_ADD_BUTTON, 27, 142, 70, 14
@@ -22,7 +22,7 @@ FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Um Caps Lock zu deaktivieren", -1, 7, 7, 258, 26
AUTORADIOBUTTON "Caps &Lock Taste drcken", IDC_PRESS_CL_KEY_RB, 14, 17, 120, 11, WS_GROUP
- AUTORADIOBUTTON "&Shift Taste drcken", IDC_PRESS_SHIFT_KEY_RB, 144, 17, 120, 11, NOT WS_TABSTOP
+ AUTORADIOBUTTON "Um&schalttaste drcken", IDC_PRESS_SHIFT_KEY_RB, 144, 17, 120, 11, NOT WS_TABSTOP
GROUPBOX "Schnelltasten fr Eingabesprachen", -1, 7, 37, 258, 95
LTEXT "Aktion", -1, 14, 47, 60, 9
RTEXT "Tasten&kombination", -1, 177, 47, 79, 9
@@ -57,7 +57,7 @@ BEGIN
AUTORADIOBUTTON "&Strg", IDC_CTRL_LANG, 29, 31, 30, 11
AUTORADIOBUTTON "&Alt links", IDC_LEFT_ALT_LANG, 29, 45, 46, 12
AUTOCHECKBOX "&Tastaturlayout umschalten", IDC_SWITCH_KBLAYOUTS_CB, 16, 65, 141, 12
- LTEXT "Shift", -1, 74, 87, 27, 12
+ LTEXT "Umschalt", -1, 74, 87, 27, 12
CTEXT "+", -1, 63, 87, 8, 9
AUTORADIOBUTTON "S&trg", IDC_CTRL_LAYOUT, 30, 81, 30, 11
AUTORADIOBUTTON "A< links", IDC_LEFT_ALT_LAYOUT, 30, 95, 44, 12
@@ -67,7 +67,7 @@ END
IDD_INPUT_LANG_PROP DIALOGEX 20, 20, 227, 75
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION
-CAPTION "Eingabesprache Einstellungen"
+CAPTION "Eingabespracheneinstellungen"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Eingabesprache:", -1, 7, 7, 61, 8
@@ -94,8 +94,8 @@ BEGIN
IDS_CONFIRMATION "Besttigung"
IDS_LAYOUT_EXISTS "Dieses Layout existiert bereits."
IDS_LAYOUT_EXISTS2 "Dieses Layout existiert bereits und kann nicht hinzugefgt werden."
- IDS_CTRL_SHIFT "Strg+Shift"
- IDS_LEFT_ALT_SHIFT "Alt links+Shift"
+ IDS_CTRL_SHIFT "Strg+Umschalt"
+ IDS_LEFT_ALT_SHIFT "Alt links+Umschalt"
IDS_SWITCH_BET_INLANG "Zwischen Eingabesprachen umschalten"
END
@@ -171,7 +171,7 @@ BEGIN
IDS_CHINESE_TRADITIONAL_BIG5CODE_LAYOUT, "Chinesisch (traditionell) - Big5-Code"
IDS_CHINESE_TRADITIONAL_DAYI_LAYOUT, "Chinesisch (traditionell) - DaYi"
IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT, "Chinesisch (traditionell) - Unicode"
- IDS_CHINESE_TRADITIONAL_ALPHANUMERIC_LAYOUT, "Chinesisch (traditionell) - Alphanumerisch"
+ IDS_CHINESE_TRADITIONAL_ALPHANUMERIC_LAYOUT, "Chinesisch (traditionell) - Alphanummerisch"
IDS_CHINESE_SIMPLIFIED_USKEYBOARD_LAYOUT, "Chinesisch (vereinfacht) - US-Tastatur"
IDS_CHINESE_SIMPLIFIED_QUANPIN_LAYOUT, "Chinesisch (vereinfacht) - QuanPin"
IDS_CHINESE_SIMPLIFIED_SHUANGPIN_LAYOUT, "Chinesisch (vereinfacht) - ShuangPin"
@@ -220,7 +220,7 @@ BEGIN
IDS_ARMENIAN_EASTERN_LAYOUT, "Ostarmenisch"
IDS_ARMENIAN_WESTERN_LAYOUT, "Westarmenisch"
IDS_GREEK_POLYTONIC_LAYOUT, "Griechisch (Polytonisch)"
- IDS_USENG_TABLE_IBM_ARABIC238L_LAYOUT, "US-Englische Tabelle fr IBM Arabisch 238_L"
+ IDS_USENG_TABLE_IBM_ARABIC238L_LAYOUT, "US-englische Tabelle fr IBM Arabisch 238_L"
IDS_FARSI_LAYOUT, "Farsi"
IDS_GAELIC_LAYOUT, "Glisch"
IDS_PORTUGUESE_BRAZIL_ABNT2_LAYOUT, "Portugiesisch (Brasilianisch, ABNT2)"
@@ -231,12 +231,12 @@ BEGIN
IDS_SYRIAC_PHONETIC_LAYOUT, "Syrisch (Phonetisch)"
IDS_DIVEHI_PHONETIC_LAYOUT, "Divehi (Phonetisch)"
IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi (Schreibmaschine)"
- IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)"
- IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS)"
- IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978"
- IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)"
- IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)"
- IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)"
- IDS_BURMESE_LAYOUT, "Burmese"
+ IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarisch (klassisch phonetisch)"
+ IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarisch BDS (phonetisch)"
+ IDS_BULGARIAN_BDS_LAYOUT, "Bulgarisch BDS 5237-1978"
+ IDS_GERMAN_RISTOME_LAYOUT, "Deutsch (RISTOME)"
+ IDS_GERMAN_NEO_11_LAYOUT, "Deutsch (NEO-1.1)"
+ IDS_GERMAN_DE_ERGO_LAYOUT, "Deutsch (de_ergo)"
+ IDS_BURMESE_LAYOUT, "Burmesisch"
IDS_UKRAINIAN_STUDENT_LAYOUT, "Ukrainian (Student)"
END
diff --git a/reactos/dll/cpl/input/resource.h b/reactos/dll/cpl/input/resource.h
index 9d6408a3d39..4147d2c3da5 100644
--- a/reactos/dll/cpl/input/resource.h
+++ b/reactos/dll/cpl/input/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* metrics */
#define PROPSHEETWIDTH 252
@@ -204,6 +203,4 @@
#define IDS_BURMESE_LAYOUT 5140
#define IDS_UKRAINIAN_STUDENT_LAYOUT 5141
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/intl/intl.h b/reactos/dll/cpl/intl/intl.h
index 9e58f77a90a..12de475dc5e 100644
--- a/reactos/dll/cpl/intl/intl.h
+++ b/reactos/dll/cpl/intl/intl.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_INTL_H
-#define __CPL_INTL_H
+#pragma once
#include
@@ -103,6 +102,4 @@ SetupApplet(HWND hwndDlg, LCID lcid);
/* kblayouts.c */
VOID AddNewKbLayoutsByLcid(LCID Lcid);
-#endif /* __CPL_INTL_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/intl/lang/de-DE.rc b/reactos/dll/cpl/intl/lang/de-DE.rc
index cbb8ca8cd14..909652966c4 100644
--- a/reactos/dll/cpl/intl/lang/de-DE.rc
+++ b/reactos/dll/cpl/intl/lang/de-DE.rc
@@ -22,7 +22,7 @@ BEGIN
EDITTEXT IDC_SHORTTIMESAMPLE_EDIT, 89, 131, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | NOT WS_TABSTOP
EDITTEXT IDC_FULLTIMESAMPLE_EDIT, 89, 146, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | NOT WS_TABSTOP
GROUPBOX "Geografische Lage", -1, 5, 172, 234, 55
- LTEXT "Whlen Sie Ihren Standort, sodass Dienste Sie mit lokalen Informationen, wie Nachrichten und Wettervorhersagen, versorgen knnen.", -1, 14, 184, 210, 24
+ LTEXT "Whlen Sie Ihren Standort, so dass Dienste Sie mit lokalen Informationen, wie Nachrichten und Wettervorhersagen, versorgen knnen.", -1, 14, 184, 210, 24
COMBOBOX IDC_LOCATION_COMBO, 14, 210, 217, 160, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT
END
@@ -36,7 +36,7 @@ BEGIN
PUSHBUTTON "&Details...", IDC_DETAIL_BUTTON, 177, 34, 54, 14
GROUPBOX "Zustzliche Sprachuntersttzung", -1, 5, 62, 234, 82
LTEXT "Die meisten Sprachen sind standardmig installiert. Um weitere Sprachen zu installieren, aktivieren Sie die unteren Kontollkstchen.", -1, 12, 72, 220, 18
- CHECKBOX "Dateien fr Sprachen mit &komplexer Schrift und Rechts-nach-Links Schreibstil installieren.", IDC_INST_FILES_FOR_RTOL_LANG, 12, 92, 215, 22, BS_MULTILINE
+ CHECKBOX "Dateien fr Sprachen mit &komplexer Schrift und Rechts-nach-Links-Schreibstil installieren.", IDC_INST_FILES_FOR_RTOL_LANG, 12, 92, 215, 22, BS_MULTILINE
CHECKBOX "Dateien fr &ostasiatische Sprachen installieren.", IDC_INST_FILES_FOR_ASIAN, 12, 114, 180, 22, BS_MULTILINE
END
@@ -47,12 +47,12 @@ FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Sprache fr Unicode-Inkompatible Programme", -1, 5, 5, 234, 90
COMBOBOX IDC_LANGUAGE_COMBO, 14, 75, 217, 160, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT
- LTEXT "Diese Einstellung ermglicht es Unicode-Inkompatiblen Programmen, Mens und Dialoge in der rtlichen Sprache darzustellen. Dies beeinflusst Unicode-Kompatible Programme nicht, wird aber fr alle Nutzer des Computers angewendet.", -1, 14, 18, 223, 33
- LTEXT "Whlen Sie eine Sprache aus, die der Sprachversion des Programmes entspricht, dass Sie nutzen wollen:", -1, 14, 55, 223, 18
+ LTEXT "Diese Einstellung ermglicht es, Unicode-Inkompatiblen Programmen, Mens und Dialoge in der rtlichen Sprache darzustellen. Dies beeinflusst Unicode-Kompatible Programme nicht, wird aber fr alle Nutzer des Computers angewendet.", -1, 14, 18, 223, 33
+ LTEXT "Whlen Sie eine Sprache aus, die der Sprachversion des Programmes entspricht, das Sie nutzen wollen:", -1, 14, 55, 223, 18
GROUPBOX "Codepage Konvertierungstabellen", -1, 5, 101, 234, 88
CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70
GROUPBOX "Standardeinstellungen fr Benutzerkonten", -1, 5, 193, 234, 30
- CHECKBOX "Einstellungen &auf das aktive und Standardkonto anwenden.", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
+ CHECKBOX "Einstellungen &auf das aktive und das Standardkonto anwenden.", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE
END
IDD_NUMBERSPAGE DIALOGEX 0, 0, 246, 234
@@ -143,7 +143,7 @@ CAPTION "Datum"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Kalender", -1, 7, 7, 230, 74
- LTEXT "Eine Zweistellige Jahreszahl in folgendem Zeitraum interpretieren:", -1, 13, 18, 215, 8
+ LTEXT "Eine zweistellige Jahreszahl in folgendem Zeitraum interpretieren:", -1, 13, 18, 215, 8
EDITTEXT IDC_FIRSTYEAR_EDIT, 13, 30, 36, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED
LTEXT "und", -1, 55, 32, 17, 8
EDITTEXT IDC_SECONDYEAR_EDIT, 77, 30, 36, 12, ES_LEFT | ES_NUMBER | WS_GROUP
@@ -178,7 +178,7 @@ FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Sortierung", -1, 7, 7, 230, 74
LTEXT "Sortiermethoden definieren die Sortierreihenfolge von Zeichen, Wrtern, Dateien und Ordnern.", -1, 14, 17, 220, 25
- LTEXT "Whlen Sie eine Sortiermethode fr Ihre Sprache:", -1, 14, 37, 220, 22
+ LTEXT "Whlen Sie eine Sortiermethode fr Ihre Sprache aus:", -1, 14, 37, 220, 22
COMBOBOX IDC_SORTLIST_COMBO, 14, 56, 217, 83, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL
END
diff --git a/reactos/dll/cpl/intl/resource.h b/reactos/dll/cpl/intl/resource.h
index de4582ec932..8491517acce 100644
--- a/reactos/dll/cpl/intl/resource.h
+++ b/reactos/dll/cpl/intl/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
#define IDC_FLAGS 2
@@ -76,6 +75,4 @@
#define IDS_CUSTOMIZE_TITLE 1002
#define IDS_SPAIN 1003
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/joy/joy.h b/reactos/dll/cpl/joy/joy.h
index 4aacd59df6d..7e1b30c2916 100644
--- a/reactos/dll/cpl/joy/joy.h
+++ b/reactos/dll/cpl/joy/joy.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_JOY_H
-#define __CPL_JOY_H
+#pragma once
#include
#include
@@ -35,6 +34,4 @@ extern HINSTANCE hApplet;
void ShowLastWin32Error(HWND hWndOwner);
-#endif /* __CPL_JOY_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/joy/lang/de-DE.rc b/reactos/dll/cpl/joy/lang/de-DE.rc
index 1d8ae576c14..e80697d6778 100644
--- a/reactos/dll/cpl/joy/lang/de-DE.rc
+++ b/reactos/dll/cpl/joy/lang/de-DE.rc
@@ -3,12 +3,12 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
IDD_PROPPAGEMAIN DIALOGEX 0, 0, 252, 205
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION
EXSTYLE WS_EX_CONTEXTHELP
-CAPTION "Gamecontroller"
+CAPTION "Spielcontroller"
FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_CPLSYSTEM, -1, 7, 7, 20, 20
- LTEXT "ber diese Einstellungen knnen an den PC angeschlossene Gamecontroller konfiguriert werden.", -1, 33, 7, 214, 20, NOT WS_GROUP
- GROUPBOX "I&nstallierte Gamecontroller", -1, 7, 34, 238, 117
+ LTEXT "ber diese Einstellungen knnen an den PC angeschlossene Spielcontroller konfiguriert werden.", -1, 33, 7, 214, 20, NOT WS_GROUP
+ GROUPBOX "I&nstallierte Spielcontroller", -1, 7, 34, 238, 117
CONTROL "List1", IDC_CONTROLLER_LIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000808D, 14, 44, 224, 80
PUSHBUTTON "&Hinzufgen...", IDC_ADD_BUTTON, 35, 129, 65, 14
PUSHBUTTON "&Entfernen", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED
@@ -21,15 +21,15 @@ END
IDD_ADD DIALOGEX 0, 0, 265, 200
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION
EXSTYLE WS_EX_CONTEXTHELP
-CAPTION "Gamecontroller hinzufgen"
+CAPTION "Spielcontroller hinzufgen"
FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_CPLSYSTEM, -1, 8, 7, 20, 20
- LTEXT "Whlen Sie einen Gamecontroller aus der Liste und klicken Sie auf OK. Wenn ihr Gamecontroller nicht in der Liste erscheint, klicken Sie auf Benutzerdefiniert.", -1, 35, 7, 210, 33
- LTEXT "&Gamecontroller:", -1, 8, 45, 126, 8
+ LTEXT "Whlen Sie einen Spielcontroller aus der Liste und klicken Sie auf OK. Wenn ihr Spielcontroller nicht in der Liste erscheint, klicken Sie auf Benutzerdefiniert.", -1, 35, 7, 210, 33
+ LTEXT "&Spielcontroller:", -1, 8, 45, 126, 8
LISTBOX IDC_GAME_CONTROLLERS_LIST, 7, 55, 251, 57, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_HSCROLL | WS_TABSTOP
AUTOCHECKBOX "&Ruder und Pedale aktivieren", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 105, 10, WS_GROUP
- LTEXT "&Game Port:", -1, 7, 134, 38, 8, NOT WS_VISIBLE
+ LTEXT "&Gameport:", -1, 7, 134, 38, 8, NOT WS_VISIBLE
COMBOBOX IDC_GAME_PORT_COMBO, 7, 147, 140, 50, CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE | WS_VSCROLL
PUSHBUTTON "&Benutzerdefiniert...", IDC_CUSTOM_BUTTON, 195, 147, 63, 14
CONTROL "", -25525, "STATIC", SS_ETCHEDHORZ, 7, 170, 251, 1
@@ -40,7 +40,7 @@ END
IDD_CUSTOM DIALOGEX 0, 0, 265, 183, 0
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION
EXSTYLE WS_EX_CONTEXTHELP
-CAPTION "Benutzerdefinierter Gamecontroller"
+CAPTION "Benutzerdefinierter Spielcontroller"
FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "Spezielle Eigenschaften", -1, 7, 7, 245, 52
@@ -51,10 +51,10 @@ BEGIN
GROUPBOX "&Achsen", -1, 7, 67, 116, 44, WS_GROUP
COMBOBOX IDC_AXES_COMBO, 37, 79, 48, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL
AUTORADIOBUTTON "Ruder/Pedale", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE
- AUTORADIOBUTTON "Z Achse", IDC_Z_AXIS_RADIO, 81, 97, 40, 10, NOT WS_VISIBLE
+ AUTORADIOBUTTON "Z-Achse", IDC_Z_AXIS_RADIO, 81, 97, 40, 10, NOT WS_VISIBLE
GROUPBOX "&Tasten", -1, 137, 67, 116, 44
COMBOBOX IDC_BUTTONS_COMBO, 178, 79, 48, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL, WS_EX_CLIENTEDGE
- AUTOCHECKBOX "Beinhaltet eine &Point of View Steuerung", IDC_INC_POINT_CHECKBOX, 7, 123, 140, 10
+ AUTOCHECKBOX "Beinhaltet eine &Point-of-View-Steuerung", IDC_INC_POINT_CHECKBOX, 7, 123, 140, 10
LTEXT "C&ontrollername:", -1, 7, 139, 200, 9
EDITTEXT IDC_CONTROLLER_NAME_EDIT, 7, 150, 116, 15, ES_AUTOHSCROLL, WS_EX_CLIENTEDGE | WS_EX_STATICEDGE
DEFPUSHBUTTON "OK", IDOK, 137, 150, 50, 14
@@ -77,8 +77,8 @@ END
STRINGTABLE
BEGIN
- IDS_CPLSYSTEMNAME "Gamecontroller"
- IDS_CPLSYSTEMDESCRIPTION "Hinzufgen, Entfernen und Konfigurieren von Gamecontroller Hardware, wie Joysticks und Gamepads."
+ IDS_CPLSYSTEMNAME "Spielcontroller"
+ IDS_CPLSYSTEMDESCRIPTION "Hinzufgen, Entfernen und Konfigurieren von Spielcontrollerhardware wie Joysticks und Gamepads."
IDS_CONTROLLER "Controller"
IDS_STATUS "Status"
END
diff --git a/reactos/dll/cpl/joy/resource.h b/reactos/dll/cpl/joy/resource.h
index a2083da057f..17efe670339 100644
--- a/reactos/dll/cpl/joy/resource.h
+++ b/reactos/dll/cpl/joy/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* icons */
#define IDI_CPLSYSTEM 102
@@ -39,6 +38,4 @@
#define IDC_CONTROLLER_NAME_EDIT 1056
#define IDC_PREFERRED_DEV_COMBO 8195
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/liccpa/lang/de-DE.rc b/reactos/dll/cpl/liccpa/lang/de-DE.rc
index cdb2910f528..b5d68134899 100644
--- a/reactos/dll/cpl/liccpa/lang/de-DE.rc
+++ b/reactos/dll/cpl/liccpa/lang/de-DE.rc
@@ -4,11 +4,11 @@ LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
IDD_PROPPAGE1 DIALOGEX DISCARDABLE 20, 40, 315, 104
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU
-CAPTION "Chose Licensing Mode"
+CAPTION "Whlen sie den Lizenzmodus aus"
FONT 8, "Helv"
BEGIN
- CONTROL "Client Lizenzierungs Modus", 100, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 4, 4, 239, 94
- CONTROL "Per Gert oder Per Benutzer", 102, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 79, 107, 12
+ CONTROL "Client-Lizenzierungsmodus", 100, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 4, 4, 239, 94
+ CONTROL "Per Gert oder per Benutzer", 102, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 79, 107, 12
CONTROL "Per Server. Nummer der gleichzeitigen Verbindungen:", 103, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 38, 163, 9
CONTROL "Produkt:", 105, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 13, 20, 31, 8
CONTROL "", 106, "COMBOBOX", CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP, 49, 20, 171, 12
@@ -23,7 +23,7 @@ END
STRINGTABLE
BEGIN
- IDS_CPLNAME_1 "Lizenz Manager"
- IDS_CPLDESCRIPTION_1 "Lizenz Manager"
+ IDS_CPLNAME_1 "Lizenzmanager"
+ IDS_CPLDESCRIPTION_1 "Lizenzmanager"
IDS_REACTOS "ReactOS - Freie Software"
END
diff --git a/reactos/dll/cpl/liccpa/liccpa.h b/reactos/dll/cpl/liccpa/liccpa.h
index 817bd4fc80a..694663d2082 100644
--- a/reactos/dll/cpl/liccpa/liccpa.h
+++ b/reactos/dll/cpl/liccpa/liccpa.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_SAMPLE_H
-#define __CPL_SAMPLE_H
+#pragma once
typedef struct
{
@@ -11,6 +10,4 @@ typedef struct
extern HINSTANCE hApplet;
-#endif /* __CPL_SAMPLE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/liccpa/resource.h b/reactos/dll/cpl/liccpa/resource.h
index 917dc15c69f..b1cbbf74c6a 100644
--- a/reactos/dll/cpl/liccpa/resource.h
+++ b/reactos/dll/cpl/liccpa/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* ids */
@@ -13,6 +12,4 @@
#define IDC_OK 107
#define IDC_CANCEL 108
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/main/lang/de-DE.rc b/reactos/dll/cpl/main/lang/de-DE.rc
index 97ed969f8b1..cc63724e1f1 100644
--- a/reactos/dll/cpl/main/lang/de-DE.rc
+++ b/reactos/dll/cpl/main/lang/de-DE.rc
@@ -91,7 +91,7 @@ STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU
CAPTION "Schema speichern"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Cursorschema speichern unter:", -1, 5, 5, 100, 10
+ LTEXT "Zeigerschema speichern unter:", -1, 5, 5, 100, 10
EDITTEXT IDC_EDIT_SCHEME_NAME, 5, 15, 180, 15, WS_CHILD | WS_VISIBLE | WS_GROUP
PUSHBUTTON "&OK", IDOK, 60, 45, 50, 15
PUSHBUTTON "&Abbrechen", IDCANCEL, 115, 45, 50, 15
@@ -169,7 +169,7 @@ BEGIN
IDS_REMOVE_TITLE "Lschen des Cursorschemas besttigen"
IDS_REMOVE_TEXT "Soll das Cursorschema '%s' wirklich gelscht werden?"
IDS_OVERWRITE_TITLE "Cursorschema berscheiben"
- IDS_OVERWRITE_TEXT "Ein Cursorschema mit diesem Namen existiert bereits. Mchen Sie das existierende Cursorschema berscheiben?"
+ IDS_OVERWRITE_TEXT "Ein Cursorschema mit diesem Namen existiert bereits. Mchten Sie das existierende Cursorschema berscheiben?"
IDS_ANIMATE_CURSOR "Animierter Cursor"
END
diff --git a/reactos/dll/cpl/main/main.h b/reactos/dll/cpl/main/main.h
index 18d713c2c69..2c32c7e63b1 100644
--- a/reactos/dll/cpl/main/main.h
+++ b/reactos/dll/cpl/main/main.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_MAIN_H
-#define __CPL_MAIN_H
+#pragma once
typedef enum
{
@@ -46,6 +45,4 @@ PropSheetAddPage(HPROPSHEETPAGE hpage, LPARAM lParam);
LONG APIENTRY
MouseApplet(HWND hwnd, UINT uMsg, LPARAM wParam, LPARAM lParam);
-#endif /* __CPL_MAIN_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/main/resource.h b/reactos/dll/cpl/main/resource.h
index cc4d770defe..169c2ea67fe 100644
--- a/reactos/dll/cpl/main/resource.h
+++ b/reactos/dll/cpl/main/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* Icons */
#define IDC_CPLICON_1 100
@@ -102,6 +101,4 @@
#define IDC_TEXT_TRAIL_SHORT 2057
#define IDC_TEXT_TRAIL_LONG 2058
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/mmsys/lang/de-DE.rc b/reactos/dll/cpl/mmsys/lang/de-DE.rc
index cfcfb47cbaf..81e3d437828 100644
--- a/reactos/dll/cpl/mmsys/lang/de-DE.rc
+++ b/reactos/dll/cpl/mmsys/lang/de-DE.rc
@@ -12,10 +12,10 @@ BEGIN
CONTROL "",IDC_VOLUME_TRACKBAR, "msctls_trackbar32", TBS_AUTOTICKS | TBS_ENABLESELRANGE | TBS_BOTTOM | TBS_HORZ | WS_TABSTOP, 65, 45, 140, 14
LTEXT "Niedrig",-1,62,66,30,17
LTEXT "Hoch",-1,195,66,30,17
- CHECKBOX "Stu&mmschalten", IDC_MUTE_CHECKBOX, 50, 78, 140, 10
+ CHECKBOX "Stu&mm schalten", IDC_MUTE_CHECKBOX, 50, 78, 140, 10
CHECKBOX "Lautstrkeregelungs-&Icon in der Taskleiste zeigen", IDC_ICON_IN_TASKBAR, 50, 92, 170, 10
PUSHBUTTON "Er&weitert", IDC_ADVANCED_BTN, 150,105,75,15
- GROUPBOX "Lautsprechereintellungen", IDC_SPEAKER_SET_BTN, 7,140,230,80
+ GROUPBOX "Lautsprechereinstellungen", IDC_SPEAKER_SET_BTN, 7,140,230,80
CONTROL "", IDC_SPEAKIMG, "Static", SS_OWNERDRAW, 4, 160, 70, 70
LTEXT "Verwenden Sie die unteren Einstellungen um die Lautstre einzelner Gerte und andere Einstellungen zu verndern.",-1,70,155,150,36
PUSHBUTTON "&Lautstrke...", IDC_SPEAKER_VOL_BTN, 70,195,75,15
@@ -24,18 +24,18 @@ END
IDD_SOUNDS DIALOGEX 0, 0, 246, 228
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Sounds"
+CAPTION "Klnge"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "Ein Soundschema ist eine Kollektion von Sounds, die bestimmten Programmereignissen in ReactOS zugordnet sind. Sie knnen ein existierendes Schema anwhlen oder ein modifiziertes speichern.",-1,8,7,230,40
- LTEXT "Sounds&chema:",-1,8,42,150,17
+ LTEXT "Ein Klangschema ist eine Sammlung von Klngen, die bestimmten Programmereignissen in ReactOS zugordnet sind. Sie knnen ein existierendes Schema auswhlen oder ein modifiziertes speichern.",-1,8,7,230,40
+ LTEXT "Klang&schema:",-1,8,42,150,17
COMBOBOX IDC_SOUND_SCHEME, 8, 53, 230, 46, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Sp&eichern unter...", IDC_SAVEAS_BTN, 120,70,65,15
PUSHBUTTON "&Lschen", IDC_DELETE_BTN, 188,70,50,15
- LTEXT "Um Sounds zu ndern, klicken Sie auf ein Programmereignis in der folgenden Liste und whlen Sie einen Sound. Sie knnen nderungen als neue Soundschemata speichern.",-1,8,90,230,40
- LTEXT "&Pogrammereignisse:",-1,8,118,150,17
+ LTEXT "Um Klnge zu ndern, klicken Sie auf ein Programmereignis in der folgenden Liste und whlen Sie einen Klang aus. Sie knnen nderungen als neue Klangschemata speichern.",-1,8,90,230,40
+ LTEXT "&Programmereignisse:",-1,8,118,150,17
CONTROL "", IDC_SCHEME_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, 8, 130, 230, 60, WS_EX_CLIENTEDGE
- LTEXT "&Sounds:", IDC_TEXT_SOUND,8,194,80,17, WS_DISABLED
+ LTEXT "&Klnge:", IDC_TEXT_SOUND,8,194,80,17, WS_DISABLED
COMBOBOX IDC_SOUND_LIST, 8, 205, 155, 146, CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | WS_DISABLED
PUSHBUTTON "", IDC_PLAY_SOUND, 168,205,15,15, WS_DISABLED | BS_ICON
PUSHBUTTON "&Durchsuchen...", IDC_BROWSE_SOUND, 188,205,81,15, WS_DISABLED
@@ -52,7 +52,7 @@ BEGIN
COMBOBOX IDC_DEVICE_PLAY_LIST, 50, 30, 180, 46, CBS_DROPDOWNLIST
PUSHBUTTON "&Lautstrke...", IDC_VOLUME1_BTN, 85,47,70,15
PUSHBUTTON "&Erweitert...", IDC_ADV2_BTN, 160,47,70,15
- GROUPBOX "Soundaufnahme", -1, 7,75,230,60
+ GROUPBOX "Tonaufnahme", -1, 7,75,230,60
ICON IDI_MICROPHONE_ICON, IDI_MICROPHONE_ICON, 15,88,32,32
LTEXT "S&tandardgert:",-1,50,88,80,17
COMBOBOX IDC_DEVICE_REC_LIST, 50, 98, 180, 46, CBS_DROPDOWNLIST
@@ -101,7 +101,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBL
CAPTION "Schema speichern unter"
FONT 8, "MS Shell Dlg"
BEGIN
- LTEXT "&Dieses Soundschema speichern unter:", -1, 7, 7, 212, 9
+ LTEXT "&Dieses Klangschema speichern unter:", -1, 7, 7, 212, 9
EDITTEXT 8960, 7, 17, 211, 14, ES_AUTOHSCROLL
DEFPUSHBUTTON "OK", IDOK, 93, 36, 60, 14
PUSHBUTTON "Abbrechen", IDCANCEL, 157, 36, 60, 14
@@ -136,8 +136,8 @@ BEGIN
LTEXT "Voll", 8498, 214, 56, 21, 9
LTEXT "Gut", 8499, 128, 123, 21, 10
LTEXT "Beste", 8500, 214, 123, 23, 9
- LTEXT "Diese Zeichenfolge beschreibt die Hardwareeinstellung fr das Capture Gert", 5399, 13, 145, 227, 21
- LTEXT "Diese Zeichenfolge beschreibt die Hardwareeinstellung fr das Render Gert", 5398, 13, 78, 227, 22
+ LTEXT "Diese Zeichenfolge beschreibt die Hardwareeinstellung fr das Capture-Gert", 5399, 13, 145, 227, 21
+ LTEXT "Diese Zeichenfolge beschreibt die Hardwareeinstellung fr das Render-Gert", 5398, 13, 78, 227, 22
END
IDD_PERFORMANCE2 DIALOG 0, 0, 257, 218
@@ -157,8 +157,8 @@ BEGIN
LTEXT "Voll", 8498, 217, 46, 19, 9
LTEXT "Gut", 8499, 125, 103, 24, 10
LTEXT "Beste", 8500, 217, 103, 19, 9
- LTEXT "Diese Zeichenfolge beschreibt die Hardwareeinstellung fr das Capture Gert", 5399, 13, 125, 222, 21
- LTEXT "Diese Zeichenfolge beschreibt die Hardwareeinstellung fr das Render Gert", 5398, 13, 68, 218, 24
+ LTEXT "Diese Zeichenfolge beschreibt die Hardwareeinstellung fr das Capture-Gert", 5399, 13, 125, 222, 21
+ LTEXT "Diese Zeichenfolge beschreibt die Hardwareeinstellung fr das Render-Gert", 5398, 13, 68, 218, 24
END
IDD_SETUP1 DIALOG 0, 0, 227, 206
@@ -168,11 +168,11 @@ FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "ReactOS Audio", 10243, 7, 5, 213, 192
ICON 4393, 10241, 26, 26, 20, 20
- LTEXT "Dieser Computer kann keine Audiodaten abspielen, da der ReactOS Audio-Dienst nicht aktiviert ist.", 10245, 60, 25, 150, 40
+ LTEXT "Dieser Computer kann keine Audiodaten abspielen, da der ReactOS-Audiodienst nicht aktiviert ist.", 10245, 60, 25, 150, 40
AUTOCHECKBOX "&ReactOS Audio aktivieren", 10253, 60, 68, 150, 9
LTEXT "Informationen", 10246, 58, 87, 150, 11
LTEXT "1. Sie mssen Administrator sein, um diesen Dienst aktivieren zu knnen. Wenn Sie nicht als Administrator angemeldet sind, werden Sie nach dem Administaratornamen und Passwort gefragt.", 10247, 60, 100, 150, 40
- LTEXT "2. Nach Aktivierung des ReactOS Audio Dienstes mssen Sie den Computer neustarten.", 10248, 60, 140, 150, 40
+ LTEXT "2. Nach Aktivierung des ReactOS-Audiodienstes mssen Sie den Computer neu starten.", 10248, 60, 140, 150, 40
END
IDD_MULTICHANNEL DIALOG 0, 0, 227, 218
@@ -224,17 +224,17 @@ FONT 8, "MS Shell Dlg"
BEGIN
GROUPBOX "ReactOS Audio", 10259, 7, 5, 213, 192
ICON 4394, 10257, 25, 25, 20, 20
- LTEXT "Der ReactOS Audio Dienst ist nun aktiviert. Dennoch kann es sein, dass die Audiowiedergabe nicht richtig funktioniert, bis Sie ReactOS neugestartet haben. Wenn Sie jetzt neustarten wollen, speichern Sie Ihre Arbeit und beenden Sie alle Programme.", 10261, 60, 25, 150, 50
- LTEXT "Um ReactOS neuzustarten, klicken Sie OK.", 10262, 60, 75, 150, 20
- LTEXT "Wenn Sie abbrechen, mssen Sie spter neustarten, um sichergehen zu knnen, dass die Audiowiedergabe richtig funktioniert.", 10263, 60, 100, 150, 40
+ LTEXT "Der ReactOS-Audiodienst ist nun aktiviert. Dennoch kann es sein, dass die Audiowiedergabe nicht richtig funktioniert, bis Sie ReactOS neu gestartet haben. Wenn Sie jetzt neu starten wollen, speichern Sie Ihre Arbeit und beenden Sie alle Programme.", 10261, 60, 25, 150, 50
+ LTEXT "Um ReactOS neu zu starten, klicken Sie auf OK.", 10262, 60, 75, 150, 20
+ LTEXT "Wenn Sie abbrechen, mssen Sie spter neu starten, um sichergehen zu knnen, dass die Audiowiedergabe richtig funktioniert.", 10263, 60, 100, 150, 40
END
STRINGTABLE
BEGIN
- IDS_CPLNAME "Sounds und Audio Gerte"
- IDS_CPLDESCRIPTION "ndert das Sound-Schema Ihres Computers, oder konfiguriert die Einstellungen fr Ihre Lautsprecher und Aufnahmegerte."
+ IDS_CPLNAME "Klnge und Audiogerte"
+ IDS_CPLDESCRIPTION "ndert das Klangschema Ihres Computers oder konfiguriert die Einstellungen fr Ihre Lautsprecher und Aufnahmegerte."
IDS_NO_SOUND "(Kein)"
- IDS_NO_DEVICES "No Devices"
+ IDS_NO_DEVICES "Keine Gerte"
5825 "Programmfehler"
5826 "Programm schlieen"
diff --git a/reactos/dll/cpl/mmsys/mmsys.h b/reactos/dll/cpl/mmsys/mmsys.h
index 87d313f4b8d..ed6c480a0c0 100644
--- a/reactos/dll/cpl/mmsys/mmsys.h
+++ b/reactos/dll/cpl/mmsys/mmsys.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_MMSYS_H
-#define __CPL_MMSYS_H
+#pragma once
//typedef LONG (CALLBACK *APPLET_PROC)(VOID);
@@ -64,6 +63,4 @@ AudioDlgProc(HWND hwndDlg,
WPARAM wParam,
LPARAM lParam);
-#endif /* __CPL_MMSYS_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/mmsys/resource.h b/reactos/dll/cpl/mmsys/resource.h
index c8511da90c0..6423de9fe37 100644
--- a/reactos/dll/cpl/mmsys/resource.h
+++ b/reactos/dll/cpl/mmsys/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* Icons */
#define IDI_CPLICON 3004
@@ -77,6 +76,4 @@
#define IDS_NO_SOUND 1002
#define IDS_NO_DEVICES 1003
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/odbccp32/odbccp32.h b/reactos/dll/cpl/odbccp32/odbccp32.h
index e1e7e3324e1..8a534c4b038 100644
--- a/reactos/dll/cpl/odbccp32/odbccp32.h
+++ b/reactos/dll/cpl/odbccp32/odbccp32.h
@@ -1,5 +1,4 @@
-#ifndef ODBCCP32_H__ // odbccp32.h
-#define ODBCCP32_H__
+#pragma once
#include
#include
@@ -8,5 +7,3 @@
extern HINSTANCE hApplet;
extern HMODULE hLibrary;
-
-#endif /* end of ODBCCP32_H__ */
diff --git a/reactos/dll/cpl/powercfg/lang/de-DE.rc b/reactos/dll/cpl/powercfg/lang/de-DE.rc
index ff72ddebaa9..b209830224f 100644
--- a/reactos/dll/cpl/powercfg/lang/de-DE.rc
+++ b/reactos/dll/cpl/powercfg/lang/de-DE.rc
@@ -47,7 +47,7 @@ BEGIN
CONTROL "Slider1",IDC_ALARMBAR1,"msctls_trackbar32",TBS_HORZ |
TBS_AUTOTICKS | WS_TABSTOP,30,40,170,15
LTEXT "100%",-1,215,40,25,10
- PUSHBUTTON "Alar&m Action...",-1,20,70,70,15,WS_DISABLED
+ PUSHBUTTON "Alar&maktion...",-1,20,70,70,15,WS_DISABLED
LTEXT "Benachrichtigung:",-1,95,70,60,10
LTEXT "Unbekannt",IDC_ALARMMSG1,155,70,95,10
LTEXT "Aktion:",-1,95,80,45,10
@@ -63,7 +63,7 @@ BEGIN
CONTROL "Slider1",IDC_ALARMBAR2,"msctls_trackbar32",TBS_HORZ |
TBS_AUTOTICKS | WS_TABSTOP,30,140,170,15
LTEXT "100%",-1,215,140,25,10
- PUSHBUTTON "Alar&m Action...",-1,20,170,70,15,WS_DISABLED
+ PUSHBUTTON "Alar&maktion...",-1,20,170,70,15,WS_DISABLED
LTEXT "Benachrichtigung:",-1,95,170,60,10
LTEXT "Unbekannt",IDC_ALARMMSG2,155,170,95,10
LTEXT "Aktion:",-1,95,180,45,10
@@ -122,7 +122,7 @@ BEGIN
IDS_CPLNAME_1 "Energieoptionen"
IDS_CPLDESCRIPTION_1 "Konfiguriert die Energiespareinstellungen fr den Computer."
IDS_PROCENT "%i%%"
- IDS_SOUND "Sound"
+ IDS_SOUND "Klang"
IDS_TEXT "Text"
IDS_CONFIG1 "Einstellungen fr Energieschema %s."
IDS_CONFIG2 "Erweiterte Einstellungen fr %s."
@@ -134,7 +134,7 @@ BEGIN
IDS_PowerActionNone1 "Keine Aktion"
IDS_PowerActionUnknown "Unbekannt"
- IDS_PowerActionSleep "In den Standbymodus wechseln"
+ IDS_PowerActionSleep "In den Stromsparmodus wechseln"
IDS_PowerActionHibernate "In den Ruhezustand wechseln"
IDS_PowerActionShutdown "Computer herunterfahren"
IDS_PowerActionRestart "Computer neu starten"
@@ -159,6 +159,6 @@ BEGIN
IDS_TIMEOUT15 "Nach 5 Stunden"
IDS_TIMEOUT16 "Nie"
- IDS_DEL_SCHEME "Sind Sie sicher, dass Sie das Energieschema lschen wollen?"
+ IDS_DEL_SCHEME "Sind Sie sich sicher, dass Sie das Energieschema lschen wollen?"
IDS_DEL_SCHEME_TITLE "Schema lschen"
END
diff --git a/reactos/dll/cpl/powercfg/powercfg.h b/reactos/dll/cpl/powercfg/powercfg.h
index 1a0fc7d24c1..27b54e596a8 100644
--- a/reactos/dll/cpl/powercfg/powercfg.h
+++ b/reactos/dll/cpl/powercfg/powercfg.h
@@ -1,5 +1,4 @@
-#ifndef POWERCFG_H
-#define POWERCFG_H
+#pragma once
#include "powrprof.h"
@@ -23,6 +22,4 @@ INT_PTR CALLBACK AlarmsDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lP
INT_PTR CALLBACK AdvancedDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK HibernateDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
-#endif /* __CPL_SAMPLE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/powercfg/resource.h b/reactos/dll/cpl/powercfg/resource.h
index e98c6023231..5993106ecfb 100644
--- a/reactos/dll/cpl/powercfg/resource.h
+++ b/reactos/dll/cpl/powercfg/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* metrics */
#define PROPSHEETWIDTH 246
@@ -124,6 +123,4 @@
#define IDS_CPLDESCRIPTION_1 901
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/sysdm/lang/de-DE.rc b/reactos/dll/cpl/sysdm/lang/de-DE.rc
index e87d23df567..92282242d97 100644
--- a/reactos/dll/cpl/sysdm/lang/de-DE.rc
+++ b/reactos/dll/cpl/sysdm/lang/de-DE.rc
@@ -53,12 +53,12 @@ END
IDD_SYSSETTINGS DIALOGEX 0, 0, 221, 106
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION
-CAPTION "System Einstellungen"
+CAPTION "Systemeinstellungen"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- GROUPBOX "Versions Info",IDC_STATIC,6,3,210,73
+ GROUPBOX "Versionsinfo",IDC_STATIC,6,3,210,73
CONTROL "Als Workstation identifizieren",IDC_REPORTASWORKSTATION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,57,110,10
- LTEXT "ReactOS ist als Server OS konzipiert und identifiziert sich auch als solches. Diese Einstellung ndert das Verhalten fr Anwendungen.",IDC_STATIC,15,15,183,41
+ LTEXT "ReactOS ist als Serversystem konzipiert worden und identifiziert sich auch als solches. Diese Einstellung ndert das Verhalten fr Anwendungen.",IDC_STATIC,15,15,183,41
PUSHBUTTON "OK",IDOK,166,83,50,14
END
@@ -68,9 +68,9 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Erweitert"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
- LTEXT "Administrator-Rechte werden fr die meisten dieser Einstellungen bentigt.", IDC_STATIC, 12, 5, 242, 8
+ LTEXT "Administratorrechte werden fr die meisten dieser Einstellungen bentigt.", IDC_STATIC, 12, 5, 242, 8
GROUPBOX "Leistung", IDC_STATIC, 6, 18, 244, 50
- LTEXT "Mit Leistungs-Optionen knnen Sie einstellen, wie Programme Speicher benutzen sollen. Diese Einstellungen beeinflussen die Leistung ihres Computers.", IDC_STATIC, 16, 29, 210, 24
+ LTEXT "Mit Leistungsoptionen knnen Sie einstellen, wie Programme Speicher benutzen sollen. Diese Einstellungen beeinflussen die Leistung ihres Computers.", IDC_STATIC, 16, 29, 210, 24
PUSHBUTTON "Einstellungen", IDC_PERFOR, 194, 48, 50, 14
GROUPBOX "Benutzerprofile", IDC_STATIC, 6,75,244,48
@@ -78,7 +78,7 @@ BEGIN
PUSHBUTTON "Einstellungen", IDC_USERPROFILE, 194, 103, 50, 14
GROUPBOX "Starten und Wiederherstellen", IDC_STATIC, 6, 131, 244, 52
- LTEXT "Start- und Wiederherstellungs-Einstellungen regeln, wie der Computer gestartet werden soll und was passieren soll, wenn ein Fehler auftritt.", IDC_STATIC, 16, 144, 210, 27
+ LTEXT "Start- und Wiederherstellungseinstellungen regeln, wie der Computer gestartet werden soll und was passieren soll, wenn ein Fehler auftritt.", IDC_STATIC, 16, 144, 210, 27
PUSHBUTTON "Einstellungen", IDC_STAREC, 194, 162, 50, 14
PUSHBUTTON "Umgebungsvariablen", IDC_ENVVAR, 84, 192, 80, 14
@@ -88,12 +88,12 @@ END
IDD_HARDWAREPROFILES DIALOGEX 6, 18, 254, 234
STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
-CAPTION "Hardware-Profile"
+CAPTION "Hardwareprofile"
FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_HARDPROF, IDC_STATIC, 8, 11, 18, 20, SS_ICON
- LTEXT "Sie knnen Hardware-Profile fr verschiedene Hardware-Konfigurationen einrichten. Beim Starten knnen Sie dann das Profil auswhlen, welches benutzt werden soll.", IDC_STATIC, 46, 11, 200, 25
- LTEXT "Verfgbare Hardware-Profile:", IDC_STATIC, 8, 41, 120, 8
+ LTEXT "Sie knnen Hardwareprofile fr verschiedene Hardware-Konfigurationen einrichten. Beim Starten knnen Sie dann das Profil auswhlen, welches benutzt werden soll.", IDC_STATIC, 46, 11, 200, 25
+ LTEXT "Verfgbare Hardwareprofile:", IDC_STATIC, 8, 41, 120, 8
LISTBOX IDC_HRDPROFLSTBOX, 8, 52, 215, 54, LBS_NOTIFY
PUSHBUTTON "", IDC_HRDPROFUP, 232, 59, 15, 14, BS_ICON
PUSHBUTTON "", IDC_HRDPROFDWN, 232, 79, 15, 14, BS_ICON
@@ -102,11 +102,11 @@ BEGIN
PUSHBUTTON "&Umbenennen", IDC_HRDPROFRENAME, 118, 106, 50, 14
PUSHBUTTON "&Lschen", IDC_HRDPROFDEL, 173, 106, 50, 14
- GROUPBOX "Hardware-Profil Auswahl", IDC_STATIC, 7, 130, 240, 75
+ GROUPBOX "Hardwareprofil-Auswahl", IDC_STATIC, 7, 130, 240, 75
LTEXT "Wenn ReactOS startet:", IDC_STATIC, 14, 142, 210, 8
- AUTORADIOBUTTON "&Warten, bis ein Hardware-Profil gewhlt wird", IDC_HRDPROFWAIT, 14, 158, 170, 8, WS_GROUP
- AUTORADIOBUTTON "&Das erste Profil aus der Liste whlen, wenn ich kein Profil innerhalb von", IDC_HRDPROFSELECT, 14, 173, 200, 8
- LTEXT "Sekunden gewhlt wird", IDC_STATIC, 65, 187, 80, 8
+ AUTORADIOBUTTON "&Warten, bis ein Hardwareprofil gewhlt wird", IDC_HRDPROFWAIT, 14, 158, 170, 8, WS_GROUP
+ AUTORADIOBUTTON "&Das erste Profil aus der Liste auswhlen, wenn ich kein Profil innerhalb von", IDC_HRDPROFSELECT, 14, 173, 200, 8
+ LTEXT "Sekunden gewhlt habe", IDC_STATIC, 65, 187, 80, 8
EDITTEXT IDC_HRDPROFEDIT, 25, 185, 35, 12
CONTROL "", IDC_HRDPROFUPDWN, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 25, 185, 7, 10
@@ -136,7 +136,7 @@ CAPTION "Benutzerprofile"
FONT 8, "MS Shell Dlg"
BEGIN
ICON IDI_USERPROF, IDC_STATIC, 6, 11, 16, 16, SS_ICON
- LTEXT "Benutzerprofile enthalten Desktop-Einstellungen und andere Informationen bezglich ihrer Anmeldung. Sie knnen unterschiedliche Profile, fr jeden Computer, den Sie benutzen, einrichten, oder aber auch ein einziges Profil whlen, welches auf jedem Computer gleich ist.",
+ LTEXT "Benutzerprofile enthalten Desktopeinstellungen und andere Informationen bezglich ihrer Anmeldung. Sie knnen unterschiedliche Profile, fr jeden Computer, den Sie benutzen, einrichten, oder aber auch ein einziges Profil whlen, welches auf jedem Computer gleich ist.",
IDC_STATIC, 40, 7, 204, 40
LTEXT "Auf diesem Computer gespeicherte Profile:", IDC_STATIC, 16, 51, 204, 9
CONTROL "", IDC_USERPROFILE_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,
@@ -157,8 +157,8 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS
CAPTION "Starten und Wiederherstellen"
FONT 8, "MS Shell Dlg"
BEGIN
- GROUPBOX "System-Start", IDC_STATIC, 7, 12, 238, 95
- LTEXT "Standard Betriebs&system:", IDC_STATIC, 14, 26, 100, 8
+ GROUPBOX "Systemstart", IDC_STATIC, 7, 12, 238, 95
+ LTEXT "Standard-Betriebs&system:", IDC_STATIC, 14, 26, 100, 8
COMBOBOX IDC_STRECOSCOMBO, 14, 37, 224, 46, CBS_DROPDOWNLIST
AUTOCHECKBOX "&Anzeigedauer der Betriebssystem-Liste:", IDC_STRECLIST, 14, 56, 150, 8
EDITTEXT IDC_STRRECLISTEDIT, 185, 54, 30, 12, ES_NUMBER
@@ -168,10 +168,10 @@ BEGIN
EDITTEXT IDC_STRRECRECEDIT, 185, 68, 30, 12, ES_NUMBER
CONTROL "", IDC_STRRECRECUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13
LTEXT "Sek.", IDC_STATIC, 221, 70, 14, 8
- LTEXT "Um die Start-Optionen manuell zu bearbeiten, klicken Sie auf ""Bearbeiten"".", IDC_STATIC, 14, 84, 170, 18
+ LTEXT "Um die Startoptionen manuell zu bearbeiten, klicken Sie auf ""Bearbeiten"".", IDC_STATIC, 14, 84, 170, 18
PUSHBUTTON "Be&arbeiten", IDC_STRRECEDIT, 188, 87, 50, 14
- GROUPBOX "System-Fehler", IDC_STATIC, 7, 111, 238, 140
+ GROUPBOX "Systemfehler", IDC_STATIC, 7, 111, 238, 140
AUTOCHECKBOX "Ereignis in das Systemprotokoll &eintragen", IDC_STRRECWRITEEVENT, 14, 124, 148, 10
AUTOCHECKBOX "Administrator-Warnmeldung &senden", IDC_STRRECSENDALERT, 14, 138, 148, 10
AUTOCHECKBOX "Automatisch &neu starten", IDC_STRRECRESTART, 14, 152, 145, 10
@@ -234,7 +234,7 @@ BEGIN
PUSHBUTTON "&Neu...", IDC_USER_VARIABLE_NEW, 80, 90, 50, 14
PUSHBUTTON "Be&arbeiten...", IDC_USER_VARIABLE_EDIT, 134, 90, 50, 14
PUSHBUTTON "&Lschen", IDC_USER_VARIABLE_DELETE, 188, 90, 50, 14
- GROUPBOX "System-Variablen", IDC_STATIC, 7, 116, 238, 100
+ GROUPBOX "Systemvariablen", IDC_STATIC, 7, 116, 238, 100
CONTROL "", IDC_SYSTEM_VARIABLE_LIST, "SysListView32",
LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOSORTHEADER |
WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 14, 129, 224, 58, WS_EX_CLIENTEDGE
diff --git a/reactos/dll/cpl/sysdm/resource.h b/reactos/dll/cpl/sysdm/resource.h
index b111e5c3171..f0918a35d9f 100644
--- a/reactos/dll/cpl/sysdm/resource.h
+++ b/reactos/dll/cpl/sysdm/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
#define IDC_STATIC -1
@@ -157,5 +156,3 @@
#define RTDATA 1503
#define IDS_DEVS 2000
-
-#endif /* __CPL_RESOURCE_H */
diff --git a/reactos/dll/cpl/telephon/resource.h b/reactos/dll/cpl/telephon/resource.h
index a4be13c91aa..9d2319a8bb0 100644
--- a/reactos/dll/cpl/telephon/resource.h
+++ b/reactos/dll/cpl/telephon/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
+#pragma once
/* icons */
#define IDI_CPLSYSTEM 100
@@ -8,6 +7,4 @@
#define IDS_CPLSYSTEMNAME 1001
#define IDS_CPLSYSTEMDESCRIPTION 2001
-#endif /* __CPL_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/timedate/lang/de-DE.rc b/reactos/dll/cpl/timedate/lang/de-DE.rc
index 5b0e99f3c48..7221427d49f 100644
--- a/reactos/dll/cpl/timedate/lang/de-DE.rc
+++ b/reactos/dll/cpl/timedate/lang/de-DE.rc
@@ -40,11 +40,11 @@ END
IDD_INETTIMEPAGE DIALOGEX 0, 0, 252, 146
STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
-CAPTION "Internet Zeit"
+CAPTION "Internetzeit"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
- CONTROL "Automatisch mit einem Internet Zeitserver synchronisieren", IDC_AUTOSYNC,
+ CONTROL "Automatisch mit einem Internetzeitserver synchronisieren", IDC_AUTOSYNC,
"Button", BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP,11,7,241,10
LTEXT "Server:", -1, 34, 22, 28, 13
PUSHBUTTON "Jetzt updaten", IDC_UPDATEBUTTON, 187, 22, 49, 14
diff --git a/reactos/dll/cpl/timedate/resource.h b/reactos/dll/cpl/timedate/resource.h
index 501500a14de..b420c359703 100644
--- a/reactos/dll/cpl/timedate/resource.h
+++ b/reactos/dll/cpl/timedate/resource.h
@@ -1,6 +1,4 @@
-#ifndef __CPL_RESOURCE_H
-#define __CPL_RESOURCE_H
-
+#pragma once
#define IDC_CPLICON 1
@@ -38,5 +36,3 @@
#define IDS_INETTIMENEXTSYNC 1007
#define IDS_INETTIMESYNCING 1008
#define IDS_INETTIMEERROR 1009
-
-#endif /* __CPL_RESOURCE_H */
diff --git a/reactos/dll/cpl/timedate/timedate.h b/reactos/dll/cpl/timedate/timedate.h
index 54915563b90..ced96a12eec 100644
--- a/reactos/dll/cpl/timedate/timedate.h
+++ b/reactos/dll/cpl/timedate/timedate.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_SAMPLE_H
-#define __CPL_SAMPLE_H
+#pragma once
#include
#include
@@ -112,6 +111,4 @@ typedef struct _NMMCCAUTOUPDATE
BOOL RegisterMonthCalControl(IN HINSTANCE hInstance);
VOID UnregisterMonthCalControl(IN HINSTANCE hInstance);
-#endif /* __CPL_SAMPLE_H */
-
/* EOF */
diff --git a/reactos/dll/cpl/usrmgr/lang/de-DE.rc b/reactos/dll/cpl/usrmgr/lang/de-DE.rc
new file mode 100644
index 00000000000..c8fa221989d
--- /dev/null
+++ b/reactos/dll/cpl/usrmgr/lang/de-DE.rc
@@ -0,0 +1,223 @@
+LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
+
+/*
+ * Attention Translators:
+ * DO NOT TRANSLATE THESE RESOURCES YET!
+ */
+
+/* Dialogs */
+
+IDD_USERS DIALOGEX DISCARDABLE 0, 0, 252, 223
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Benutzer"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "", IDC_USERS_LIST, "SysListView32", LVS_REPORT | LVS_EDITLABELS | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,
+ 7, 7, 238, 85, WS_EX_CLIENTEDGE
+END
+
+
+IDD_GROUPS DIALOGEX DISCARDABLE 0, 0, 252, 223
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Gruppen"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ CONTROL "", IDC_GROUPS_LIST, "SysListView32", LVS_REPORT | LVS_EDITLABELS | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,
+ 7, 7, 238, 85, WS_EX_CLIENTEDGE
+END
+
+
+IDD_EXTRA DIALOGEX DISCARDABLE 0, 0, 252, 223
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Extra"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Dieser Platz wurde absichtlich leer gelassen.", IDC_STATIC, 66, 90, 112, 8
+END
+
+
+IDD_USER_GENERAL DIALOGEX DISCARDABLE 0, 0, 252, 223
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Allgemein"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "", IDC_USER_GENERAL_NAME, 7, 12, 112, 8
+ LTEXT "Voller Name:", -1, 7, 46, 63, 8
+ EDITTEXT IDC_USER_GENERAL_FULL_NAME,77,43,168,13,ES_AUTOHSCROLL
+ LTEXT "Beschreibung:", -1, 7, 64, 63, 8
+ EDITTEXT IDC_USER_GENERAL_DESCRIPTION,77,61,168,13,ES_AUTOHSCROLL
+ AUTOCHECKBOX "Benutzer muss das Passwort bei der ersten Anmeldung ändern",IDC_USER_GENERAL_FORCE_CHANGE,7,82,210,10
+ AUTOCHECKBOX "Benutzer kann das Passwort nicht ändern",IDC_USER_GENERAL_CANNOT_CHANGE,7,95,210,10
+ AUTOCHECKBOX "Passwort läuft nie ab",IDC_USER_GENERAL_NEVER_EXPIRES,7,108,210,10
+ AUTOCHECKBOX "Konto ist deativiert",IDC_USER_GENERAL_DISABLED,7,121,210,10
+ AUTOCHECKBOX "Konto ist gesperrt",IDC_USER_GENERAL_LOCKED,7,134,210,10
+END
+
+
+IDD_USER_MEMBERSHIP DIALOGEX DISCARDABLE 0, 0, 252, 223
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Mitgliedschaft"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Mitglied von:", -1, 7, 7, 56, 8
+ CONTROL "", IDC_USER_MEMBERSHIP_LIST, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,
+ 7, 18, 238, 173, WS_EX_CLIENTEDGE
+ PUSHBUTTON "Hzfg...", IDC_USER_MEMBERSHIP_ADD, 7, 197, 50, 14
+ PUSHBUTTON "Entfernen", IDC_USER_MEMBERSHIP_REMOVE, 61, 197, 50, 14, WS_DISABLED
+END
+
+
+IDD_USER_PROFILE DIALOGEX DISCARDABLE 0, 0, 252, 223
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Profil"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ GROUPBOX "Benutzerprofil", -1, 7, 7, 238, 54
+ LTEXT "Profilpfad:", -1, 16, 22, 55, 8
+ EDITTEXT IDC_USER_PROFILE_PATH, 78, 19, 160, 13, ES_AUTOHSCROLL
+ LTEXT "Anmeldeskript:", -1, 16, 40, 55, 8
+ EDITTEXT IDC_USER_PROFILE_SCRIPT, 78, 37, 160, 13, ES_AUTOHSCROLL
+
+ GROUPBOX "Benutzerverzeichnis", -1, 7, 68, 238, 54
+ AUTORADIOBUTTON "Lokaler Pfad:", IDC_USER_PROFILE_LOCAL, 16, 83, 60, 10
+ AUTORADIOBUTTON "Verbinden:", IDC_USER_PROFILE_REMOTE, 16, 100, 60, 10
+ EDITTEXT IDC_USER_PROFILE_LOCAL_PATH, 78, 81, 160, 13, ES_AUTOHSCROLL
+ COMBOBOX IDC_USER_PROFILE_DRIVE, 78, 99, 26, 160, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL
+ LTEXT "to:", -1, 112, 101, 12, 8
+ EDITTEXT IDC_USER_PROFILE_REMOTE_PATH, 130, 99, 108, 13, ES_AUTOHSCROLL
+END
+
+
+IDD_GROUP_GENERAL DIALOGEX DISCARDABLE 0, 0, 252, 223
+STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION
+CAPTION "Allgemein"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "", IDC_GROUP_GENERAL_NAME, 7, 12, 112, 8
+ LTEXT "Beschreibung:", -1, 7, 45, 46, 8
+ EDITTEXT IDC_GROUP_GENERAL_DESCRIPTION,65,42,180,13,ES_AUTOHSCROLL
+ LTEXT "Mitglieder:", -1, 7, 63, 45, 8
+ CONTROL "", IDC_GROUP_GENERAL_MEMBERS, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,
+ 7, 74, 238, 117, WS_EX_CLIENTEDGE
+ PUSHBUTTON "Hzfg...", IDC_GROUP_GENERAL_ADD, 7, 197, 50, 14
+ PUSHBUTTON "Entfernen", IDC_GROUP_GENERAL_REMOVE, 61, 197, 50, 14, WS_DISABLED
+END
+
+
+IDD_CHANGE_PASSWORD DIALOGEX DISCARDABLE 0, 0, 267, 74
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT
+CAPTION "Passwort ändern"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ EDITTEXT IDC_EDIT_PASSWORD1,107,7,153,14,ES_AUTOHSCROLL | ES_PASSWORD
+ RTEXT "Neues Passwort!", -1,7,10,96,8
+ EDITTEXT IDC_EDIT_PASSWORD2,107,25,153,14,ES_AUTOHSCROLL | ES_PASSWORD
+ RTEXT "Passwort wiederholen:", -1,7,28,96,8
+ DEFPUSHBUTTON "OK",IDOK,156,53,50,14
+ PUSHBUTTON "Abbrechen",IDCANCEL,210,53,50,14
+END
+
+
+IDD_USER_NEW DIALOGEX DISCARDABLE 0, 0, 267, 200
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT
+CAPTION "Neuer Benutzer"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ EDITTEXT IDC_USER_NEW_NAME,107,7,153,14,ES_AUTOHSCROLL
+ RTEXT "Benutzername:", -1,7,10,96,8
+ EDITTEXT IDC_USER_NEW_FULL_NAME,107,25,153,14,ES_AUTOHSCROLL
+ RTEXT "Vollständiger Name:", -1,7,28,96,8
+ EDITTEXT IDC_USER_NEW_DESCRIPTION,107,43,153,14,ES_AUTOHSCROLL
+ RTEXT "Beschreibung:", -1,7,46,96,8
+ EDITTEXT IDC_USER_NEW_PASSWORD1,107,67,153,14,ES_AUTOHSCROLL | ES_PASSWORD
+ RTEXT "Passwort:", -1,7,70,96,8
+ EDITTEXT IDC_USER_NEW_PASSWORD2,107,85,153,14,ES_AUTOHSCROLL | ES_PASSWORD
+ RTEXT "Passwort wiederholen:", -1,7,88,96,8
+ AUTOCHECKBOX "Benutzer muss das Passwort bei der ersten Anmeldung ändern",IDC_USER_NEW_FORCE_CHANGE,7,109,200,10
+ AUTOCHECKBOX "Benutzer kann das Passwort nicht ändern",IDC_USER_NEW_CANNOT_CHANGE,7,123,200,10,WS_DISABLED
+ AUTOCHECKBOX "Passwort läuft nie ab",IDC_USER_NEW_NEVER_EXPIRES,7,137,200,10,WS_DISABLED
+ AUTOCHECKBOX "Konto ist deaktiviert",IDC_USER_NEW_DISABLED,7,151,200,10
+ DEFPUSHBUTTON "OK",IDOK,156,179,50,14,WS_DISABLED
+ PUSHBUTTON "Abbrechen",IDCANCEL,210,179,50,14
+END
+
+
+IDD_GROUP_NEW DIALOGEX DISCARDABLE 0, 0, 267, 74
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT
+CAPTION "Neue Gruppe"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ EDITTEXT IDC_GROUP_NEW_NAME,107,7,153,14,ES_AUTOHSCROLL
+ RTEXT "Gruppenname:", -1,7,10,96,8
+ EDITTEXT IDC_GROUP_NEW_DESCRIPTION,107,25,153,14,ES_AUTOHSCROLL
+ RTEXT "Beschreibung:", -1,7,28,96,8
+ DEFPUSHBUTTON "OK",IDOK,156,53,50,14,WS_DISABLED
+ PUSHBUTTON "Abbrechen",IDCANCEL,210,53,50,14
+END
+
+
+IDD_USER_ADD_MEMBERSHIP DIALOGEX DISCARDABLE 0, 0, 252, 223
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT
+CAPTION "Gruppenmitgliedschaft"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Mitglied von:", -1, 7, 7, 56, 8
+ CONTROL "", IDC_USER_ADD_MEMBERSHIP_LIST, "SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP,
+ 7, 18, 238, 173, WS_EX_CLIENTEDGE
+ DEFPUSHBUTTON "OK",IDOK,141,197,50,14
+ PUSHBUTTON "Abbrechen",IDCANCEL,195,197,50,14
+END
+
+
+/* Menus */
+
+IDM_POPUP_GROUP MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Neue Gruppe...", IDM_GROUP_NEW
+ END
+ POPUP ""
+ BEGIN
+ MENUITEM "Mitglied hinzufügen", IDM_GROUP_ADD_MEMBER, GRAYED
+ MENUITEM SEPARATOR
+ MENUITEM "Löschen", IDM_GROUP_DELETE
+ MENUITEM "Umbenennen", IDM_GROUP_RENAME
+ MENUITEM SEPARATOR
+ MENUITEM "Eigenschaften", IDM_GROUP_PROPERTIES
+ END
+END
+
+
+IDM_POPUP_USER MENU DISCARDABLE
+BEGIN
+ POPUP ""
+ BEGIN
+ MENUITEM "Neuer Benutzer...", IDM_USER_NEW
+ END
+ POPUP ""
+ BEGIN
+ MENUITEM "Passwort ändern", IDM_USER_CHANGE_PASSWORD
+ MENUITEM SEPARATOR
+ MENUITEM "Löschen", IDM_USER_DELETE
+ MENUITEM "Umbenennen", IDM_USER_RENAME
+ MENUITEM SEPARATOR
+ MENUITEM "Eigenschaften", IDM_USER_PROPERTIES
+ END
+END
+
+
+/* Strings */
+
+STRINGTABLE
+BEGIN
+ IDS_CPLNAME "Benutzerkonten"
+ IDS_CPLDESCRIPTION "Verwaltet Benutzer und Gruppen"
+END
+
+STRINGTABLE
+BEGIN
+ IDS_NAME "Name"
+ IDS_FULLNAME "Voller Name"
+ IDS_DESCRIPTION "Beschreibung"
+END
diff --git a/reactos/dll/cpl/usrmgr/resource.h b/reactos/dll/cpl/usrmgr/resource.h
index 34910d48007..c0c7bfa97fb 100644
--- a/reactos/dll/cpl/usrmgr/resource.h
+++ b/reactos/dll/cpl/usrmgr/resource.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_USRMGR_RESOURCE_H__
-#define __CPL_USRMGR_RESOURCE_H__
+#pragma once
#include
@@ -115,6 +114,3 @@
#define IDM_USER_DELETE 133
#define IDM_USER_RENAME 134
#define IDM_USER_PROPERTIES 135
-
-#endif /* __CPL_USRMGR_RESOURCE_H__ */
-
diff --git a/reactos/dll/cpl/usrmgr/rsrc.rc b/reactos/dll/cpl/usrmgr/rsrc.rc
index 2102d74add8..5e400c134c0 100644
--- a/reactos/dll/cpl/usrmgr/rsrc.rc
+++ b/reactos/dll/cpl/usrmgr/rsrc.rc
@@ -1,6 +1,7 @@
#include
#include "resource.h"
+#include "lang/de-DE.rc"
#include "lang/en-US.rc"
#include "lang/pl-PL.rc"
#include "lang/ru-RU.rc"
diff --git a/reactos/dll/cpl/usrmgr/usrmgr.h b/reactos/dll/cpl/usrmgr/usrmgr.h
index 9820606c3f5..13896cd147c 100644
--- a/reactos/dll/cpl/usrmgr/usrmgr.h
+++ b/reactos/dll/cpl/usrmgr/usrmgr.h
@@ -1,5 +1,4 @@
-#ifndef __CPL_DESK_H__
-#define __CPL_DESK_H__
+#pragma once
#include
#include
@@ -45,6 +44,3 @@ CheckAccountName(HWND hwndDlg,
/* userprops.c */
BOOL
UserProperties(HWND hwndDlg);
-
-#endif /* __CPL_DESK_H__ */
-
diff --git a/reactos/dll/directx/amstream/amstream.c b/reactos/dll/directx/amstream/amstream.c
index 9e4d45aef04..f8ae2a6e39b 100644
--- a/reactos/dll/directx/amstream/amstream.c
+++ b/reactos/dll/directx/amstream/amstream.c
@@ -35,7 +35,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(amstream);
typedef struct {
- IAMMultiMediaStream lpVtbl;
+ const IAMMultiMediaStreamVtbl *lpVtbl;
LONG ref;
IGraphBuilder* pFilterGraph;
IPin* ipin;
@@ -63,7 +63,7 @@ HRESULT AM_create(IUnknown *pUnkOuter, LPVOID *ppObj)
return E_OUTOFMEMORY;
}
- object->lpVtbl.lpVtbl = &AM_Vtbl;
+ object->lpVtbl = &AM_Vtbl;
object->ref = 1;
*ppObj = object;
@@ -129,7 +129,7 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_GetMediaStream(IAMMultiMediaStream
MSPID PurposeId;
unsigned int i;
- TRACE("(%p/%p)->(%p,%p)\n", This, iface, idPurpose, ppMediaStream);
+ TRACE("(%p/%p)->(%s,%p)\n", This, iface, debugstr_guid(idPurpose), ppMediaStream);
for (i = 0; i < This->nbStreams; i++)
{
@@ -214,7 +214,7 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_Initialize(IAMMultiMediaStream* if
IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
HRESULT hr = S_OK;
- FIXME("(%p/%p)->(%x,%x,%p) partial stub!\n", This, iface, (DWORD)StreamType, dwFlags, pFilterGraph);
+ TRACE("(%p/%p)->(%x,%x,%p)\n", This, iface, (DWORD)StreamType, dwFlags, pFilterGraph);
if (pFilterGraph)
{
@@ -238,9 +238,17 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_GetFilterGraph(IAMMultiMediaStream
{
IAMMultiMediaStreamImpl *This = (IAMMultiMediaStreamImpl *)iface;
- FIXME("(%p/%p)->(%p) stub!\n", This, iface, ppGraphBuilder);
+ TRACE("(%p/%p)->(%p)\n", This, iface, ppGraphBuilder);
- return E_NOTIMPL;
+ if (!ppGraphBuilder)
+ return E_POINTER;
+
+ if (This->pFilterGraph)
+ return IFilterGraph_QueryInterface(This->pFilterGraph, &IID_IGraphBuilder, (void**)ppGraphBuilder);
+ else
+ *ppGraphBuilder = NULL;
+
+ return S_OK;
}
static HRESULT WINAPI IAMMultiMediaStreamImpl_GetFilter(IAMMultiMediaStream* iface, IMediaStreamFilter** ppFilter)
@@ -260,7 +268,7 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_AddMediaStream(IAMMultiMediaStream
IMediaStream* pStream;
IMediaStream** pNewStreams;
- FIXME("(%p/%p)->(%p,%p,%x,%p) partial stub!\n", This, iface, pStreamObject, PurposeId, dwFlags, ppNewStream);
+ FIXME("(%p/%p)->(%p,%s,%x,%p) partial stub!\n", This, iface, pStreamObject, debugstr_guid(PurposeId), dwFlags, ppNewStream);
if (IsEqualGUID(PurposeId, &MSPID_PrimaryVideo))
hr = DirectDrawMediaStream_create((IMultiMediaStream*)iface, PurposeId, This->StreamType, &pStream);
@@ -341,6 +349,14 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_OpenFile(IAMMultiMediaStream* ifac
goto end;
}
+ /* If Initialize was not called before, we do it here */
+ if (!This->pFilterGraph)
+ {
+ ret = IAMMultiMediaStream_Initialize(iface, STREAMTYPE_READ, 0, NULL);
+ if (FAILED(ret))
+ goto end;
+ }
+
ret = IFilterGraph_QueryInterface(This->pFilterGraph, &IID_IGraphBuilder, (void**)&This->GraphBuilder);
if(ret != S_OK)
{
diff --git a/reactos/dll/directx/amstream/mediastream.c b/reactos/dll/directx/amstream/mediastream.c
index bf197aadcf7..dc4ec642cf9 100644
--- a/reactos/dll/directx/amstream/mediastream.c
+++ b/reactos/dll/directx/amstream/mediastream.c
@@ -29,13 +29,14 @@
#include "wingdi.h"
#include "amstream_private.h"
-#include "ddstream.h"
#include "amstream.h"
+#include "ddstream.h"
+
WINE_DEFAULT_DEBUG_CHANNEL(amstream);
typedef struct {
- IMediaStream lpVtbl;
+ const IMediaStreamVtbl *lpVtbl;
LONG ref;
IMultiMediaStream* Parent;
MSPID PurposeId;
@@ -43,7 +44,7 @@ typedef struct {
} IMediaStreamImpl;
typedef struct {
- IDirectDrawMediaStream lpVtbl;
+ const IDirectDrawMediaStreamVtbl *lpVtbl;
LONG ref;
IMultiMediaStream* Parent;
MSPID PurposeId;
@@ -57,7 +58,7 @@ HRESULT MediaStream_create(IMultiMediaStream* Parent, const MSPID* pPurposeId, S
{
IMediaStreamImpl* object;
- TRACE("(%p,%p,%p)\n", Parent, pPurposeId, ppMediaStream);
+ TRACE("(%p,%s,%p)\n", Parent, debugstr_guid(pPurposeId), ppMediaStream);
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMediaStreamImpl));
if (!object)
@@ -66,7 +67,7 @@ HRESULT MediaStream_create(IMultiMediaStream* Parent, const MSPID* pPurposeId, S
return E_OUTOFMEMORY;
}
- object->lpVtbl.lpVtbl = &MediaStream_Vtbl;
+ object->lpVtbl = &MediaStream_Vtbl;
object->ref = 1;
object->Parent = Parent;
@@ -197,7 +198,7 @@ HRESULT DirectDrawMediaStream_create(IMultiMediaStream* Parent, const MSPID* pPu
{
IDirectDrawMediaStreamImpl* object;
- TRACE("(%p,%p,%p)\n", Parent, pPurposeId, ppMediaStream);
+ TRACE("(%p,%s,%p)\n", Parent, debugstr_guid(pPurposeId), ppMediaStream);
object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMediaStreamImpl));
if (!object)
@@ -206,7 +207,7 @@ HRESULT DirectDrawMediaStream_create(IMultiMediaStream* Parent, const MSPID* pPu
return E_OUTOFMEMORY;
}
- object->lpVtbl.lpVtbl = &DirectDrawMediaStream_Vtbl;
+ object->lpVtbl = &DirectDrawMediaStream_Vtbl;
object->ref = 1;
object->Parent = Parent;
diff --git a/reactos/dll/directx/amstream/mediastreamfilter.c b/reactos/dll/directx/amstream/mediastreamfilter.c
index af335fdeafe..4a4d7123e16 100644
--- a/reactos/dll/directx/amstream/mediastreamfilter.c
+++ b/reactos/dll/directx/amstream/mediastreamfilter.c
@@ -36,7 +36,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(amstream);
typedef struct {
- IMediaStreamFilter lpVtbl;
+ const IMediaStreamFilterVtbl *lpVtbl;
LONG ref;
CRITICAL_SECTION csFilter;
FILTER_STATE state;
@@ -63,7 +63,7 @@ HRESULT MediaStreamFilter_create(IUnknown *pUnkOuter, LPVOID *ppObj)
return E_OUTOFMEMORY;
}
- object->lpVtbl.lpVtbl = &MediaStreamFilter_Vtbl;
+ object->lpVtbl = &MediaStreamFilter_Vtbl;
object->ref = 1;
*ppObj = object;
@@ -120,7 +120,7 @@ static ULONG WINAPI MediaStreamFilterImpl_Release(IMediaStreamFilter * iface)
if (!refCount)
{
- This->lpVtbl.lpVtbl = NULL;
+ This->lpVtbl = NULL;
HeapFree(GetProcessHeap(), 0, This);
}
diff --git a/reactos/dll/directx/amstream/regsvr.c b/reactos/dll/directx/amstream/regsvr.c
index 028c68de754..9c328914749 100644
--- a/reactos/dll/directx/amstream/regsvr.c
+++ b/reactos/dll/directx/amstream/regsvr.c
@@ -456,6 +456,13 @@ static struct regsvr_coclass const coclass_list[] = {
"Both"
},
+ { &CLSID_MediaStreamFilter,
+ "SFilter Class",
+ NULL,
+ "amstream.dll",
+ "Both"
+ },
+
{ NULL } /* list terminator */
};
diff --git a/reactos/dll/directx/bdaplgin/bdaplgin.cpp b/reactos/dll/directx/bdaplgin/bdaplgin.cpp
new file mode 100644
index 00000000000..39ddb8a2ccb
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/bdaplgin.cpp
@@ -0,0 +1,110 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID CBDADeviceControl_GUID = {STATIC_KSMETHODSETID_BdaChangeSync};
+const GUID CBDAPinControl_GUID = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
+
+static INTERFACE_TABLE InterfaceTable[] =
+{
+ {&CBDADeviceControl_GUID, CBDADeviceControl_fnConstructor},
+ {&CBDAPinControl_GUID, CBDAPinControl_fnConstructor},
+ {NULL, NULL}
+};
+
+extern "C"
+BOOL
+WINAPI
+DllMain(
+ HINSTANCE hInstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ CoInitialize(NULL);
+
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"BDAPLGIN::DllMain()\n");
+#endif
+
+ DisableThreadLibraryCalls(hInstDLL);
+ break;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllUnregisterServer(void)
+{
+ return S_OK;
+}
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllRegisterServer(void)
+{
+ return S_OK;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllGetClassObject(
+ REFCLSID rclsid,
+ REFIID riid,
+ LPVOID *ppv)
+{
+ UINT i;
+ HRESULT hres = E_OUTOFMEMORY;
+ IClassFactory * pcf = NULL;
+
+ if (!ppv)
+ return E_INVALIDARG;
+
+ *ppv = NULL;
+
+ for (i = 0; InterfaceTable[i].riid; i++)
+ {
+ if (IsEqualIID(*InterfaceTable[i].riid, rclsid))
+ {
+ pcf = CClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL);
+ break;
+ }
+ }
+
+ if (!pcf)
+ {
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
+ hres = pcf->QueryInterface(riid, ppv);
+ pcf->Release();
+
+ return hres;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllCanUnloadNow(void)
+{
+ return S_OK;
+}
diff --git a/reactos/dll/directx/bdaplgin/bdaplgin.rbuild b/reactos/dll/directx/bdaplgin/bdaplgin.rbuild
new file mode 100644
index 00000000000..0824323331b
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/bdaplgin.rbuild
@@ -0,0 +1,33 @@
+
+
+
+
+
+ .
+ ntdll
+ kernel32
+ advapi32
+ ole32
+ advapi32
+ msvcrt
+ ksproxy
+
+ -fno-exceptions
+ -fno-rtti
+
+
+ /GR-
+
+
+ bdaplgin.cpp
+ bdaplgin.rc
+ classfactory.cpp
+ controlnode.cpp
+ devicecontrol.cpp
+ digitaldemo.cpp
+ frequencyfilter.cpp
+ lnbinfo.cpp
+ pincontrol.cpp
+ signalstatistics.cpp
+
+
diff --git a/reactos/dll/directx/bdaplgin/bdaplgin.rc b/reactos/dll/directx/bdaplgin/bdaplgin.rc
new file mode 100644
index 00000000000..05b576c09de
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/bdaplgin.rc
@@ -0,0 +1,12 @@
+#include
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS BDA Device Control Plug-in for MPEG2 based networks\0"
+#define REACTOS_STR_INTERNAL_NAME "BdaPlgin.ax\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "BdaPlgin.ax\0"
+#define REACTOS_STR_PRODUCT_VERSION "5.3.2600.3264\0"
+#define REACTOS_STR_FILE_VERSION "5.3.2600.3264\0"
+
+#include
diff --git a/reactos/dll/directx/bdaplgin/bdaplgin.spec b/reactos/dll/directx/bdaplgin/bdaplgin.spec
new file mode 100644
index 00000000000..5baed04ed66
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/bdaplgin.spec
@@ -0,0 +1,4 @@
+@ stdcall DllCanUnloadNow()
+@ stdcall DllGetClassObject(ptr ptr ptr)
+@ stdcall DllRegisterServer()
+@ stdcall DllUnregisterServer()
diff --git a/reactos/dll/directx/bdaplgin/classfactory.cpp b/reactos/dll/directx/bdaplgin/classfactory.cpp
new file mode 100644
index 00000000000..d6aaa3e8a18
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/classfactory.cpp
@@ -0,0 +1,105 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+const GUID IID_IClassFactory = {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+
+class CClassFactory : public IClassFactory
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject);
+ HRESULT WINAPI LockServer(BOOL fLock);
+
+ CClassFactory(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, IID *riidInst) : m_Ref(1), m_lpfnCI(lpfnCI), m_IID(riidInst)
+ {};
+
+ virtual ~CClassFactory(){};
+
+protected:
+ LONG m_Ref;
+ LPFNCREATEINSTANCE m_lpfnCI;
+ IID * m_IID;
+};
+
+HRESULT
+WINAPI
+CClassFactory::QueryInterface(
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ *ppvObj = NULL;
+ if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))
+ {
+ *ppvObj = PVOID(this);
+ InterlockedIncrement(&m_Ref);
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::CreateInstance(
+ LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID *ppvObject)
+{
+ *ppvObject = NULL;
+
+ if ( m_IID == NULL || IsEqualCLSID(riid, *m_IID) || IsEqualCLSID(riid, IID_IUnknown))
+ {
+ return m_lpfnCI(pUnkOuter, riid, ppvObject);
+ }
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::LockServer(
+ BOOL fLock)
+{
+ return E_NOTIMPL;
+}
+
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst)
+{
+ CClassFactory* factory = new CClassFactory(lpfnCI, pcRefDll, riidInst);
+
+ if (!factory)
+ return NULL;
+
+ if (pcRefDll)
+ InterlockedIncrement(pcRefDll);
+
+ return (LPCLASSFACTORY)factory;
+}
diff --git a/reactos/dll/directx/bdaplgin/controlnode.cpp b/reactos/dll/directx/bdaplgin/controlnode.cpp
new file mode 100644
index 00000000000..5cd98ccbdcb
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/controlnode.cpp
@@ -0,0 +1,154 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/controlnode.cpp
+ * PURPOSE: ControlNode interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IKsPropertySet = {0x31efac30, 0x515c, 0x11d0, {0xa9,0xaa, 0x00,0xaa,0x00,0x61,0xbe,0x93}};
+
+class CControlNode : public IUnknown
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ CControlNode(HANDLE hFile, ULONG NodeType, ULONG PinId) : m_Ref(0), m_hFile(hFile), m_NodeType(NodeType), m_PinId(PinId){};
+ virtual ~CControlNode(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+ ULONG m_NodeType;
+ ULONG m_PinId;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CControlNode::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if(IsEqualGUID(refiid, IID_IBDA_FrequencyFilter))
+ {
+ return CBDAFrequencyFilter_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+ }
+ else if(IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
+ {
+ return CBDASignalStatistics_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+ }
+ else if(IsEqualGUID(refiid, IID_IBDA_LNBInfo))
+ {
+ return CBDALNBInfo_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+ }
+ else if(IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
+ {
+ return CBDADigitalDemodulator_fnConstructor(m_hFile, m_NodeType, refiid, Output);
+ }
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+#endif
+
+ return E_NOINTERFACE;
+}
+
+
+HRESULT
+WINAPI
+CControlNode_fnConstructor(
+ HANDLE hFile,
+ IBaseFilter * pFilter,
+ ULONG NodeType,
+ ULONG PinId,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ WCHAR Buffer[100];
+ HRESULT hr;
+ IPin * pPin = NULL;
+ IKsObject * pObject = NULL;
+
+ // store pin id
+ swprintf(Buffer, L"%u", PinId);
+
+ // try find target pin
+ hr = pFilter->FindPin(Buffer, &pPin);
+
+ if (FAILED(hr))
+ {
+#ifdef BDAPLGIN_TRACE
+ swprintf(Buffer, L"CControlNode_fnConstructor failed find pin %lu with %lx\n", PinId, hr);
+ OutputDebugStringW(Buffer);
+#endif
+ return hr;
+ }
+
+ // query IKsObject interface
+ hr = pPin->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+#ifdef BDAPLGIN_TRACE
+ swprintf(Buffer, L"CControlNode_fnConstructor get IID_IKsObject status %lx\n", hr);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (SUCCEEDED(hr))
+ {
+ // get pin handle
+ hFile = pObject->KsGetObjectHandle();
+ // release IKsObject interface
+ pObject->Release();
+ }
+ // release IPin interface
+ pPin->Release();
+
+ // construct device control
+ CControlNode * handler = new CControlNode(hFile, NodeType, PinId);
+
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CControlNode_fnConstructor\n");
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/bdaplgin/devicecontrol.cpp b/reactos/dll/directx/bdaplgin/devicecontrol.cpp
new file mode 100644
index 00000000000..661eba547a0
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/devicecontrol.cpp
@@ -0,0 +1,558 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
+const GUID IID_IAC3Filter = {0xe4539501, 0xc609, 0x46ea, {0xad, 0x2a, 0x0e, 0x97, 0x00, 0x24, 0x56, 0x83}};
+const GUID IID_IAsyncReader = {0x56A868AA, 0x0AD4, 0x11CE, {0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70}};
+const GUID IID_IMatrixMixer = {0xafc57835, 0x2fd1, 0x4541, {0xa6, 0xd9, 0x0d, 0xb7, 0x18, 0x56, 0xe5, 0x89}};
+const GUID IID_IBDA_NetworkProvider = {0xfd501041, 0x8ebe, 0x11ce, {0x81, 0x83, 0x00, 0xaa, 0x00, 0x57, 0x7d, 0xa2}};
+const GUID IID_IAMOpenProgress = {0x8E1C39A1, 0xDE53, 0x11cf, {0xAA, 0x63, 0x00, 0x80, 0xC7, 0x44, 0x52, 0x8D}};
+const GUID IID_IDistributorNotify = {0x56a868af, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
+const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
+const GUID IID_IBDA_Topology = {0x79B56888, 0x7FEA, 0x4690, {0xB4, 0x5D, 0x38, 0xFD, 0x3C, 0x78, 0x49, 0xBE}};
+const GUID IID_IKsObject = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
+const GUID KSPROPSETID_BdaTopology = {0xa14ee835, 0x0a23, 0x11d3, {0x9c, 0xc7, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+const GUID KSMETHODSETID_BdaDeviceConfiguration = {0x71985f45, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+const GUID IID_IBaseFilter = {0x56a86895, 0x0ad4, 0x11ce, {0xb0,0x3a, 0x00,0x20,0xaf,0x0b,0xa7,0x70}};
+const GUID KSMETHODSETID_BdaChangeSync = {0xfd0a5af3, 0xb41d, 0x11d2, {0x9c, 0x95, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+
+class CBDADeviceControl : public IBDA_DeviceControl,
+ public IBDA_Topology
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IBDA_DeviceControl methods
+ HRESULT STDMETHODCALLTYPE StartChanges( void);
+ HRESULT STDMETHODCALLTYPE CheckChanges( void);
+ HRESULT STDMETHODCALLTYPE CommitChanges( void);
+ HRESULT STDMETHODCALLTYPE GetChangeState(ULONG *pState);
+
+ // IBDA_Topology methods
+ HRESULT STDMETHODCALLTYPE GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG * rgulNodeTypes);
+ HRESULT STDMETHODCALLTYPE GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors);
+ HRESULT STDMETHODCALLTYPE GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID * rgguidInterfaces);
+ HRESULT STDMETHODCALLTYPE GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes);
+ HRESULT STDMETHODCALLTYPE GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION * rgConnections);
+ HRESULT STDMETHODCALLTYPE CreatePin(ULONG ulPinType, ULONG *pulPinId);
+ HRESULT STDMETHODCALLTYPE DeletePin(ULONG ulPinId);
+ HRESULT STDMETHODCALLTYPE SetMediaType(ULONG ulPinId, AM_MEDIA_TYPE *pMediaType);
+ HRESULT STDMETHODCALLTYPE SetMedium(ULONG ulPinId, REGPINMEDIUM *pMedium);
+ HRESULT STDMETHODCALLTYPE CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId);
+ HRESULT STDMETHODCALLTYPE GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode);
+
+ CBDADeviceControl(IUnknown * pUnkOuter, IBaseFilter *pFilter, HANDLE hFile) : m_Ref(0), m_pUnkOuter(pUnkOuter), m_Handle(hFile), m_pFilter(pFilter){};
+ virtual ~CBDADeviceControl(){};
+
+protected:
+ LONG m_Ref;
+ IUnknown * m_pUnkOuter;
+ HANDLE m_Handle;
+ IBaseFilter * m_pFilter;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IBDA_DeviceControl))
+ {
+ *Output = (IBDA_DeviceControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_Topology))
+ {
+ *Output = (IBDA_Topology*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+
+//-------------------------------------------------------------------
+// IBDA_DeviceControl methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::StartChanges( void)
+{
+ KSMETHOD Method;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ /* setup request */
+ Method.Set = KSMETHODSETID_BdaChangeSync;
+ Method.Id = KSMETHOD_BDA_START_CHANGES;
+ Method.Flags = KSMETHOD_TYPE_NONE;
+
+ /* execute request */
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_METHOD, (PVOID)&Method, sizeof(KSMETHOD), NULL, 0, &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADeviceControl::StartChanges: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::CheckChanges( void)
+{
+ KSMETHOD Method;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ /* setup request */
+ Method.Set = KSMETHODSETID_BdaChangeSync;
+ Method.Id = KSMETHOD_BDA_CHECK_CHANGES;
+ Method.Flags = KSMETHOD_TYPE_NONE;
+
+ /* execute request */
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_METHOD, (PVOID)&Method, sizeof(KSMETHOD), NULL, 0, &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADeviceControl::CheckChanges: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::CommitChanges( void)
+{
+ KSMETHOD Method;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ /* setup request */
+ Method.Set = KSMETHODSETID_BdaChangeSync;
+ Method.Id = KSMETHOD_BDA_COMMIT_CHANGES;
+ Method.Flags = KSMETHOD_TYPE_NONE;
+
+ /* execute request */
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_METHOD, (PVOID)&Method, sizeof(KSMETHOD), NULL, 0, &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADeviceControl::CommitChanges: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetChangeState(ULONG *pState)
+{
+ if (pState)
+ {
+ *pState = BDA_CHANGES_COMPLETE;
+ return S_OK;
+ }
+ else
+ {
+ return E_POINTER;
+ }
+}
+
+//-------------------------------------------------------------------
+// IBDA_Topology methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetNodeTypes(ULONG *pulcNodeTypes, ULONG ulcNodeTypesMax, ULONG * rgulNodeTypes)
+{
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Property.Set = KSPROPSETID_BdaTopology;
+ Property.Id = KSPROPERTY_BDA_NODE_TYPES;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), rgulNodeTypes, sizeof(ULONG) * ulcNodeTypesMax, &BytesReturned);
+
+ *pulcNodeTypes = (BytesReturned / sizeof(ULONG));
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADeviceControl::GetNodeTypes: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+ if (SUCCEEDED(hr))
+ {
+ for(ULONG Index = 0; Index < *pulcNodeTypes; Index++)
+ {
+ swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: Index %lu Value %lx\n", Index, rgulNodeTypes[Index]);
+ OutputDebugStringW(Buffer);
+ }
+ }
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetNodeDescriptors(ULONG *ulcNodeDescriptors, ULONG ulcNodeDescriptorsMax, BDANODE_DESCRIPTOR * rgNodeDescriptors)
+{
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+
+ // setup request
+ Property.Set = KSPROPSETID_BdaTopology;
+ Property.Id = KSPROPERTY_BDA_NODE_DESCRIPTORS;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), rgNodeDescriptors, sizeof(BDANODE_DESCRIPTOR) * ulcNodeDescriptorsMax, &BytesReturned);
+
+ *ulcNodeDescriptors = (BytesReturned / sizeof(BDANODE_DESCRIPTOR));
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[1000];
+ swprintf(Buffer, L"CBDADeviceControl::GetNodeDescriptors: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+
+ if (SUCCEEDED(hr))
+ {
+ for(ULONG Index = 0; Index < min(*ulcNodeDescriptors, ulcNodeDescriptorsMax); Index++)
+ {
+ LPOLESTR pGUIDFunction, pGUIDName;
+
+ StringFromCLSID(rgNodeDescriptors[Index].guidFunction, &pGUIDFunction);
+ StringFromCLSID(rgNodeDescriptors[Index].guidName, &pGUIDName);
+
+ swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: Index %lu Value %lx\nFunction %s\n Name %s\n-----\n", Index, rgNodeDescriptors[Index].ulBdaNodeType, pGUIDFunction, pGUIDName);
+ OutputDebugStringW(Buffer);
+ }
+ }
+#endif
+
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetNodeInterfaces(ULONG ulNodeType, ULONG *pulcInterfaces, ULONG ulcInterfacesMax, GUID * rgguidInterfaces)
+{
+ KSP_NODE Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+
+ // setup request
+ Property.Property.Set = KSPROPSETID_BdaTopology;
+ Property.Property.Id = KSPROPERTY_BDA_NODE_PROPERTIES;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.NodeId = ulNodeType;
+ Property.Reserved = 0;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_NODE), rgguidInterfaces, sizeof(GUID) * ulcInterfacesMax, &BytesReturned);
+
+ *pulcInterfaces = (BytesReturned / sizeof(GUID));
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADeviceControl::GetNodeInterfaces: hr %lx, BytesReturned %lu ulNodeType %lu\n", hr, BytesReturned, ulNodeType);
+ OutputDebugStringW(Buffer);
+
+ if (SUCCEEDED(hr))
+ {
+ for(ULONG Index = 0; Index < min(*pulcInterfaces, ulcInterfacesMax); Index++)
+ {
+ LPOLESTR pstr;
+
+ StringFromCLSID(rgguidInterfaces[Index], &pstr);
+
+ swprintf(Buffer, L"CBDADeviceControl::GetNodeInterfaces: Index %lu Name %s\n", Index, pstr);
+ OutputDebugStringW(Buffer);
+ }
+ }
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetPinTypes(ULONG *pulcPinTypes, ULONG ulcPinTypesMax, ULONG *rgulPinTypes)
+{
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Property.Set = KSPROPSETID_BdaTopology;
+ Property.Id = KSPROPERTY_BDA_PIN_TYPES;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), rgulPinTypes, sizeof(ULONG) * ulcPinTypesMax, &BytesReturned);
+
+ *pulcPinTypes = (BytesReturned / sizeof(ULONG));
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+ if (SUCCEEDED(hr))
+ {
+ for(ULONG Index = 0; Index < *pulcPinTypes; Index++)
+ {
+ swprintf(Buffer, L"CBDADeviceControl::GetPinTypes: Index %lu Value %lx\n", Index, rgulPinTypes[Index]);
+ OutputDebugStringW(Buffer);
+ }
+ }
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetTemplateConnections(ULONG *pulcConnections, ULONG ulcConnectionsMax, BDA_TEMPLATE_CONNECTION * rgConnections)
+{
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDADeviceControl::GetTemplateConnections: NotImplemented\n");
+#endif
+
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::CreatePin(ULONG ulPinType, ULONG *pulPinId)
+{
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDADeviceControl::CreatePin: NotImplemented\n");
+#endif
+
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::DeletePin(ULONG ulPinId)
+{
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDADeviceControl::DeletePin: NotImplemented\n");
+#endif
+
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::SetMediaType(ULONG ulPinId, AM_MEDIA_TYPE *pMediaType)
+{
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDADeviceControl::SetMediaType: NotImplemented\n");
+#endif
+
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::SetMedium(ULONG ulPinId, REGPINMEDIUM *pMedium)
+{
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDADeviceControl::SetMedium: NotImplemented\n");
+#endif
+
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::CreateTopology(ULONG ulInputPinId, ULONG ulOutputPinId)
+{
+ KSM_BDA_PIN_PAIR Method;
+ HRESULT hr;
+ ULONG BytesReturned = 0;
+
+ Method.Method.Flags = KSMETHOD_TYPE_NONE;
+ Method.Method.Id = KSMETHOD_BDA_CREATE_TOPOLOGY;
+ Method.Method.Set = KSMETHODSETID_BdaDeviceConfiguration;
+ Method.InputPinId = ulInputPinId;
+ Method.OutputPinId = ulOutputPinId;
+
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_METHOD, (PVOID)&Method, sizeof(KSM_BDA_PIN_PAIR), NULL, 0, &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADeviceControl::CreateTopology: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADeviceControl::GetControlNode(ULONG ulInputPinId, ULONG ulOutputPinId, ULONG ulNodeType, IUnknown **ppControlNode)
+{
+ HRESULT hr;
+ ULONG PinId = 0;
+ ULONG BytesReturned;
+ KSP_BDA_NODE_PIN Property;
+
+ //setup request
+ Property.Property.Set = KSPROPSETID_BdaTopology;
+ Property.Property.Id = KSPROPERTY_BDA_CONTROLLING_PIN_ID;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.ulInputPinId = ulInputPinId;
+ Property.ulOutputPinId = ulOutputPinId;
+ Property.ulNodeType = ulNodeType;
+
+ // perform request
+ // WinXP SP3 expects minimum sizeof(KSP_BDA_NODE_PIN) + sizeof(ULONG)
+ // seems a driver to be a driver bug
+
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_BDA_NODE_PIN) + sizeof(ULONG), &PinId, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx, BytesReturned %lu PinId %lu\n", hr, BytesReturned, PinId);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (FAILED(hr))
+ return hr;
+
+ hr = CControlNode_fnConstructor(m_Handle, m_pFilter, ulNodeType, PinId, IID_IUnknown, (LPVOID*)ppControlNode);
+
+#ifdef BDAPLGIN_TRACE
+ swprintf(Buffer, L"CBDADeviceControl::GetControlNode: hr %lx\n", hr);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+WINAPI
+CBDADeviceControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ HRESULT hr;
+ IKsObject *pObject = NULL;
+ IBaseFilter *pFilter = NULL;
+ HANDLE hFile;
+
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDADeviceControl_fnConstructor\n");
+#endif
+
+ //DebugBreak();
+
+ // sanity check
+ assert(pUnkOuter);
+
+ // query for IKsObject
+ hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+ if (FAILED(hr))
+ return E_NOINTERFACE;
+
+ // sanity check
+ assert(hr == NOERROR);
+
+ // query for IBaseFilter interface support
+ hr = pUnkOuter->QueryInterface(IID_IBaseFilter, (void**)&pFilter);
+
+ if (FAILED(hr))
+ {
+ // release
+ pObject->Release();
+ return E_NOINTERFACE;
+ }
+
+ // another sanity check
+ assert(pObject != NULL);
+
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+
+ // one more sanity check
+ assert(hFile != NULL && hFile != INVALID_HANDLE_VALUE);
+
+ // release IKsObject interface
+ pObject->Release();
+
+ // release filter
+ pFilter->Release();
+
+ // construct device control
+ CBDADeviceControl * handler = new CBDADeviceControl(pUnkOuter, pFilter, hFile);
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/bdaplgin/digitaldemo.cpp b/reactos/dll/directx/bdaplgin/digitaldemo.cpp
new file mode 100644
index 00000000000..2d1b7ed62d6
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/digitaldemo.cpp
@@ -0,0 +1,355 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/digitaldemo.cpp
+ * PURPOSE: IBDA_DigitalDemodulator interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_DigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x04, 0xe1, 0xe0}};
+const GUID KSPROPSETID_BdaDigitalDemodulator = {0xef30f379, 0x985b, 0x4d10, {0xb6, 0x40, 0xa7, 0x9d, 0x5e, 0x4, 0xe1, 0xe0}};
+
+class CBDADigitalDemodulator : public IBDA_DigitalDemodulator
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+ //IBDA_DigitalDemodulator methods
+ HRESULT STDMETHODCALLTYPE put_ModulationType(ModulationType *pModulationType);
+ HRESULT STDMETHODCALLTYPE get_ModulationType(ModulationType *pModulationType);
+ HRESULT STDMETHODCALLTYPE put_InnerFECMethod(FECMethod *pFECMethod);
+ HRESULT STDMETHODCALLTYPE get_InnerFECMethod(FECMethod *pFECMethod);
+ HRESULT STDMETHODCALLTYPE put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate);
+ HRESULT STDMETHODCALLTYPE get_InnerFECRate(BinaryConvolutionCodeRate *pFECRate);
+ HRESULT STDMETHODCALLTYPE put_OuterFECMethod(FECMethod *pFECMethod);
+ HRESULT STDMETHODCALLTYPE get_OuterFECMethod(FECMethod *pFECMethod);
+ HRESULT STDMETHODCALLTYPE put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate);
+ HRESULT STDMETHODCALLTYPE get_OuterFECRate(BinaryConvolutionCodeRate *pFECRate);
+ HRESULT STDMETHODCALLTYPE put_SymbolRate(ULONG *pSymbolRate);
+ HRESULT STDMETHODCALLTYPE get_SymbolRate(ULONG *pSymbolRate);
+ HRESULT STDMETHODCALLTYPE put_SpectralInversion(SpectralInversion *pSpectralInversion);
+ HRESULT STDMETHODCALLTYPE get_SpectralInversion(SpectralInversion *pSpectralInversion);
+
+ CBDADigitalDemodulator(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+ ~CBDADigitalDemodulator(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+ ULONG m_NodeId;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_DigitalDemodulator))
+ {
+ *Output = (IBDA_DigitalDemodulator*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CBDADigitalDemodulator::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+#endif
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_ModulationType(ModulationType *pModulationType)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
+ Node.Property.Id = KSPROPERTY_BDA_MODULATION_TYPE;
+ Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pModulationType, sizeof(ModulationType), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_ModulationType: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_ModulationType(ModulationType *pModulationType)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_InnerFECMethod(FECMethod *pFECMethod)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
+ Node.Property.Id = KSPROPERTY_BDA_INNER_FEC_TYPE;
+ Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECMethod, sizeof(FECMethod), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECMethod: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_InnerFECMethod(FECMethod *pFECMethod)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_InnerFECRate(BinaryConvolutionCodeRate *pFECRate)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
+ Node.Property.Id = KSPROPERTY_BDA_INNER_FEC_RATE;
+ Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECRate, sizeof(BinaryConvolutionCodeRate), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_InnerFECRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_InnerFECRate(BinaryConvolutionCodeRate *pFECRate)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_OuterFECMethod(FECMethod *pFECMethod)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
+ Node.Property.Id = KSPROPERTY_BDA_OUTER_FEC_TYPE;
+ Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECMethod, sizeof(FECMethod), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECMethod: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE CBDADigitalDemodulator::get_OuterFECMethod(FECMethod *pFECMethod)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_OuterFECRate(BinaryConvolutionCodeRate *pFECRate)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
+ Node.Property.Id = KSPROPERTY_BDA_OUTER_FEC_RATE;
+ Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pFECRate, sizeof(BinaryConvolutionCodeRate), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_OuterFECRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_OuterFECRate(BinaryConvolutionCodeRate *pFECRate)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_SymbolRate(ULONG *pSymbolRate)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
+ Node.Property.Id = KSPROPERTY_BDA_SYMBOL_RATE;
+ Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pSymbolRate, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_SymbolRate: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_SymbolRate(ULONG *pSymbolRate)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::put_SpectralInversion(SpectralInversion *pSpectralInversion)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaDigitalDemodulator;
+ Node.Property.Id = KSPROPERTY_BDA_SPECTRAL_INVERSION;
+ Node.Property.Flags = KSPROPERTY_TYPE_TOPOLOGY | KSPROPERTY_TYPE_SET;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), pSpectralInversion, sizeof(SpectralInversion), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDADigitalDemodulator::put_SpectralInversion: hr %lx, BytesReturned %lu\n", hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDADigitalDemodulator::get_SpectralInversion(SpectralInversion *pSpectralInversion)
+{
+ return E_NOINTERFACE;
+}
+
+
+HRESULT
+WINAPI
+CBDADigitalDemodulator_fnConstructor(
+ HANDLE hFile,
+ ULONG NodeId,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // construct device control
+ CBDADigitalDemodulator * handler = new CBDADigitalDemodulator(hFile, NodeId);
+
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDADigitalDemodulator_fnConstructor\n");
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/bdaplgin/frequencyfilter.cpp b/reactos/dll/directx/bdaplgin/frequencyfilter.cpp
new file mode 100644
index 00000000000..90d1e6a24fa
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/frequencyfilter.cpp
@@ -0,0 +1,297 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/frequencyfilter.cpp
+ * PURPOSE: IBDA_FrequencyFilter interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_FrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x00, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+const GUID KSPROPSETID_BdaFrequencyFilter = {0x71985f47, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+
+class CBDAFrequencyFilter : public IBDA_FrequencyFilter
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT STDMETHODCALLTYPE put_Autotune(ULONG ulTransponder);
+ HRESULT STDMETHODCALLTYPE get_Autotune(ULONG *pulTransponder);
+ HRESULT STDMETHODCALLTYPE put_Frequency(ULONG ulFrequency);
+ HRESULT STDMETHODCALLTYPE get_Frequency(ULONG *pulFrequency);
+ HRESULT STDMETHODCALLTYPE put_Polarity(Polarisation Polarity);
+ HRESULT STDMETHODCALLTYPE get_Polarity(Polarisation *pPolarity);
+ HRESULT STDMETHODCALLTYPE put_Range(ULONG ulRange);
+ HRESULT STDMETHODCALLTYPE get_Range(ULONG *pulRange);
+ HRESULT STDMETHODCALLTYPE put_Bandwidth(ULONG ulBandwidth);
+ HRESULT STDMETHODCALLTYPE get_Bandwidth(ULONG *pulBandwidth);
+ HRESULT STDMETHODCALLTYPE put_FrequencyMultiplier(ULONG ulMultiplier);
+ HRESULT STDMETHODCALLTYPE get_FrequencyMultiplier(ULONG *pulMultiplier);
+
+ CBDAFrequencyFilter(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+ virtual ~CBDAFrequencyFilter(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+ ULONG m_NodeId;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_FrequencyFilter))
+ {
+ *Output = (IBDA_FrequencyFilter*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CControlNode::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+#endif
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Autotune(ULONG ulTransponder)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Autotune(ULONG *pulTransponder)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Frequency(ULONG ulFrequency)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
+ Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_FREQUENCY;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulFrequency, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_Frequency: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Frequency(ULONG *pulFrequency)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Polarity(Polarisation Polarity)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
+ Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_POLARITY;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Polarity, sizeof(Polarisation), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Polarity(Polarisation *pPolarity)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Range(ULONG ulRange)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
+ Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_RANGE;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulRange, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_Polarity: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Range(ULONG *pulRange)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_Bandwidth(ULONG ulBandwidth)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
+ Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_BANDWIDTH;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulBandwidth, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_Bandwidth: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_Bandwidth(ULONG *pulBandwidth)
+{
+ return E_NOINTERFACE;
+}
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::put_FrequencyMultiplier(ULONG ulMultiplier)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaFrequencyFilter;
+ Node.Property.Id = KSPROPERTY_BDA_RF_TUNER_FREQUENCY_MULTIPLIER;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulMultiplier, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDAFrequencyFilter::put_FrequencyMultiplier: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAFrequencyFilter::get_FrequencyMultiplier(ULONG *pulMultiplier)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CBDAFrequencyFilter_fnConstructor(
+ HANDLE hFile,
+ ULONG NodeId,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // construct device control
+ CBDAFrequencyFilter * handler = new CBDAFrequencyFilter(hFile, NodeId);
+
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDAFrequencyFilter_fnConstructor\n");
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
\ No newline at end of file
diff --git a/reactos/dll/directx/bdaplgin/lnbinfo.cpp b/reactos/dll/directx/bdaplgin/lnbinfo.cpp
new file mode 100644
index 00000000000..a6638839289
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/lnbinfo.cpp
@@ -0,0 +1,212 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/lnbinfo.cpp
+ * PURPOSE: IBDA_LNBInfo interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_LNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x08, 0xf4}};
+const GUID KSPROPSETID_BdaLNBInfo = {0x992cf102, 0x49f9, 0x4719, {0xa6, 0x64, 0xc4, 0xf2, 0x3e, 0x24, 0x8, 0xf4}};
+
+class CBDALNBInfo : public IBDA_LNBInfo
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ //IBDA_LNBInfo methods
+ HRESULT STDMETHODCALLTYPE put_LocalOscilatorFrequencyLowBand(ULONG ulLOFLow);
+ HRESULT STDMETHODCALLTYPE get_LocalOscilatorFrequencyLowBand(ULONG *pulLOFLow);
+ HRESULT STDMETHODCALLTYPE put_LocalOscilatorFrequencyHighBand(ULONG ulLOFHigh);
+ HRESULT STDMETHODCALLTYPE get_LocalOscilatorFrequencyHighBand(ULONG *pulLOFHigh);
+ HRESULT STDMETHODCALLTYPE put_HighLowSwitchFrequency(ULONG ulSwitchFrequency);
+ HRESULT STDMETHODCALLTYPE get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency);
+
+ CBDALNBInfo(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+ ~CBDALNBInfo(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+ ULONG m_NodeId;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_LNBInfo))
+ {
+ *Output = (IBDA_LNBInfo*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CBDALNBInfo::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+#endif
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::put_LocalOscilatorFrequencyLowBand(ULONG ulLOFLow)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaLNBInfo;
+ Node.Property.Id = KSPROPERTY_BDA_LNB_LOF_LOW_BAND;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulLOFLow, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyLowBand: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::get_LocalOscilatorFrequencyLowBand(ULONG *pulLOFLow)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::put_LocalOscilatorFrequencyHighBand(ULONG ulLOFHigh)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaLNBInfo;
+ Node.Property.Id = KSPROPERTY_BDA_LNB_LOF_HIGH_BAND;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulLOFHigh, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDALNBInfo::put_LocalOscilatorFrequencyHighBand: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::get_LocalOscilatorFrequencyHighBand(ULONG *pulLOFHigh)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::put_HighLowSwitchFrequency(ULONG ulSwitchFrequency)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaLNBInfo;
+ Node.Property.Id = KSPROPERTY_BDA_LNB_SWITCH_FREQUENCY;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = m_NodeId;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &ulSwitchFrequency, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDALNBInfo::put_HighLowSwitchFrequency: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDALNBInfo::get_HighLowSwitchFrequency(ULONG *pulSwitchFrequency)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CBDALNBInfo_fnConstructor(
+ HANDLE hFile,
+ ULONG NodeId,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // construct device control
+ CBDALNBInfo * handler = new CBDALNBInfo(hFile, NodeId);
+
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDALNBInfo_fnConstructor\n");
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
\ No newline at end of file
diff --git a/reactos/dll/directx/bdaplgin/pincontrol.cpp b/reactos/dll/directx/bdaplgin/pincontrol.cpp
new file mode 100644
index 00000000000..a5b99128b16
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/pincontrol.cpp
@@ -0,0 +1,306 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_PinControl = {0x0DED49D5, 0xA8B7, 0x4d5d, {0x97, 0xA1, 0x12, 0xB0, 0xC1, 0x95, 0x87, 0x4D}};
+const GUID KSPROPSETID_BdaPinControl = {0x0ded49d5, 0xa8b7, 0x4d5d, {0x97, 0xa1, 0x12, 0xb0, 0xc1, 0x95, 0x87, 0x4d}};
+const GUID IID_IPin = {0x56a86891, 0x0ad4, 0x11ce, {0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}};
+
+class CBDAPinControl : public IBDA_PinControl
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+ // IBDA_PinControl methods
+ HRESULT STDMETHODCALLTYPE GetPinID(ULONG *pulPinID);
+ HRESULT STDMETHODCALLTYPE GetPinType(ULONG *pulPinType);
+ HRESULT STDMETHODCALLTYPE RegistrationContext(ULONG *pulRegistrationCtx);
+
+
+ CBDAPinControl(HANDLE hFile, IBDA_NetworkProvider * pProvider, IPin * pConnectedPin) : m_Ref(0), m_Handle(hFile), m_pProvider(pProvider), m_pConnectedPin(pConnectedPin){};
+ virtual ~CBDAPinControl()
+ {
+ //m_pConnectedPin->Release();
+ //m_pProvider->Release();
+ };
+
+protected:
+ LONG m_Ref;
+ HANDLE m_Handle;
+ IBDA_NetworkProvider * m_pProvider;
+ IPin * m_pConnectedPin;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAPinControl::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IBDA_PinControl))
+ {
+ *Output = (IBDA_PinControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CBDAPinControl::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+#endif
+
+ return E_NOINTERFACE;
+}
+//-------------------------------------------------------------------
+// IBDA_PinControl methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CBDAPinControl::GetPinID(ULONG *pulPinID)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+ HRESULT hr;
+
+ // setup request
+ Property.Set = KSPROPSETID_BdaPinControl;
+ Property.Id = KSPROPERTY_BDA_PIN_ID;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), pulPinID, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDAPinControl::GetPinID: hr %lx pulPinID %lu BytesReturned %lx\n", hr, *pulPinID, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAPinControl::GetPinType(ULONG *pulPinType)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+ HRESULT hr;
+
+ // setup request
+ Property.Set = KSPROPSETID_BdaPinControl;
+ Property.Id = KSPROPERTY_BDA_PIN_TYPE;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), pulPinType, sizeof(ULONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDAPinControl::GetPinType: hr %lx pulPinType %lu BytesReturned %lx\n", hr, *pulPinType, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDAPinControl::RegistrationContext(ULONG *pulRegistrationCtx)
+{
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDAPinControl::RegistrationContext: NotImplemented\n");
+#endif
+
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CBDAPinControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ IPin * pConnectedPin = NULL;
+ IBDA_NetworkProvider * pNetworkProvider = NULL;
+ HANDLE hFile = INVALID_HANDLE_VALUE;
+
+#if 0
+ if (!IsEqualGUID(riid, IID_IUnknown))
+ {
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDAPinControl_fnConstructor: Expected IUnknown\n");
+#endif
+ return REGDB_E_CLASSNOTREG;
+ }
+
+
+ HRESULT hr;
+ IKsObject * pObject = NULL;
+ IPin * pPin = NULL;
+ IEnumFilters *pEnumFilters = NULL;
+
+ IBaseFilter * ppFilter[1];
+ PIN_INFO PinInfo;
+ FILTER_INFO FilterInfo;
+
+
+ if (!pUnkOuter)
+ return E_POINTER;
+
+ // query for IKsObject interface
+ hr = pUnkOuter->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+ if (FAILED(hr))
+ return hr;
+
+ // query for IPin interface
+ hr = pObject->QueryInterface(IID_IPin, (void**)&pPin);
+
+ if (FAILED(hr))
+ {
+ //clean up
+ pObject->Release();
+ return hr;
+ }
+
+ // get pin info
+ hr = pPin->QueryPinInfo(&PinInfo);
+
+ if (FAILED(hr))
+ {
+ //clean up
+ pObject->Release();
+ pPin->Release();
+ return hr;
+ }
+
+ // sanity checks
+ assert(PinInfo.dir == PINDIR_OUTPUT);
+ assert(PinInfo.pFilter != NULL);
+
+ // query filter info
+ hr = PinInfo.pFilter->QueryFilterInfo(&FilterInfo);
+
+ // sanity check
+ assert(FilterInfo.pGraph != NULL);
+
+ // get IEnumFilters interface
+ hr = FilterInfo.pGraph->EnumFilters(&pEnumFilters);
+
+ if (FAILED(hr))
+ {
+ //clean up
+ FilterInfo.pGraph->Release();
+ PinInfo.pFilter->Release();
+ pObject->Release();
+ pPin->Release();
+ return hr;
+ }
+
+ while(pEnumFilters->Next(1, ppFilter, NULL) == S_OK)
+ {
+ // check if that filter supports the IBDA_NetworkProvider interface
+ hr = ppFilter[0]->QueryInterface(IID_IBDA_NetworkProvider, (void**)&pNetworkProvider);
+
+ // release IBaseFilter
+ ppFilter[0]->Release();
+
+ if (SUCCEEDED(hr))
+ break;
+ }
+
+ // release IEnumFilters interface
+ pEnumFilters->Release();
+
+ // release IFilterGraph interface
+ FilterInfo.pGraph->Release();
+
+ // release IBaseFilter interface
+ PinInfo.pFilter->Release();
+
+ if (pNetworkProvider)
+ {
+ // get connected pin handle
+ hr = pPin->ConnectedTo(&pConnectedPin);
+
+ // get file handle
+ hFile = pObject->KsGetObjectHandle();
+
+ if (FAILED(hr) || hFile == INVALID_HANDLE_VALUE)
+ {
+ // pin not connected
+ pNetworkProvider->Release();
+ // set zero
+ pNetworkProvider = NULL;
+ }
+ }
+
+ // release IPin
+ pPin->Release();
+
+ // release IKsObject
+ pObject->Release();
+
+
+ if (pNetworkProvider == NULL)
+ {
+ // no network provider interface in graph
+ return E_NOINTERFACE;
+ }
+#endif
+
+ CBDAPinControl * handler = new CBDAPinControl(hFile, pNetworkProvider, pConnectedPin);
+
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDAPinControl_fnConstructor");
+#endif
+
+ DebugBreak();
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/bdaplgin/precomp.h b/reactos/dll/directx/bdaplgin/precomp.h
new file mode 100644
index 00000000000..771a798f2c3
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/precomp.h
@@ -0,0 +1,104 @@
+#ifndef PRECOMP_H__
+#define PRECOMP_H__
+
+//#define BDAPLGIN_TRACE
+#define BUILDING_KS
+#define _KSDDK_
+#include
+//#include
+#include
+#define __STREAMS__
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject);
+
+typedef struct
+{
+ const GUID* riid;
+ LPFNCREATEINSTANCE lpfnCI;
+} INTERFACE_TABLE;
+
+/* classfactory.cpp */
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst);
+
+/* devicecontrol.cpp */
+HRESULT
+WINAPI
+CBDADeviceControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+
+/* pincontrol.cpp */
+HRESULT
+WINAPI
+CBDAPinControl_fnConstructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* controlnode.cpp */
+
+HRESULT
+WINAPI
+CControlNode_fnConstructor(
+ HANDLE hFile,
+ IBaseFilter * pFilter,
+ ULONG NodeType,
+ ULONG PinId,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* frequencyfilter.cpp */
+
+HRESULT
+WINAPI
+CBDAFrequencyFilter_fnConstructor(
+ HANDLE hFile,
+ ULONG NodeId,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* signalstatistics.cpp */
+
+HRESULT
+WINAPI
+CBDASignalStatistics_fnConstructor(
+ HANDLE hFile,
+ ULONG NodeId,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* lnbinfo.cpp */
+
+HRESULT
+WINAPI
+CBDALNBInfo_fnConstructor(
+ HANDLE hFile,
+ ULONG NodeId,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* digitaldemo.cpp */
+HRESULT
+WINAPI
+CBDADigitalDemodulator_fnConstructor(
+ HANDLE hFile,
+ ULONG NodeId,
+ REFIID riid,
+ LPVOID * ppv);
+
+#endif
diff --git a/reactos/dll/directx/bdaplgin/signalstatistics.cpp b/reactos/dll/directx/bdaplgin/signalstatistics.cpp
new file mode 100644
index 00000000000..ae6079e5b23
--- /dev/null
+++ b/reactos/dll/directx/bdaplgin/signalstatistics.cpp
@@ -0,0 +1,297 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/bdaplgin/frequencyfilter.cpp
+ * PURPOSE: IBDA_FrequencyFilter interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID IID_IBDA_SignalStatistics = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0x0d, 0x9a, 0x2a, 0x43, 0x38}};
+const GUID KSPROPSETID_BdaSignalStats = {0x1347d106, 0xcf3a, 0x428a, {0xa5, 0xcb, 0xac, 0xd, 0x9a, 0x2a, 0x43, 0x38}};
+
+class CBDASignalStatistics : public IBDA_SignalStatistics
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IBDA_SignalStatistics methods
+ HRESULT STDMETHODCALLTYPE put_SignalStrength(LONG lDbStrength);
+ HRESULT STDMETHODCALLTYPE get_SignalStrength(LONG *plDbStrength);
+ HRESULT STDMETHODCALLTYPE put_SignalQuality(LONG lPercentQuality);
+ HRESULT STDMETHODCALLTYPE get_SignalQuality(LONG *plPercentQuality);
+ HRESULT STDMETHODCALLTYPE put_SignalPresent(BOOLEAN fPresent);
+ HRESULT STDMETHODCALLTYPE get_SignalPresent(BOOLEAN *pfPresent);
+ HRESULT STDMETHODCALLTYPE put_SignalLocked(BOOLEAN fLocked);
+ HRESULT STDMETHODCALLTYPE get_SignalLocked(BOOLEAN *pfLocked);
+ HRESULT STDMETHODCALLTYPE put_SampleTime(LONG lmsSampleTime);
+ HRESULT STDMETHODCALLTYPE get_SampleTime(LONG *plmsSampleTime);
+
+ CBDASignalStatistics(HANDLE hFile, ULONG NodeId) : m_Ref(0), m_hFile(hFile), m_NodeId(NodeId){};
+ ~CBDASignalStatistics(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_hFile;
+ ULONG m_NodeId;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBDA_SignalStatistics))
+ {
+ *Output = (IBDA_SignalStatistics*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SignalStrength(LONG lDbStrength)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SignalStrength(LONG *plDbStrength)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaSignalStats;
+ Node.Property.Id = KSPROPERTY_BDA_SIGNAL_STRENGTH;
+ Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = (ULONG)-1;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plDbStrength, sizeof(LONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDASignalStatistics::get_SignalStrength: m_NodeId %lu hr %lx, BytesReturned %lu plDbStrength %ld\n", m_NodeId, hr, BytesReturned, *plDbStrength);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SignalQuality(LONG lPercentQuality)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SignalQuality(LONG *plPercentQuality)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaSignalStats;
+ Node.Property.Id = KSPROPERTY_BDA_SIGNAL_QUALITY;
+ Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = (ULONG)-1;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plPercentQuality, sizeof(LONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDASignalStatistics::get_SignalQuality: m_NodeId %lu hr %lx, BytesReturned %lu plPercentQuality %lu\n", m_NodeId, hr, BytesReturned, *plPercentQuality);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SignalPresent(BOOLEAN fPresent)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SignalPresent(BOOLEAN *pfPresent)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG Present;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaSignalStats;
+ Node.Property.Id = KSPROPERTY_BDA_SIGNAL_PRESENT;
+ Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = (ULONG)-1;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Present, sizeof(ULONG), &BytesReturned);
+ // store result
+ *pfPresent = Present;
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDASignalStatistics::get_SignalPresent: m_NodeId %lu hr %lx, BytesReturned %lu Present %lu\n", m_NodeId, hr, BytesReturned, Present);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SignalLocked(BOOLEAN fLocked)
+{
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SignalLocked(BOOLEAN *pfLocked)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG Locked;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaSignalStats;
+ Node.Property.Id = KSPROPERTY_BDA_SIGNAL_LOCKED;
+ Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = (ULONG)-1;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &Locked, sizeof(ULONG), &BytesReturned);
+ *pfLocked = Locked;
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDASignalStatistics::get_SignalLocked: m_NodeId %lu hr %lx, BytesReturned %lu Locked %lu\n", m_NodeId, hr, BytesReturned, Locked);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::put_SampleTime(LONG lmsSampleTime)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaSignalStats;
+ Node.Property.Id = KSPROPERTY_BDA_SAMPLE_TIME;
+ Node.Property.Flags = KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = (ULONG)-1;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), &lmsSampleTime, sizeof(LONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDASignalStatistics::put_SampleTime: m_NodeId %lu hr %lx, BytesReturned %lu\n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CBDASignalStatistics::get_SampleTime(LONG *plmsSampleTime)
+{
+ KSP_NODE Node;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ // setup request
+ Node.Property.Set = KSPROPSETID_BdaSignalStats;
+ Node.Property.Id = KSPROPERTY_BDA_SAMPLE_TIME;
+ Node.Property.Flags = KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_TOPOLOGY;
+ Node.NodeId = (ULONG)-1;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hFile, IOCTL_KS_PROPERTY, (PVOID)&Node, sizeof(KSP_NODE), plmsSampleTime, sizeof(LONG), &BytesReturned);
+
+#ifdef BDAPLGIN_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CBDASignalStatistics::get_SampleTime: m_NodeId %lu hr %lx, BytesReturned %lu \n", m_NodeId, hr, BytesReturned);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return hr;
+}
+
+HRESULT
+WINAPI
+CBDASignalStatistics_fnConstructor(
+ HANDLE hFile,
+ ULONG NodeId,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // construct device control
+ CBDASignalStatistics * handler = new CBDASignalStatistics(hFile, NodeId);
+
+#ifdef BDAPLGIN_TRACE
+ OutputDebugStringW(L"CBDASignalStatistics_fnConstructor\n");
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ddraw/rosdraw.h b/reactos/dll/directx/ddraw/rosdraw.h
index f38172e1f84..6cb0f2088c8 100644
--- a/reactos/dll/directx/ddraw/rosdraw.h
+++ b/reactos/dll/directx/ddraw/rosdraw.h
@@ -1,5 +1,4 @@
-#ifndef __DDRAW_PRIVATE
-#define __DDRAW_PRIVATE
+#pragma once
/********* Includes *********/
#include
@@ -283,5 +282,3 @@ VOID Hal_DirectDraw_Release (LPDIRECTDRAW7);
#define DX_STUB_str(x) //
#endif
-
-#endif /* __DDRAW_PRIVATE */
diff --git a/reactos/dll/directx/directx.rbuild b/reactos/dll/directx/directx.rbuild
index 1f5718d37c6..78508ecc99f 100644
--- a/reactos/dll/directx/directx.rbuild
+++ b/reactos/dll/directx/directx.rbuild
@@ -4,6 +4,9 @@
+
+
+
diff --git a/reactos/dll/directx/dsound_new/directsound.c b/reactos/dll/directx/dsound_new/directsound.c
index 754f56b0028..8a630c2c055 100644
--- a/reactos/dll/directx/dsound_new/directsound.c
+++ b/reactos/dll/directx/dsound_new/directsound.c
@@ -121,6 +121,12 @@ IDirectSound8_fnCreateSoundBuffer(
return DSERR_INVALIDPARAM;
}
+ if (lpcDSBufferDesc->dwBufferBytes != 0)
+ {
+ /* buffer size must be zero for primary sound buffer */
+ return DSERR_INVALIDPARAM;
+ }
+
if (This->PrimaryBuffer)
{
/* primary buffer already exists */
@@ -129,7 +135,7 @@ IDirectSound8_fnCreateSoundBuffer(
return S_OK;
}
- hResult = NewPrimarySoundBuffer((LPLPDIRECTSOUNDBUFFER8)lplpDirectSoundBuffer, This->Filter, This->dwLevel);
+ hResult = NewPrimarySoundBuffer((LPLPDIRECTSOUNDBUFFER8)lplpDirectSoundBuffer, This->Filter, This->dwLevel, lpcDSBufferDesc->dwFlags);
if (SUCCEEDED(hResult))
{
/* store primary buffer */
@@ -145,9 +151,15 @@ IDirectSound8_fnCreateSoundBuffer(
return DSERR_INVALIDPARAM;
}
+ if (lpcDSBufferDesc->dwBufferBytes < DSBSIZE_MIN || lpcDSBufferDesc->dwBufferBytes > DSBSIZE_MAX)
+ {
+ /* buffer size must be within bounds for secondary sound buffer*/
+ return DSERR_INVALIDPARAM;
+ }
+
if (!This->PrimaryBuffer)
{
- hResult = NewPrimarySoundBuffer((LPLPDIRECTSOUNDBUFFER8)lplpDirectSoundBuffer, This->Filter, This->dwLevel);
+ hResult = NewPrimarySoundBuffer((LPLPDIRECTSOUNDBUFFER8)lplpDirectSoundBuffer, This->Filter, This->dwLevel, lpcDSBufferDesc->dwFlags);
if (SUCCEEDED(hResult))
{
/* store primary buffer */
diff --git a/reactos/dll/directx/dsound_new/dsound_convert.c b/reactos/dll/directx/dsound_new/dsound_convert.c
new file mode 100644
index 00000000000..0a6e474d09d
--- /dev/null
+++ b/reactos/dll/directx/dsound_new/dsound_convert.c
@@ -0,0 +1,435 @@
+/* DirectSound format conversion and mixing routines
+ *
+ * Copyright 2007 Maarten Lankhorst
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* 8 bits is unsigned, the rest is signed.
+ * First I tried to reuse existing stuff from alsa-lib, after that
+ * didn't work, I gave up and just went for individual hacks.
+ *
+ * 24 bit is expensive to do, due to unaligned access.
+ * In dlls/winex11.drv/dib_convert.c convert_888_to_0888_asis there is a way
+ * around it, but I'm happy current code works, maybe something for later.
+ *
+ * The ^ 0x80 flips the signed bit, this is the conversion from
+ * signed (-128.. 0.. 127) to unsigned (0...255)
+ * This is only temporary: All 8 bit data should be converted to signed.
+ * then when fed to the sound card, it should be converted to unsigned again.
+ *
+ * Sound is LITTLE endian
+ */
+
+#include "config.h"
+
+#include
+
+#define NONAMELESSSTRUCT
+#define NONAMELESSUNION
+#include "windef.h"
+#include "winbase.h"
+#include "mmsystem.h"
+#include "winternl.h"
+#include "wine/debug.h"
+#include "dsound.h"
+#include "dsdriver.h"
+#include "dsound_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(dsound);
+
+#ifdef WORDS_BIGENDIAN
+#define le16(x) RtlUshortByteSwap((x))
+#define le32(x) RtlUlongByteSwap((x))
+#else
+#define le16(x) (x)
+#define le32(x) (x)
+#endif
+
+static inline void src_advance(const void **src, UINT stride, INT *count, UINT *freqAcc, UINT adj)
+{
+ *freqAcc += adj;
+ if (*freqAcc >= (1 << DSOUND_FREQSHIFT))
+ {
+ ULONG adv = (*freqAcc >> DSOUND_FREQSHIFT);
+ *freqAcc &= (1 << DSOUND_FREQSHIFT) - 1;
+ *(const char **)src += adv * stride;
+ *count -= adv;
+ }
+}
+
+static void convert_8_to_8 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ *(BYTE *)dst = *(const BYTE *)src;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_8_to_16 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ WORD dest = *(const BYTE *)src, *dest16 = dst;
+ *dest16 = le16(dest * 257 - 32768);
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_8_to_24 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ BYTE dest = *(const BYTE *)src;
+ BYTE *dest24 = dst;
+ dest24[0] = dest;
+ dest24[1] = dest;
+ dest24[2] = dest - 0x80;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_8_to_32 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ DWORD dest = *(const BYTE *)src, *dest32 = dst;
+ *dest32 = le32(dest * 16843009 - 2147483648U);
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_16_to_8 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ BYTE *dst8 = dst;
+ *dst8 = (le16(*(const WORD *)src)) / 256;
+ *dst8 -= 0x80;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_16_to_16 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ *(WORD *)dst = *(const WORD *)src;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_16_to_24 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ WORD dest = le16(*(const WORD *)src);
+ BYTE *dest24 = dst;
+
+ dest24[0] = dest / 256;
+ dest24[1] = dest;
+ dest24[2] = dest / 256;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_16_to_32 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ DWORD dest = *(const WORD *)src, *dest32 = dst;
+ *dest32 = dest * 65537;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_24_to_8 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ BYTE *dst8 = dst;
+ *dst8 = ((const BYTE *)src)[2];
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_24_to_16 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ WORD *dest16 = dst;
+ const BYTE *source = src;
+ *dest16 = le16(source[2] * 256 + source[1]);
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_24_to_24 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ BYTE *dest24 = dst;
+ const BYTE *src24 = src;
+
+ dest24[0] = src24[0];
+ dest24[1] = src24[1];
+ dest24[2] = src24[2];
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_24_to_32 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ DWORD *dest32 = dst;
+ const BYTE *source = src;
+ *dest32 = le32(source[2] * 16777217 + source[1] * 65536 + source[0] * 256);
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_32_to_8 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ BYTE *dst8 = dst;
+ *dst8 = (le32(*(const DWORD *)src) / 16777216);
+ *dst8 -= 0x80;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_32_to_16 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ WORD *dest16 = dst;
+ *dest16 = le16(le32(*(const DWORD *)src) / 65536);
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_32_to_24 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ DWORD dest = le32(*(const DWORD *)src);
+ BYTE *dest24 = dst;
+
+ dest24[0] = dest / 256;
+ dest24[1] = dest / 65536;
+ dest24[2] = dest / 16777216;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+static void convert_32_to_32 (const void *src, void *dst, UINT src_stride,
+ UINT dst_stride, INT count, UINT freqAcc, UINT adj)
+{
+ while (count > 0)
+ {
+ DWORD *dest = dst;
+ *dest = *(const DWORD *)src;
+
+ dst = (char *)dst + dst_stride;
+ src_advance(&src, src_stride, &count, &freqAcc, adj);
+ }
+}
+
+const bitsconvertfunc convertbpp[4][4] = {
+ { convert_8_to_8, convert_8_to_16, convert_8_to_24, convert_8_to_32 },
+ { convert_16_to_8, convert_16_to_16, convert_16_to_24, convert_16_to_32 },
+ { convert_24_to_8, convert_24_to_16, convert_24_to_24, convert_24_to_32 },
+ { convert_32_to_8, convert_32_to_16, convert_32_to_24, convert_32_to_32 },
+};
+
+static void mix8(signed char *src, INT *dst, unsigned len)
+{
+ TRACE("%p - %p %d\n", src, dst, len);
+ while (len--)
+ /* 8-bit WAV is unsigned, it's here converted to signed, normalize function will convert it back again */
+ *(dst++) += (signed char)((BYTE)*(src++) - (BYTE)0x80);
+}
+
+static void mix16(SHORT *src, INT *dst, unsigned len)
+{
+ TRACE("%p - %p %d\n", src, dst, len);
+ len /= 2;
+ while (len--)
+ {
+ *dst += le16(*src);
+ ++dst; ++src;
+ }
+}
+
+static void mix24(BYTE *src, INT *dst, unsigned len)
+{
+ TRACE("%p - %p %d\n", src, dst, len);
+ len /= 3;
+ while (len--)
+ {
+ DWORD field;
+ field = ((DWORD)src[2] << 16) + ((DWORD)src[1] << 8) + (DWORD)src[0];
+ if (src[2] & 0x80)
+ field |= 0xFF000000U;
+ *(dst++) += field;
+ ++src;
+ }
+}
+
+static void mix32(INT *src, LONGLONG *dst, unsigned len)
+{
+ TRACE("%p - %p %d\n", src, dst, len);
+ len /= 4;
+ while (len--)
+ *(dst++) += le32(*(src++));
+}
+
+const mixfunc mixfunctions[4] = {
+ (mixfunc)mix8,
+ (mixfunc)mix16,
+ (mixfunc)mix24,
+ (mixfunc)mix32
+};
+
+static void norm8(INT *src, signed char *dst, unsigned len)
+{
+ TRACE("%p - %p %d\n", src, dst, len);
+ while (len--)
+ {
+ *dst = (*src) + 0x80;
+ if (*src < -0x80)
+ *dst = 0;
+ else if (*src > 0x7f)
+ *dst = 0xff;
+ ++dst;
+ ++src;
+ }
+}
+
+static void norm16(INT *src, SHORT *dst, unsigned len)
+{
+ TRACE("%p - %p %d\n", src, dst, len);
+ len /= 2;
+ while (len--)
+ {
+ *dst = le16(*src);
+ if (*src <= -0x8000)
+ *dst = le16(0x8000);
+ else if (*src > 0x7fff)
+ *dst = le16(0x7fff);
+ ++dst;
+ ++src;
+ }
+}
+
+static void norm24(INT *src, BYTE *dst, unsigned len)
+{
+ TRACE("%p - %p %d\n", src, dst, len);
+ len /= 3;
+ while (len--)
+ {
+ if (*src <= -0x800000)
+ {
+ dst[0] = 0;
+ dst[1] = 0;
+ dst[2] = 0x80;
+ }
+ else if (*src > 0x7fffff)
+ {
+ dst[0] = 0xff;
+ dst[1] = 0xff;
+ dst[2] = 0x7f;
+ }
+ else
+ {
+ dst[0] = *src;
+ dst[1] = *src >> 8;
+ dst[2] = *src >> 16;
+ }
+ ++dst;
+ ++src;
+ }
+}
+
+static void norm32(LONGLONG *src, INT *dst, unsigned len)
+{
+ TRACE("%p - %p %d\n", src, dst, len);
+ len /= 4;
+ while (len--)
+ {
+ *dst = le32(*src);
+ if (*src <= -(LONGLONG)0x80000000)
+ *dst = le32(0x80000000);
+ else if (*src > 0x7fffffff)
+ *dst = le32(0x7fffffff);
+ ++dst;
+ ++src;
+ }
+}
+
+const normfunc normfunctions[4] = {
+ (normfunc)norm8,
+ (normfunc)norm16,
+ (normfunc)norm24,
+ (normfunc)norm32,
+};
diff --git a/reactos/dll/directx/dsound_new/precomp.h b/reactos/dll/directx/dsound_new/precomp.h
index 36139b745c1..71c314c40d8 100644
--- a/reactos/dll/directx/dsound_new/precomp.h
+++ b/reactos/dll/directx/dsound_new/precomp.h
@@ -1,5 +1,4 @@
-#ifndef PRECOMP_H__
-#define PRECOMP_H__
+#pragma once
#define COBJMACROS
#define NONAMELESSUNION
@@ -15,7 +14,7 @@
#include
#include
#include
-#define NDEBUG
+#define YDEBUG
#include
#include
#include
@@ -201,7 +200,8 @@ HRESULT
NewPrimarySoundBuffer(
LPDIRECTSOUNDBUFFER8 *OutBuffer,
LPFILTERINFO Filter,
- DWORD dwLevel);
+ DWORD dwLevel,
+ DWORD dwFlags);
HRESULT
PrimaryDirectSoundBuffer_SetFormat(
@@ -266,5 +266,3 @@ NewDirectSoundNotify(
BOOL bMix,
HANDLE hPin,
DWORD BufferSize);
-
-#endif
diff --git a/reactos/dll/directx/dsound_new/primary.c b/reactos/dll/directx/dsound_new/primary.c
index 9b5e822e8bc..2a62ccee855 100644
--- a/reactos/dll/directx/dsound_new/primary.c
+++ b/reactos/dll/directx/dsound_new/primary.c
@@ -17,6 +17,10 @@ typedef struct
LPFILTERINFO Filter;
DWORD dwLevel;
+ DWORD dwFlags;
+ DWORD dwFrequency;
+ LONG Volume;
+ LONG VolumePan;
WAVEFORMATEX Format;
HANDLE hPin;
CRITICAL_SECTION Lock;
@@ -94,8 +98,29 @@ PrimaryDirectSoundBuffer8Impl_fnGetCaps(
LPDIRECTSOUNDBUFFER8 iface,
LPDSBCAPS pDSBufferCaps)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetCaps\n");
+
+ if (!pDSBufferCaps)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ if (pDSBufferCaps->dwSize < sizeof(DSBCAPS))
+ {
+ /* invalid buffer size */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get buffer details */
+ pDSBufferCaps->dwUnlockTransferRate = 0;
+ pDSBufferCaps->dwPlayCpuOverhead = 0;
+ pDSBufferCaps->dwSize = 0; //FIXME
+ pDSBufferCaps->dwFlags = This->dwFlags;
+
+ return DS_OK;
}
HRESULT
@@ -105,7 +130,23 @@ PrimaryDirectSoundBuffer8Impl_fnGetCurrentPosition(
LPDWORD pdwCurrentPlayCursor,
LPDWORD pdwCurrentWriteCursor)
{
- UNIMPLEMENTED
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetCurrentPosition\n");
+
+ if (This->dwLevel < DSSCL_PRIORITY)
+ {
+ /* needs priority level */
+ return DSERR_PRIOLEVELNEEDED;
+ }
+
+ if (!pdwCurrentPlayCursor && !pdwCurrentWriteCursor)
+ {
+ /* all parameters are null */
+ return DSERR_INVALIDPARAM;
+ }
+
+ UNIMPLEMENTED;
return DSERR_INVALIDPARAM;
}
@@ -120,6 +161,8 @@ PrimaryDirectSoundBuffer8Impl_fnGetFormat(
DWORD FormatSize;
LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetFormat\n");
+
FormatSize = sizeof(WAVEFORMATEX) + This->Format.cbSize;
if (!pwfxFormat && !pdwSizeWritten)
@@ -160,8 +203,20 @@ PrimaryDirectSoundBuffer8Impl_fnGetVolume(
LPDIRECTSOUNDBUFFER8 iface,
LPLONG plVolume)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetVolume\n");
+
+ if (!plVolume)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get volume */
+ *plVolume = This->Volume;
+
+ return DS_OK;
}
HRESULT
@@ -170,8 +225,20 @@ PrimaryDirectSoundBuffer8Impl_fnGetPan(
LPDIRECTSOUNDBUFFER8 iface,
LPLONG plPan)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetPan\n");
+
+ if (!plPan)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get frequency */
+ *plPan = This->VolumePan;
+
+ return DS_OK;
}
HRESULT
@@ -180,8 +247,20 @@ PrimaryDirectSoundBuffer8Impl_fnGetFrequency(
LPDIRECTSOUNDBUFFER8 iface,
LPDWORD pdwFrequency)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetFrequency\n");
+
+ if (!pdwFrequency)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get frequency */
+ *pdwFrequency = This->dwFrequency;
+
+ return DS_OK;
}
HRESULT
@@ -190,8 +269,24 @@ PrimaryDirectSoundBuffer8Impl_fnGetStatus(
LPDIRECTSOUNDBUFFER8 iface,
LPDWORD pdwStatus)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnGetStatus\n");
+
+ if (!pdwStatus)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ *pdwStatus = 0;
+ if (This->State == KSSTATE_RUN || This->State == KSSTATE_ACQUIRE)
+ {
+ /* buffer is playing */
+ *pdwStatus |= DSBSTATUS_PLAYING | DSBSTATUS_LOOPING;
+ }
+
+ return DS_OK;
}
HRESULT
@@ -201,8 +296,8 @@ PrimaryDirectSoundBuffer8Impl_fnInitialize(
LPDIRECTSOUND pDirectSound,
LPCDSBUFFERDESC pcDSBufferDesc)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ /* RTFM */
+ return DSERR_ALREADYINITIALIZED;
}
HRESULT
@@ -229,8 +324,39 @@ PrimaryDirectSoundBuffer8Impl_fnPlay(
DWORD dwPriority,
DWORD dwFlags)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnPlay dwFlags %x\n", dwFlags);
+
+ if (dwReserved1 != 0 || !(dwFlags & DSBPLAY_LOOPING))
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ PrimaryDirectSoundBuffer_AcquireLock(iface);
+
+ if (This->State == KSSTATE_STOP)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_ACQUIRE);
+ ASSERT(This->State == KSSTATE_ACQUIRE);
+ }
+
+ if (This->State == KSSTATE_ACQUIRE)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_PAUSE);
+ ASSERT(This->State == KSSTATE_PAUSE);
+ }
+
+ if (This->State == KSSTATE_PAUSE)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_RUN);
+ ASSERT(This->State == KSSTATE_RUN);
+ }
+
+ PrimaryDirectSoundBuffer_ReleaseLock(iface);
+
+ return DS_OK;
}
HRESULT
@@ -239,8 +365,8 @@ PrimaryDirectSoundBuffer8Impl_fnSetCurrentPosition(
LPDIRECTSOUNDBUFFER8 iface,
DWORD dwNewPosition)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ /* The position of a primary buffer can't be set */
+ return DSERR_INVALIDCALL;
}
HRESULT
@@ -274,8 +400,20 @@ PrimaryDirectSoundBuffer8Impl_fnSetVolume(
LPDIRECTSOUNDBUFFER8 iface,
LONG lVolume)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (lVolume < DSBVOLUME_MIN || lVolume > DSBVOLUME_MAX)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* TODO: call volume node */
+
+ /* Store volume */
+ This->Volume = lVolume;
+
+ return DS_OK;
}
HRESULT
@@ -284,8 +422,20 @@ PrimaryDirectSoundBuffer8Impl_fnSetPan(
LPDIRECTSOUNDBUFFER8 iface,
LONG lPan)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (lPan < DSBPAN_LEFT || lPan > DSBPAN_RIGHT)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* TODO: call volume node */
+
+ /* Store volume pan */
+ This->VolumePan = lPan;
+
+ return DS_OK;
}
HRESULT
@@ -294,8 +444,16 @@ PrimaryDirectSoundBuffer8Impl_fnSetFrequency(
LPDIRECTSOUNDBUFFER8 iface,
DWORD dwFrequency)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (This->dwLevel < DSSCL_PRIORITY)
+ {
+ /* needs priority level */
+ return DSERR_PRIOLEVELNEEDED;
+ }
+
+ /* invalid request */
+ return DSERR_CONTROLUNAVAIL;
}
HRESULT
@@ -303,8 +461,33 @@ WINAPI
PrimaryDirectSoundBuffer8Impl_fnStop(
LPDIRECTSOUNDBUFFER8 iface)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ DPRINT("PrimaryDirectSoundBuffer8Impl_fnStop\n");
+
+ PrimaryDirectSoundBuffer_AcquireLock(iface);
+
+ if (This->State == KSSTATE_RUN)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_PAUSE);
+ ASSERT(This->State == KSSTATE_PAUSE);
+ }
+
+ if (This->State == KSSTATE_PAUSE)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_ACQUIRE);
+ ASSERT(This->State == KSSTATE_ACQUIRE);
+ }
+
+ if (This->State == KSSTATE_ACQUIRE)
+ {
+ PrimaryDirectSoundBuffer_SetState(iface, KSSTATE_STOP);
+ ASSERT(This->State == KSSTATE_STOP);
+ }
+
+ PrimaryDirectSoundBuffer_ReleaseLock(iface);
+
+ return DS_OK;
}
@@ -322,8 +505,6 @@ PrimaryDirectSoundBuffer8Impl_fnUnlock(
}
-
-
HRESULT
WINAPI
PrimaryDirectSoundBuffer8Impl_fnRestore(
@@ -468,9 +649,10 @@ PrimaryDirectSoundBuffer_GetPosition(
KSAUDIO_POSITION Position;
KSPROPERTY Request;
DWORD Result;
-
LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+ //DPRINT("PrimaryDirectSoundBuffer_GetPosition\n");
+
if (!This->hPin)
{
if (pdwCurrentPlayCursor)
@@ -541,7 +723,10 @@ PrimaryDirectSoundBuffer_SetFormat(
Result = OpenPin(This->Filter->hFilter, PinId, (LPWAVEFORMATEX)pcfxFormat, &This->hPin, bLooped);
DPRINT("PinId %u Result %u\n", PinId, Result);
if (Result == ERROR_SUCCESS)
+ {
+ This->dwFrequency = pcfxFormat->nSamplesPerSec;
break;
+ }
This->hPin = NULL;
DeviceId++;
@@ -583,7 +768,8 @@ HRESULT
NewPrimarySoundBuffer(
LPDIRECTSOUNDBUFFER8 *OutBuffer,
LPFILTERINFO Filter,
- DWORD dwLevel)
+ DWORD dwLevel,
+ DWORD dwFlags)
{
LPCDirectSoundBuffer This = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(CDirectSoundBuffer));
@@ -597,8 +783,21 @@ NewPrimarySoundBuffer(
This->lpVtbl = &vt_DirectSoundBuffer8;
This->Filter = Filter;
This->dwLevel = dwLevel;
+ This->dwFlags = dwFlags;
+ This->dwFrequency = 0;
+ This->Volume = DSBVOLUME_MAX;
+ This->VolumePan = DSBPAN_CENTER;
This->hPin = NULL;
+ /* FIXME: determine default format for audio device */
+ This->Format.cbSize = sizeof(WAVEFORMATEX);
+ This->Format.nChannels = 2;
+ This->Format.nSamplesPerSec = 44100;
+ This->Format.wBitsPerSample = 16;
+ This->Format.wFormatTag = WAVE_FORMAT_PCM;
+ This->Format.nBlockAlign = (This->Format.nChannels * This->Format.wBitsPerSample) / 8;
+ This->Format.nAvgBytesPerSec = (This->Format.nChannels * This->Format.nSamplesPerSec * This->Format.wBitsPerSample) / 8;
+
InitializeCriticalSection(&This->Lock);
*OutBuffer = (LPDIRECTSOUNDBUFFER8)&This->lpVtbl;
diff --git a/reactos/dll/directx/dsound_new/resource.h b/reactos/dll/directx/dsound_new/resource.h
index 5c963cca5f6..04f9ebf3df7 100644
--- a/reactos/dll/directx/dsound_new/resource.h
+++ b/reactos/dll/directx/dsound_new/resource.h
@@ -1,16 +1,4 @@
-#ifndef RESOURCE_H__
-#define RESOURCE_H__
+#pragma once
#define IDS_PRIMARY_PLAYBACK_DEVICE 100
#define IDS_PRIMARY_RECORD_DEVICE 101
-
-
-
-
-
-
-
-
-
-
-#endif
diff --git a/reactos/dll/directx/dsound_new/secondary.c b/reactos/dll/directx/dsound_new/secondary.c
index a3fe2b17a62..2293d34f2e9 100644
--- a/reactos/dll/directx/dsound_new/secondary.c
+++ b/reactos/dll/directx/dsound_new/secondary.c
@@ -17,6 +17,11 @@ typedef struct
LPFILTERINFO Filter;
DWORD dwLevel;
+ DWORD dwFlags;
+ DWORD dwFrequency;
+ DWORD BufferPosition;
+ LONG Volume;
+ LONG VolumePan;
LPWAVEFORMATEX Format;
PUCHAR Buffer;
DWORD BufferSize;
@@ -97,8 +102,27 @@ SecondaryDirectSoundBuffer8Impl_fnGetCaps(
LPDIRECTSOUNDBUFFER8 iface,
LPDSBCAPS pDSBufferCaps)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (!pDSBufferCaps)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ if (pDSBufferCaps->dwSize < sizeof(DSBCAPS))
+ {
+ /* invalid buffer size */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get buffer details */
+ pDSBufferCaps->dwUnlockTransferRate = 0;
+ pDSBufferCaps->dwPlayCpuOverhead = 0;
+ pDSBufferCaps->dwSize = This->BufferSize;
+ pDSBufferCaps->dwFlags = This->dwFlags;
+
+ return DS_OK;
}
HRESULT
@@ -112,15 +136,20 @@ SecondaryDirectSoundBuffer8Impl_fnGetCurrentPosition(
//DPRINT("SecondaryDirectSoundBuffer8Impl_fnGetCurrentPosition This %p Play %p Write %p\n", This, pdwCurrentPlayCursor, pdwCurrentWriteCursor);
- return PrimaryDirectSoundBuffer_GetPosition(This->PrimaryBuffer, pdwCurrentPlayCursor, pdwCurrentWriteCursor);
+ if (pdwCurrentWriteCursor)
+ {
+ *pdwCurrentWriteCursor = This->BufferPosition;
+ }
+
+ return PrimaryDirectSoundBuffer_GetPosition(This->PrimaryBuffer, pdwCurrentPlayCursor, NULL);
}
HRESULT
WINAPI
SecondaryDirectSoundBuffer8Impl_fnGetFormat(
LPDIRECTSOUNDBUFFER8 iface,
- LPWAVEFORMATEX pwfxFormat,
- DWORD dwSizeAllocated,
+ LPWAVEFORMATEX pwfxFormat,
+ DWORD dwSizeAllocated,
LPDWORD pdwSizeWritten)
{
DWORD FormatSize;
@@ -166,8 +195,18 @@ SecondaryDirectSoundBuffer8Impl_fnGetVolume(
LPDIRECTSOUNDBUFFER8 iface,
LPLONG plVolume)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (!plVolume)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get volume */
+ *plVolume = This->Volume;
+
+ return DS_OK;
}
HRESULT
@@ -176,8 +215,18 @@ SecondaryDirectSoundBuffer8Impl_fnGetPan(
LPDIRECTSOUNDBUFFER8 iface,
LPLONG plPan)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (!plPan)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get frequency */
+ *plPan = This->VolumePan;
+
+ return DS_OK;
}
HRESULT
@@ -186,8 +235,18 @@ SecondaryDirectSoundBuffer8Impl_fnGetFrequency(
LPDIRECTSOUNDBUFFER8 iface,
LPDWORD pdwFrequency)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (!pdwFrequency)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* get frequency */
+ *pdwFrequency = This->dwFrequency;
+
+ return DS_OK;
}
HRESULT
@@ -223,8 +282,8 @@ SecondaryDirectSoundBuffer8Impl_fnInitialize(
LPDIRECTSOUND pDirectSound,
LPCDSBUFFERDESC pcDSBufferDesc)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ /* RTFM */
+ return DSERR_ALREADYINITIALIZED;
}
HRESULT
@@ -263,11 +322,18 @@ SecondaryDirectSoundBuffer8Impl_fnLock(
else
{
ASSERT(dwOffset < This->BufferSize);
- ASSERT(dwBytes < This->BufferSize);
- ASSERT(dwBytes + dwOffset <= This->BufferSize);
+ ASSERT(dwBytes <= This->BufferSize);
+
+ dwBytes = min(This->BufferSize - dwOffset, dwBytes);
*ppvAudioPtr1 = This->Buffer + dwOffset;
*pdwAudioBytes1 = dwBytes;
+
+ This->BufferPosition = dwOffset + dwBytes;
+
+ if (This->BufferPosition == This->BufferSize)
+ This->BufferPosition = 0;
+
if (ppvAudioPtr2)
*ppvAudioPtr2 = NULL;
if (pdwAudioBytes2)
@@ -297,6 +363,13 @@ SecondaryDirectSoundBuffer8Impl_fnPlay(
/* sanity check */
ASSERT(dwFlags & DSBPLAY_LOOPING);
+
+ if (This->State == KSSTATE_RUN)
+ {
+ /* sound buffer is already playing */
+ return DS_OK;
+ }
+
/* set dataformat */
hResult = PrimaryDirectSoundBuffer_SetFormat(This->PrimaryBuffer, This->Format, TRUE);
@@ -316,7 +389,9 @@ SecondaryDirectSoundBuffer8Impl_fnPlay(
/* release primary buffer */
PrimaryDirectSoundBuffer_ReleaseLock(This->PrimaryBuffer);
- DPRINT1("SetFormatSuccess PrimaryBuffer %p\n", This->PrimaryBuffer);
+ DPRINT("SetFormatSuccess PrimaryBuffer %p\n", This->PrimaryBuffer);
+ This->State = KSSTATE_RUN;
+
return DS_OK;
}
@@ -340,6 +415,7 @@ SecondaryDirectSoundBuffer8Impl_fnSetFormat(
LPDIRECTSOUNDBUFFER8 iface,
LPCWAVEFORMATEX pcfxFormat)
{
+ /* RTFM */
return DSERR_INVALIDCALL;
}
@@ -349,8 +425,19 @@ SecondaryDirectSoundBuffer8Impl_fnSetVolume(
LPDIRECTSOUNDBUFFER8 iface,
LONG lVolume)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (lVolume < DSBVOLUME_MIN || lVolume > DSBVOLUME_MAX)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+
+ /* Store volume */
+ This->Volume = lVolume;
+
+ return DS_OK;
}
HRESULT
@@ -359,8 +446,18 @@ SecondaryDirectSoundBuffer8Impl_fnSetPan(
LPDIRECTSOUNDBUFFER8 iface,
LONG lPan)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (lPan < DSBPAN_LEFT || lPan > DSBPAN_RIGHT)
+ {
+ /* invalid parameter */
+ return DSERR_INVALIDPARAM;
+ }
+
+ /* Store volume pan */
+ This->VolumePan = lPan;
+
+ return DS_OK;
}
HRESULT
@@ -369,8 +466,29 @@ SecondaryDirectSoundBuffer8Impl_fnSetFrequency(
LPDIRECTSOUNDBUFFER8 iface,
DWORD dwFrequency)
{
- UNIMPLEMENTED
- return DSERR_INVALIDPARAM;
+ LPCDirectSoundBuffer This = (LPCDirectSoundBuffer)CONTAINING_RECORD(iface, CDirectSoundBuffer, lpVtbl);
+
+ if (dwFrequency == DSBFREQUENCY_ORIGINAL)
+ {
+ /* restore original frequency */
+ dwFrequency = This->Format->nSamplesPerSec;
+ }
+
+ if (dwFrequency < DSBFREQUENCY_MIN || dwFrequency > DSBFREQUENCY_MAX)
+ {
+ /* invalid frequency */
+ return DSERR_INVALIDPARAM;
+ }
+
+ if (dwFrequency != This->dwFrequency)
+ {
+ /* FIXME handle frequency change */
+ }
+
+ /* store frequency */
+ This->dwFrequency = dwFrequency;
+
+ return DS_OK;
}
HRESULT
@@ -384,6 +502,13 @@ SecondaryDirectSoundBuffer8Impl_fnStop(
PrimaryDirectSoundBuffer_SetState(This->PrimaryBuffer, KSSTATE_ACQUIRE);
PrimaryDirectSoundBuffer_SetState(This->PrimaryBuffer, KSSTATE_STOP);
+ DPRINT("SecondaryDirectSoundBuffer8Impl_fnStop\n");
+
+
+ /* set state to stop */
+ This->State = KSSTATE_STOP;
+ This->BufferPosition = 0;
+
return DS_OK;
}
@@ -522,12 +647,18 @@ NewSecondarySoundBuffer(
return DSERR_OUTOFMEMORY;
}
+ /* fill buffer with silence */
+ FillMemory(This->Buffer, lpcDSBufferDesc->dwBufferBytes, lpcDSBufferDesc->lpwfxFormat->wBitsPerSample == 8 ? 0x80 : 0);
This->ref = 1;
This->lpVtbl = &vt_DirectSoundBuffer8;
This->Filter = Filter;
This->dwLevel = dwLevel;
+ This->dwFlags = lpcDSBufferDesc->dwFlags;
+ This->dwFrequency = lpcDSBufferDesc->lpwfxFormat->nSamplesPerSec;
This->State = KSSTATE_STOP;
+ This->Volume = DSBVOLUME_MAX;
+ This->VolumePan = DSBPAN_CENTER;
This->Flags = 0;
This->Position = 0;
This->BufferSize = lpcDSBufferDesc->dwBufferBytes;
diff --git a/reactos/dll/directx/ksproxy/allocator.cpp b/reactos/dll/directx/ksproxy/allocator.cpp
new file mode 100644
index 00000000000..f5b9c1e1e6a
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/allocator.cpp
@@ -0,0 +1,606 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/allocator.cpp
+ * PURPOSE: IKsAllocator interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID IID_IKsAllocatorEx = {0x091bb63a, 0x603f, 0x11d1, {0xb0, 0x67, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}};
+const GUID IID_IKsAllocator = {0x8da64899, 0xc0d9, 0x11d0, {0x84, 0x13, 0x00, 0x00, 0xf8, 0x22, 0xfe, 0x8a}};
+
+class CKsAllocator : public IKsAllocatorEx,
+ public IMemAllocatorCallbackTemp
+{
+public:
+ typedef std::stackMediaSampleStack;
+ typedef std::listMediaSampleList;
+
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+ //IKsAllocator
+ HANDLE STDMETHODCALLTYPE KsGetAllocatorHandle();
+ KSALLOCATORMODE STDMETHODCALLTYPE KsGetAllocatorMode();
+ HRESULT STDMETHODCALLTYPE KsGetAllocatorStatus(PKSSTREAMALLOCATOR_STATUS AllocatorStatus);
+ VOID STDMETHODCALLTYPE KsSetAllocatorMode(KSALLOCATORMODE Mode);
+
+ //IKsAllocatorEx
+ PALLOCATOR_PROPERTIES_EX STDMETHODCALLTYPE KsGetProperties();
+ VOID STDMETHODCALLTYPE KsSetProperties(PALLOCATOR_PROPERTIES_EX Properties);
+ VOID STDMETHODCALLTYPE KsSetAllocatorHandle(HANDLE AllocatorHandle);
+ HANDLE STDMETHODCALLTYPE KsCreateAllocatorAndGetHandle(IKsPin* KsPin);
+
+ //IMemAllocator
+ HRESULT STDMETHODCALLTYPE SetProperties(ALLOCATOR_PROPERTIES *pRequest, ALLOCATOR_PROPERTIES *pActual);
+ HRESULT STDMETHODCALLTYPE GetProperties(ALLOCATOR_PROPERTIES *pProps);
+ HRESULT STDMETHODCALLTYPE Commit();
+ HRESULT STDMETHODCALLTYPE Decommit();
+ HRESULT STDMETHODCALLTYPE GetBuffer(IMediaSample **ppBuffer, REFERENCE_TIME *pStartTime, REFERENCE_TIME *pEndTime, DWORD dwFlags);
+ HRESULT STDMETHODCALLTYPE ReleaseBuffer(IMediaSample *pBuffer);
+
+ //IMemAllocatorCallbackTemp
+ HRESULT STDMETHODCALLTYPE SetNotify(IMemAllocatorNotifyCallbackTemp *pNotify);
+ HRESULT STDMETHODCALLTYPE GetFreeCount(LONG *plBuffersFree);
+
+
+ CKsAllocator();
+ virtual ~CKsAllocator(){}
+ VOID STDMETHODCALLTYPE FreeMediaSamples();
+protected:
+ LONG m_Ref;
+ HANDLE m_hAllocator;
+ KSALLOCATORMODE m_Mode;
+ ALLOCATOR_PROPERTIES_EX m_Properties;
+ IMemAllocatorNotifyCallbackTemp *m_Notify;
+ ULONG m_Allocated;
+ LONG m_cbBuffer;
+ LONG m_cBuffers;
+ LONG m_cbAlign;
+ LONG m_cbPrefix;
+ BOOL m_Commited;
+ CRITICAL_SECTION m_CriticalSection;
+ MediaSampleStack m_FreeList;
+ MediaSampleList m_UsedList;
+ LPVOID m_Buffer;
+ BOOL m_FreeSamples;
+};
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IKsAllocator) ||
+ IsEqualGUID(refiid, IID_IKsAllocatorEx))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IMemAllocator) ||
+ IsEqualGUID(refiid, IID_IMemAllocatorCallbackTemp))
+ {
+ *Output = (IMemAllocatorCallbackTemp*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+CKsAllocator::CKsAllocator() : m_Ref(0),
+ m_hAllocator(0),
+ m_Mode(KsAllocatorMode_User),
+ m_Notify(0),
+ m_Allocated(0),
+ m_cbBuffer(0),
+ m_cBuffers(0),
+ m_cbAlign(0),
+ m_cbPrefix(0),
+ m_Commited(FALSE),
+ m_FreeList(),
+ m_UsedList(),
+ m_Buffer(0),
+ m_FreeSamples(FALSE)
+{
+ InitializeCriticalSection(&m_CriticalSection);
+
+}
+
+//-------------------------------------------------------------------
+// IMemAllocator
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::SetProperties(
+ ALLOCATOR_PROPERTIES *pRequest,
+ ALLOCATOR_PROPERTIES *pActual)
+{
+ SYSTEM_INFO SystemInfo;
+
+ EnterCriticalSection(&m_CriticalSection);
+ OutputDebugStringW(L"CKsAllocator::SetProperties\n");
+
+ if (!pRequest || !pActual)
+ return E_POINTER;
+
+ // zero output properties
+ ZeroMemory(pActual, sizeof(ALLOCATOR_PROPERTIES));
+
+ // get system info
+ GetSystemInfo(&SystemInfo);
+
+ if (!pRequest->cbAlign || (pRequest->cbAlign - 1) & SystemInfo.dwAllocationGranularity)
+ {
+ // bad alignment
+ LeaveCriticalSection(&m_CriticalSection);
+ return VFW_E_BADALIGN;
+ }
+
+ if (m_Mode == KsAllocatorMode_Kernel)
+ {
+ // u can't change a kernel allocator
+ LeaveCriticalSection(&m_CriticalSection);
+ return VFW_E_ALREADY_COMMITTED;
+ }
+
+ if (m_Commited)
+ {
+ // need to decommit first
+ LeaveCriticalSection(&m_CriticalSection);
+ return VFW_E_ALREADY_COMMITTED;
+ }
+
+ if (m_Allocated != m_FreeList.size())
+ {
+ // outstanding buffers
+ LeaveCriticalSection(&m_CriticalSection);
+ return VFW_E_BUFFERS_OUTSTANDING;
+ }
+
+ pActual->cbAlign = m_cbAlign = pRequest->cbAlign;
+ pActual->cbBuffer = m_cbBuffer = pRequest->cbBuffer;
+ pActual->cbPrefix = m_cbPrefix = pRequest->cbPrefix;
+ pActual->cBuffers = m_cBuffers = pRequest->cBuffers;
+
+ LeaveCriticalSection(&m_CriticalSection);
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::GetProperties(
+ ALLOCATOR_PROPERTIES *pProps)
+{
+ if (!pProps)
+ return E_POINTER;
+
+ pProps->cbBuffer = m_cbBuffer;
+ pProps->cBuffers = m_cBuffers;
+ pProps->cbAlign = m_cbAlign;
+ pProps->cbPrefix = m_cbPrefix;
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::Commit()
+{
+ LONG Index;
+ PUCHAR CurrentBuffer;
+ IMediaSample * Sample;
+ HRESULT hr;
+
+ //TODO integer overflow checks
+ EnterCriticalSection(&m_CriticalSection);
+
+ OutputDebugStringW(L"CKsAllocator::Commit\n");
+
+ if (m_Mode == KsAllocatorMode_Kernel)
+ {
+ /* no-op for kernel allocator */
+ LeaveCriticalSection(&m_CriticalSection);
+ return NOERROR;
+ }
+
+ if (m_Commited)
+ {
+ // already commited
+ LeaveCriticalSection(&m_CriticalSection);
+ return NOERROR;
+ }
+
+ if (m_cbBuffer < 0 || m_cBuffers < 0 || m_cbPrefix < 0)
+ {
+ // invalid parameter
+ LeaveCriticalSection(&m_CriticalSection);
+ return E_OUTOFMEMORY;
+ }
+
+ LONG Size = m_cbBuffer + m_cbPrefix;
+
+ if (m_cbAlign > 1)
+ {
+ //check alignment
+ LONG Mod = Size % m_cbAlign;
+ if (Mod)
+ {
+ // calculate aligned size
+ Size += m_cbAlign - Mod;
+ }
+ }
+
+ LONG TotalSize = Size * m_cBuffers;
+
+ assert(TotalSize);
+ assert(m_cBuffers);
+ assert(Size);
+
+ // now allocate buffer
+ m_Buffer = VirtualAlloc(NULL, TotalSize, MEM_COMMIT, PAGE_READWRITE);
+ if (!m_Buffer)
+ {
+ LeaveCriticalSection(&m_CriticalSection);
+ return E_OUTOFMEMORY;
+ }
+
+ ZeroMemory(m_Buffer, TotalSize);
+
+ CurrentBuffer = (PUCHAR)m_Buffer;
+
+ for (Index = 0; Index < m_cBuffers; Index++)
+ {
+ // construct media sample
+ hr = CMediaSample_Constructor((IMemAllocator*)this, CurrentBuffer + m_cbPrefix, m_cbBuffer, IID_IMediaSample, (void**)&Sample);
+ if (FAILED(hr))
+ {
+ LeaveCriticalSection(&m_CriticalSection);
+ return E_OUTOFMEMORY;
+ }
+
+ // add to free list
+ m_FreeList.push(Sample);
+ m_Allocated++;
+
+ //next sample buffer
+ CurrentBuffer += Size;
+ }
+
+ // we are now commited
+ m_Commited = true;
+
+ LeaveCriticalSection(&m_CriticalSection);
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::Decommit()
+{
+ EnterCriticalSection(&m_CriticalSection);
+
+ OutputDebugStringW(L"CKsAllocator::Decommit\n");
+
+ if (m_Mode == KsAllocatorMode_Kernel)
+ {
+ /* no-op for kernel allocator */
+ LeaveCriticalSection(&m_CriticalSection);
+ return NOERROR;
+ }
+
+ m_Commited = false;
+
+ if (m_Allocated != m_FreeList.size())
+ {
+ // outstanding buffers
+ m_FreeSamples = true;
+ LeaveCriticalSection(&m_CriticalSection);
+ return NOERROR;
+ }
+ else
+ {
+ // no outstanding buffers
+ // free to free them
+ FreeMediaSamples();
+ }
+
+ LeaveCriticalSection(&m_CriticalSection);
+ return NOERROR;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::GetBuffer(
+ IMediaSample **ppBuffer,
+ REFERENCE_TIME *pStartTime,
+ REFERENCE_TIME *pEndTime,
+ DWORD dwFlags)
+{
+ IMediaSample * Sample = NULL;
+ OutputDebugStringW(L"CKsAllocator::GetBuffer\n");
+
+ do
+ {
+ EnterCriticalSection(&m_CriticalSection);
+
+ if (!m_FreeList.empty())
+ {
+ Sample = m_FreeList.top();
+ m_FreeList.pop();
+ }
+
+ LeaveCriticalSection(&m_CriticalSection);
+
+ if (dwFlags & AM_GBF_NOWAIT)
+ {
+ // never wait untill a buffer becomes available
+ break;
+ }
+ }
+ while(Sample == NULL);
+
+ if (!Sample)
+ {
+ // no sample acquired
+ //HACKKKKKKK
+ Sample = m_UsedList.back();
+ m_UsedList.pop_back();
+
+ if (!Sample)
+ return VFW_E_TIMEOUT;
+ }
+
+ // store result
+ *ppBuffer = Sample;
+
+ // store sample in used list
+ m_UsedList.push_front(Sample);
+
+ // done
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::ReleaseBuffer(
+ IMediaSample *pBuffer)
+{
+ EnterCriticalSection(&m_CriticalSection);
+
+ OutputDebugStringW(L"CKsAllocator::ReleaseBuffer\n");
+
+ // media sample always 1 ref count in free list
+ pBuffer->AddRef();
+
+ // add the sample to the free list
+ m_FreeList.push(pBuffer);
+
+
+ if (m_FreeSamples)
+ {
+ // pending de-commit
+ if (m_FreeList.size () == m_Allocated)
+ {
+ FreeMediaSamples();
+ }
+ }
+
+ if (m_Notify)
+ {
+ //notify caller of an available buffer
+ m_Notify->NotifyRelease();
+ }
+
+ LeaveCriticalSection(&m_CriticalSection);
+ return S_OK;
+}
+
+//-------------------------------------------------------------------
+// IMemAllocatorCallbackTemp
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::SetNotify(
+ IMemAllocatorNotifyCallbackTemp *pNotify)
+{
+ EnterCriticalSection(&m_CriticalSection);
+ OutputDebugStringW(L"CKsAllocator::SetNotify\n");
+
+ if (pNotify)
+ pNotify->AddRef();
+
+ if (m_Notify)
+ m_Notify->Release();
+
+ m_Notify = pNotify;
+
+ LeaveCriticalSection(&m_CriticalSection);
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::GetFreeCount(
+ LONG *plBuffersFree)
+{
+ *plBuffersFree = m_Allocated - m_FreeList.size();
+ return S_OK;
+}
+
+//-------------------------------------------------------------------
+// IKsAllocator
+//
+HANDLE
+STDMETHODCALLTYPE
+CKsAllocator::KsGetAllocatorHandle()
+{
+ return m_hAllocator;
+}
+
+KSALLOCATORMODE
+STDMETHODCALLTYPE
+CKsAllocator::KsGetAllocatorMode()
+{
+ return m_Mode;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsAllocator::KsGetAllocatorStatus(
+ PKSSTREAMALLOCATOR_STATUS AllocatorStatus)
+{
+ return NOERROR;
+}
+VOID
+STDMETHODCALLTYPE
+CKsAllocator::KsSetAllocatorMode(
+ KSALLOCATORMODE Mode)
+{
+ m_Mode = Mode;
+}
+
+//-------------------------------------------------------------------
+// IKsAllocatorEx
+//
+PALLOCATOR_PROPERTIES_EX
+STDMETHODCALLTYPE
+CKsAllocator::KsGetProperties()
+{
+ return &m_Properties;
+}
+
+VOID
+STDMETHODCALLTYPE
+CKsAllocator::KsSetProperties(
+ PALLOCATOR_PROPERTIES_EX Properties)
+{
+ CopyMemory(&m_Properties, Properties, sizeof(ALLOCATOR_PROPERTIES_EX));
+}
+
+VOID
+STDMETHODCALLTYPE
+CKsAllocator::KsSetAllocatorHandle(
+ HANDLE AllocatorHandle)
+{
+ m_hAllocator = AllocatorHandle;
+}
+
+
+HANDLE
+STDMETHODCALLTYPE
+CKsAllocator::KsCreateAllocatorAndGetHandle(
+ IKsPin* KsPin)
+{
+ HRESULT hr;
+ IKsObject * pObject;
+ KSALLOCATOR_FRAMING AllocatorFraming;
+ HANDLE hPin;
+
+ OutputDebugStringW(L"CKsAllocator::KsCreateAllocatorAndGetHandle\n");
+
+ if (m_hAllocator)
+ {
+ CloseHandle(m_hAllocator);
+ m_hAllocator = NULL;
+ }
+
+ // get pin IKsObject interface
+ hr = KsPin->QueryInterface(IID_IKsObject, (void**)&pObject);
+ if (FAILED(hr))
+ return NULL;
+
+ // get pin handle
+ hPin = pObject->KsGetObjectHandle();
+
+ //release IKsObject interface
+ pObject->Release();
+
+ if (!hPin || hPin == INVALID_HANDLE_VALUE)
+ return NULL;
+
+ //setup allocator framing
+ AllocatorFraming.Frames = m_Properties.cBuffers;
+ AllocatorFraming.FrameSize = m_Properties.cbBuffer;
+ AllocatorFraming.FileAlignment = (m_Properties.cbAlign -1);
+ AllocatorFraming.OptionsFlags = KSALLOCATOR_OPTIONF_SYSTEM_MEMORY;
+ AllocatorFraming.PoolType = (m_Properties.LogicalMemoryType == KS_MemoryTypeKernelPaged);
+
+ DWORD dwError = KsCreateAllocator(hPin, &AllocatorFraming, &m_hAllocator);
+ if (dwError)
+ return NULL;
+
+ return m_hAllocator;
+}
+
+//-------------------------------------------------------------------
+VOID
+STDMETHODCALLTYPE
+CKsAllocator::FreeMediaSamples()
+{
+ ULONG Index;
+
+ for(Index = 0; Index < m_FreeList.size(); Index++)
+ {
+ IMediaSample * Sample = m_FreeList.top();
+ m_FreeList.pop();
+ delete Sample;
+ }
+
+ m_FreeSamples = false;
+ m_Allocated = 0;
+
+ if (m_Buffer)
+ {
+ // release buffer
+ VirtualFree(m_Buffer, 0, MEM_RELEASE);
+
+ m_Buffer = NULL;
+ }
+}
+
+HRESULT
+WINAPI
+CKsAllocator_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ OutputDebugStringW(L"CKsAllocator_Constructor\n");
+
+ CKsAllocator * handler = new CKsAllocator();
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksproxy/basicaudio.cpp b/reactos/dll/directx/ksproxy/basicaudio.cpp
new file mode 100644
index 00000000000..7fec05f2140
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/basicaudio.cpp
@@ -0,0 +1,256 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/basicaudio.cpp
+ * PURPOSE: IBasicAudio interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CKsBasicAudio : public IBasicAudio,
+ public IDistributorNotify
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IDistributorNotify methods
+ HRESULT STDMETHODCALLTYPE Stop();
+ HRESULT STDMETHODCALLTYPE Pause();
+ HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME tStart);
+ HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *pClock);
+ HRESULT STDMETHODCALLTYPE NotifyGraphChange();
+
+ // IDispatch methods
+ HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
+ HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
+ HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
+ HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
+
+
+ // IBasicAudio methods
+ HRESULT STDMETHODCALLTYPE put_Volume(long lVolume);
+ HRESULT STDMETHODCALLTYPE get_Volume(long *plVolume);
+ HRESULT STDMETHODCALLTYPE put_Balance(long lBalance);
+ HRESULT STDMETHODCALLTYPE get_Balance(long *plBalance);
+
+
+ CKsBasicAudio() : m_Ref(0){}
+ virtual ~CKsBasicAudio(){}
+
+protected:
+ LONG m_Ref;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IDistributorNotify))
+ {
+ *Output = (IDistributorNotify*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IBasicAudio))
+ {
+ *Output = (IBasicAudio*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IDistributorNotify interface
+//
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::Stop()
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::Pause()
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::Run(
+ REFERENCE_TIME tStart)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::SetSyncSource(
+ IReferenceClock *pClock)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::NotifyGraphChange()
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IDispatch interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::GetTypeInfoCount(
+ UINT *pctinfo)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::GetTypeInfo(
+ UINT iTInfo,
+ LCID lcid,
+ ITypeInfo **ppTInfo)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::GetIDsOfNames(
+ REFIID riid,
+ LPOLESTR *rgszNames,
+ UINT cNames,
+ LCID lcid,
+ DISPID *rgDispId)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::Invoke(
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS *pDispParams,
+ VARIANT *pVarResult,
+ EXCEPINFO *pExcepInfo,
+ UINT *puArgErr)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IBasicAudio interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::put_Volume(
+ long lVolume)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::get_Volume(
+ long *plVolume)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::put_Balance(
+ long lBalance)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsBasicAudio::get_Balance(
+ long *plBalance)
+{
+ OutputDebugStringW(L"UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CKsBasicAudio_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ OutputDebugStringW(L"CKsBasicAudio_Constructor\n");
+
+ CKsBasicAudio * handler = new CKsBasicAudio();
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksproxy/classfactory.cpp b/reactos/dll/directx/ksproxy/classfactory.cpp
new file mode 100644
index 00000000000..5b90adeb868
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/classfactory.cpp
@@ -0,0 +1,112 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/classfactory.cpp
+ * PURPOSE: IClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CClassFactory : public IClassFactory
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject);
+ HRESULT WINAPI LockServer(BOOL fLock);
+
+ CClassFactory(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, IID *riidInst) : m_Ref(1), m_lpfnCI(lpfnCI), m_IID(riidInst)
+ {};
+
+ virtual ~CClassFactory(){};
+
+protected:
+ LONG m_Ref;
+ LPFNCREATEINSTANCE m_lpfnCI;
+ IID * m_IID;
+};
+
+HRESULT
+WINAPI
+CClassFactory::QueryInterface(
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ *ppvObj = NULL;
+ if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))
+ {
+ *ppvObj = PVOID(this);
+ InterlockedIncrement(&m_Ref);
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::CreateInstance(
+ LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID *ppvObject)
+{
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+
+ *ppvObject = NULL;
+
+ StringFromCLSID(riid, &lpstr);
+
+ swprintf(Buffer, L"riid %s", lpstr);
+ OutputDebugStringW(Buffer);
+
+
+ if ( m_IID == NULL || IsEqualCLSID(riid, *m_IID) || IsEqualCLSID(riid, IID_IUnknown))
+ {
+ return m_lpfnCI(pUnkOuter, riid, ppvObject);
+ }
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::LockServer(
+ BOOL fLock)
+{
+ return E_NOTIMPL;
+}
+
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst)
+{
+ CClassFactory* factory = new CClassFactory(lpfnCI, pcRefDll, riidInst);
+
+ if (!factory)
+ return NULL;
+
+ if (pcRefDll)
+ InterlockedIncrement(pcRefDll);
+
+ return (LPCLASSFACTORY)factory;
+}
diff --git a/reactos/dll/directx/ksproxy/clockforward.cpp b/reactos/dll/directx/ksproxy/clockforward.cpp
new file mode 100644
index 00000000000..d692dec5f63
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/clockforward.cpp
@@ -0,0 +1,361 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/clockforward.cpp
+ * PURPOSE: IKsClockForwarder interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+#ifndef _MSC_VER
+const GUID KSCATEGORY_CLOCK = {0x53172480, 0x4791, 0x11D0, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
+#endif
+
+DWORD WINAPI CKsClockForwarder_ThreadStartup(LPVOID lpParameter);
+
+class CKsClockForwarder : public IDistributorNotify,
+ public IKsObject
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IDistributorNotify interface
+ HRESULT STDMETHODCALLTYPE Stop();
+ HRESULT STDMETHODCALLTYPE Pause();
+ HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME tStart);
+ HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *pClock);
+ HRESULT STDMETHODCALLTYPE NotifyGraphChange();
+
+ // IKsObject interface
+ HANDLE STDMETHODCALLTYPE KsGetObjectHandle();
+
+ CKsClockForwarder(HANDLE handle);
+ virtual ~CKsClockForwarder(){};
+ HRESULT STDMETHODCALLTYPE SetClockState(KSSTATE State);
+protected:
+ LONG m_Ref;
+ HANDLE m_Handle;
+ IReferenceClock * m_Clock;
+ HANDLE m_hEvent;
+ HANDLE m_hThread;
+ BOOL m_ThreadStarted;
+ BOOL m_PendingStop;
+ BOOL m_ForceStart;
+ KSSTATE m_State;
+ REFERENCE_TIME m_Time;
+
+ friend DWORD WINAPI CKsClockForwarder_ThreadStartup(LPVOID lpParameter);
+};
+
+CKsClockForwarder::CKsClockForwarder(
+ HANDLE handle) : m_Ref(0),
+ m_Handle(handle),
+ m_Clock(0),
+ m_hEvent(NULL),
+ m_hThread(NULL),
+ m_ThreadStarted(FALSE),
+ m_PendingStop(FALSE),
+ m_ForceStart(FALSE),
+ m_State(KSSTATE_STOP),
+ m_Time(0)
+{
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsClockForwarder::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IKsObject))
+ {
+ *Output = (IKsObject*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IDistributorNotify))
+ {
+ *Output = (IDistributorNotify*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+#if 0
+ if (IsEqualGUID(refiid, IID_IKsClockForwarder))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+#endif
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IDistributorNotify interface
+//
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsClockForwarder::Stop()
+{
+ OutputDebugString("CKsClockForwarder::Stop\n");
+
+ if (m_ThreadStarted)
+ {
+ // signal pending stop
+ m_PendingStop = true;
+
+ assert(m_hThread);
+ assert(m_hEvent);
+
+ // set stop event
+ SetEvent(m_hEvent);
+
+ // wait untill the thread has finished
+ WaitForSingleObject(m_hThread, INFINITE);
+
+ // close thread handle
+ CloseHandle(m_hThread);
+
+ // zero handle
+ m_hThread = NULL;
+ }
+
+ if (m_hEvent)
+ {
+ // close stop event
+ CloseHandle(m_hEvent);
+ m_hEvent = NULL;
+ }
+
+ m_PendingStop = false;
+
+ SetClockState(KSSTATE_STOP);
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsClockForwarder::Pause()
+{
+ OutputDebugString("CKsClockForwarder::Pause\n");
+
+ if (!m_hEvent)
+ {
+ m_hEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
+ if (!m_hEvent)
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ if (m_State <= KSSTATE_PAUSE)
+ {
+ if (m_State == KSSTATE_STOP)
+ SetClockState(KSSTATE_ACQUIRE);
+
+ if (m_State == KSSTATE_ACQUIRE)
+ SetClockState(KSSTATE_PAUSE);
+ }
+ else
+ {
+ if (!m_ForceStart)
+ {
+ SetClockState(KSSTATE_PAUSE);
+ }
+ }
+
+ if (!m_hThread)
+ {
+ m_hThread = CreateThread(NULL, 0, CKsClockForwarder_ThreadStartup, (LPVOID)this, 0, NULL);
+ if (!m_hThread)
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsClockForwarder::Run(
+ REFERENCE_TIME tStart)
+{
+ OutputDebugString("CKsClockForwarder::Run\n");
+
+ m_Time = tStart;
+
+ if (!m_hEvent || !m_hThread)
+ {
+ m_ForceStart = TRUE;
+ HRESULT hr = Pause();
+ m_ForceStart = FALSE;
+
+ if (FAILED(hr))
+ return hr;
+ }
+
+ assert(m_hThread);
+
+ SetClockState(KSSTATE_RUN);
+ SetEvent(m_hEvent);
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsClockForwarder::SetSyncSource(
+ IReferenceClock *pClock)
+{
+ OutputDebugString("CKsClockForwarder::SetSyncSource\n");
+
+ if (pClock)
+ pClock->AddRef();
+
+ if (m_Clock)
+ m_Clock->Release();
+
+
+ m_Clock = pClock;
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsClockForwarder::NotifyGraphChange()
+{
+ OutputDebugString("CKsClockForwarder::NotifyGraphChange\n");
+ DebugBreak();
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IKsObject interface
+//
+
+HANDLE
+STDMETHODCALLTYPE
+CKsClockForwarder::KsGetObjectHandle()
+{
+ return m_Handle;
+}
+
+//-------------------------------------------------------------------
+HRESULT
+STDMETHODCALLTYPE
+CKsClockForwarder::SetClockState(KSSTATE State)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+
+ Property.Set = KSPROPSETID_Clock;
+ Property.Id = KSPROPERTY_CLOCK_STATE;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ HRESULT hr = KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), &State, sizeof(KSSTATE), &BytesReturned);
+ if (SUCCEEDED(hr))
+ m_State = State;
+
+ return hr;
+}
+
+DWORD
+WINAPI
+CKsClockForwarder_ThreadStartup(LPVOID lpParameter)
+{
+ REFERENCE_TIME Time;
+ ULONG BytesReturned;
+
+ CKsClockForwarder * Fwd = (CKsClockForwarder*)lpParameter;
+
+ Fwd->m_ThreadStarted = TRUE;
+
+ do
+ {
+ if (Fwd->m_PendingStop)
+ break;
+
+ if (Fwd->m_State != KSSTATE_RUN)
+ WaitForSingleObject(Fwd->m_hEvent, INFINITE);
+
+ KSPROPERTY Property;
+ Property.Set = KSPROPSETID_Clock;
+ Property.Id = KSPROPERTY_CLOCK_TIME;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ Fwd->m_Clock->GetTime(&Time);
+ Time -= Fwd->m_Time;
+
+ KsSynchronousDeviceControl(Fwd->m_Handle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), &Time, sizeof(REFERENCE_TIME), &BytesReturned);
+ }
+ while(TRUE);
+
+ Fwd->m_ThreadStarted = FALSE;
+ return NOERROR;
+}
+
+HRESULT
+WINAPI
+CKsClockForwarder_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ HRESULT hr;
+ HANDLE handle;
+
+ OutputDebugStringW(L"CKsClockForwarder_Constructor\n");
+
+ // open default clock
+ hr = KsOpenDefaultDevice(KSCATEGORY_CLOCK, GENERIC_READ | GENERIC_WRITE, &handle);
+
+ if (hr != NOERROR)
+ {
+ OutputDebugString("CKsClockForwarder_Constructor failed to open device\n");
+ return hr;
+ }
+
+ CKsClockForwarder * clock = new CKsClockForwarder(handle);
+
+ if (!clock)
+ {
+ // free clock handle
+ CloseHandle(handle);
+ return E_OUTOFMEMORY;
+ }
+
+ if (FAILED(clock->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete clock;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksproxy/cvpconfig.cpp b/reactos/dll/directx/ksproxy/cvpconfig.cpp
new file mode 100644
index 00000000000..91d2006ad49
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/cvpconfig.cpp
@@ -0,0 +1,319 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/cvpconfig.cpp
+ * PURPOSE: IVPConfig interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CVPConfig : public IVPConfig,
+ public IDistributorNotify
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IDistributorNotify interface
+ HRESULT STDMETHODCALLTYPE Stop();
+ HRESULT STDMETHODCALLTYPE Pause();
+ HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME tStart);
+ HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *pClock);
+ HRESULT STDMETHODCALLTYPE NotifyGraphChange();
+
+ // IVPBaseConfig
+ HRESULT STDMETHODCALLTYPE GetConnectInfo(LPDWORD pdwNumConnectInfo, IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo);
+ HRESULT STDMETHODCALLTYPE SetConnectInfo(DWORD dwChosenEntry);
+ HRESULT STDMETHODCALLTYPE GetVPDataInfo(LPAMVPDATAINFO pamvpDataInfo);
+ HRESULT STDMETHODCALLTYPE GetMaxPixelRate(LPAMVPSIZE pamvpSize, OUT LPDWORD pdwMaxPixelsPerSecond);
+ HRESULT STDMETHODCALLTYPE InformVPInputFormats(DWORD dwNumFormats, IN LPDDPIXELFORMAT pDDPixelFormats);
+ HRESULT STDMETHODCALLTYPE GetVideoFormats(LPDWORD pdwNumFormats, IN OUT LPDDPIXELFORMAT pddPixelFormats);
+ HRESULT STDMETHODCALLTYPE SetVideoFormat(DWORD dwChosenEntry);
+ HRESULT STDMETHODCALLTYPE SetInvertPolarity();
+ HRESULT STDMETHODCALLTYPE GetOverlaySurface(LPDIRECTDRAWSURFACE* ppddOverlaySurface);
+ HRESULT STDMETHODCALLTYPE SetDirectDrawKernelHandle(ULONG_PTR dwDDKernelHandle);
+ HRESULT STDMETHODCALLTYPE SetVideoPortID(IN DWORD dwVideoPortID);
+ HRESULT STDMETHODCALLTYPE SetDDSurfaceKernelHandles(DWORD cHandles, IN ULONG_PTR *rgDDKernelHandles);
+ HRESULT STDMETHODCALLTYPE SetSurfaceParameters(DWORD dwPitch, IN DWORD dwXOrigin, IN DWORD dwYOrigin);
+ // IVPConfig
+ HRESULT STDMETHODCALLTYPE IsVPDecimationAllowed(LPBOOL pbIsDecimationAllowed);
+ HRESULT STDMETHODCALLTYPE SetScalingFactors(LPAMVPSIZE pamvpSize);
+
+ CVPConfig() : m_Ref(0){}
+ virtual ~CVPConfig(){}
+
+protected:
+ LONG m_Ref;
+};
+
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IDistributorNotify))
+ {
+ *Output = (IDistributorNotify*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IVPConfig))
+ {
+ *Output = (IVPConfig*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IDistributorNotify interface
+//
+
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::Stop()
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::Pause()
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::Run(
+ REFERENCE_TIME tStart)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetSyncSource(
+ IReferenceClock *pClock)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::NotifyGraphChange()
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IVPBaseConfig
+//
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::GetConnectInfo(
+ LPDWORD pdwNumConnectInfo,
+ IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetConnectInfo(
+ DWORD dwChosenEntry)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::GetVPDataInfo(
+ LPAMVPDATAINFO pamvpDataInfo)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::GetMaxPixelRate(
+ LPAMVPSIZE pamvpSize,
+ OUT LPDWORD pdwMaxPixelsPerSecond)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::InformVPInputFormats(
+ DWORD dwNumFormats,
+ IN LPDDPIXELFORMAT pDDPixelFormats)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::GetVideoFormats(
+ LPDWORD pdwNumFormats,
+ IN OUT LPDDPIXELFORMAT pddPixelFormats)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetVideoFormat(
+ DWORD dwChosenEntry)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetInvertPolarity()
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::GetOverlaySurface(
+ LPDIRECTDRAWSURFACE* ppddOverlaySurface)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetDirectDrawKernelHandle(
+ ULONG_PTR dwDDKernelHandle)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetVideoPortID(
+ IN DWORD dwVideoPortID)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetDDSurfaceKernelHandles(
+ DWORD cHandles,
+ IN ULONG_PTR *rgDDKernelHandles)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetSurfaceParameters(
+ DWORD dwPitch,
+ IN DWORD dwXOrigin,
+ IN DWORD dwYOrigin)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IVPConfig
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::IsVPDecimationAllowed(
+ LPBOOL pbIsDecimationAllowed)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPConfig::SetScalingFactors(
+ LPAMVPSIZE pamvpSize)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+
+
+HRESULT
+WINAPI
+CVPConfig_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ OutputDebugStringW(L"CVPConfig_Constructor\n");
+
+ CVPConfig * handler = new CVPConfig();
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
+
diff --git a/reactos/dll/directx/ksproxy/cvpvbiconfig.cpp b/reactos/dll/directx/ksproxy/cvpvbiconfig.cpp
new file mode 100644
index 00000000000..016d060aa24
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/cvpvbiconfig.cpp
@@ -0,0 +1,290 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/cvpvbiconfig.cpp
+ * PURPOSE: CVPVBIConfig interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CVPVBIConfig : public IVPVBIConfig,
+ public IDistributorNotify
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IDistributorNotify interface
+ HRESULT STDMETHODCALLTYPE Stop();
+ HRESULT STDMETHODCALLTYPE Pause();
+ HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME tStart);
+ HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *pClock);
+ HRESULT STDMETHODCALLTYPE NotifyGraphChange();
+
+ // IVPBaseConfig
+ HRESULT STDMETHODCALLTYPE GetConnectInfo(LPDWORD pdwNumConnectInfo, IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo);
+ HRESULT STDMETHODCALLTYPE SetConnectInfo(DWORD dwChosenEntry);
+ HRESULT STDMETHODCALLTYPE GetVPDataInfo(LPAMVPDATAINFO pamvpDataInfo);
+ HRESULT STDMETHODCALLTYPE GetMaxPixelRate(LPAMVPSIZE pamvpSize, OUT LPDWORD pdwMaxPixelsPerSecond);
+ HRESULT STDMETHODCALLTYPE InformVPInputFormats(DWORD dwNumFormats, IN LPDDPIXELFORMAT pDDPixelFormats);
+ HRESULT STDMETHODCALLTYPE GetVideoFormats(LPDWORD pdwNumFormats, IN OUT LPDDPIXELFORMAT pddPixelFormats);
+ HRESULT STDMETHODCALLTYPE SetVideoFormat(DWORD dwChosenEntry);
+ HRESULT STDMETHODCALLTYPE SetInvertPolarity();
+ HRESULT STDMETHODCALLTYPE GetOverlaySurface(LPDIRECTDRAWSURFACE* ppddOverlaySurface);
+ HRESULT STDMETHODCALLTYPE SetDirectDrawKernelHandle(ULONG_PTR dwDDKernelHandle);
+ HRESULT STDMETHODCALLTYPE SetVideoPortID(IN DWORD dwVideoPortID);
+ HRESULT STDMETHODCALLTYPE SetDDSurfaceKernelHandles(DWORD cHandles, IN ULONG_PTR *rgDDKernelHandles);
+ HRESULT STDMETHODCALLTYPE SetSurfaceParameters(DWORD dwPitch, IN DWORD dwXOrigin, IN DWORD dwYOrigin);
+
+ CVPVBIConfig() : m_Ref(0){}
+ virtual ~CVPVBIConfig(){}
+
+protected:
+ LONG m_Ref;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IDistributorNotify))
+ {
+ *Output = (IDistributorNotify*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IVPVBIConfig))
+ {
+ *Output = (IVPConfig*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IDistributorNotify interface
+//
+
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::Stop()
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::Pause()
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::Run(
+ REFERENCE_TIME tStart)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::SetSyncSource(
+ IReferenceClock *pClock)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::NotifyGraphChange()
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IVPBaseConfig
+//
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::GetConnectInfo(
+ LPDWORD pdwNumConnectInfo,
+ IN OUT LPDDVIDEOPORTCONNECT pddVPConnectInfo)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::SetConnectInfo(
+ DWORD dwChosenEntry)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::GetVPDataInfo(
+ LPAMVPDATAINFO pamvpDataInfo)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::GetMaxPixelRate(
+ LPAMVPSIZE pamvpSize,
+ OUT LPDWORD pdwMaxPixelsPerSecond)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::InformVPInputFormats(
+ DWORD dwNumFormats,
+ IN LPDDPIXELFORMAT pDDPixelFormats)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::GetVideoFormats(
+ LPDWORD pdwNumFormats,
+ IN OUT LPDDPIXELFORMAT pddPixelFormats)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::SetVideoFormat(
+ DWORD dwChosenEntry)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::SetInvertPolarity()
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::GetOverlaySurface(
+ LPDIRECTDRAWSURFACE* ppddOverlaySurface)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::SetDirectDrawKernelHandle(
+ ULONG_PTR dwDDKernelHandle)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::SetVideoPortID(
+ IN DWORD dwVideoPortID)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::SetDDSurfaceKernelHandles(
+ DWORD cHandles,
+ IN ULONG_PTR *rgDDKernelHandles)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CVPVBIConfig::SetSurfaceParameters(
+ DWORD dwPitch,
+ IN DWORD dwXOrigin,
+ IN DWORD dwYOrigin)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+WINAPI
+CVPVBIConfig_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ OutputDebugStringW(L"CVPVBIConfig_Constructor\n");
+
+ CVPVBIConfig * handler = new CVPVBIConfig();
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksproxy/datatype.cpp b/reactos/dll/directx/ksproxy/datatype.cpp
new file mode 100644
index 00000000000..5006b68a121
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/datatype.cpp
@@ -0,0 +1,245 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/datatype.cpp
+ * PURPOSE: IKsDataTypeHandler interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+/* FIXME guid mess */
+#ifndef _MSC_VER
+const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+#endif
+const GUID IID_IClassFactory = {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+
+class CKsDataTypeHandler : public IKsDataTypeHandler
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT STDMETHODCALLTYPE KsCompleteIoOperation(IN OUT IMediaSample *Sample, IN OUT PVOID StreamHeader, IN KSIOOPERATION IoOperation, IN BOOL Cancelled);
+ HRESULT STDMETHODCALLTYPE KsIsMediaTypeInRanges(IN PVOID DataRanges);
+ HRESULT STDMETHODCALLTYPE KsPrepareIoOperation(IN OUT IMediaSample *Sample, IN OUT PVOID StreamHeader, IN KSIOOPERATION IoOperation);
+ HRESULT STDMETHODCALLTYPE KsQueryExtendedSize(OUT ULONG* ExtendedSize);
+ HRESULT STDMETHODCALLTYPE KsSetMediaType(IN const AM_MEDIA_TYPE* AmMediaType);
+
+ CKsDataTypeHandler() : m_Ref(0), m_Type(0){};
+ virtual ~CKsDataTypeHandler()
+ {
+ if (m_Type)
+ {
+ if (m_Type->pbFormat)
+ CoTaskMemFree(m_Type->pbFormat);
+
+ if (m_Type->pUnk)
+ m_Type->pUnk->Release();
+
+ CoTaskMemFree(m_Type);
+ }
+
+ };
+
+protected:
+ LONG m_Ref;
+ AM_MEDIA_TYPE * m_Type;
+};
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsDataTypeHandler::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IKsDataTypeHandler))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ return E_NOINTERFACE;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsDataTypeHandler::KsCompleteIoOperation(
+ IN OUT IMediaSample *Sample,
+ IN OUT PVOID StreamHeader,
+ IN KSIOOPERATION IoOperation,
+ IN BOOL Cancelled)
+{
+ return NOERROR;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsDataTypeHandler::KsIsMediaTypeInRanges(
+ IN PVOID DataRanges)
+{
+ PKSMULTIPLE_ITEM DataList;
+ PKSDATARANGE DataRange;
+ ULONG Index;
+ HRESULT hr = S_FALSE;
+
+ OutputDebugStringW(L"CKsDataTypeHandler::KsIsMediaTypeInRanges\n");
+
+ DataList = (PKSMULTIPLE_ITEM)DataRanges;
+ DataRange = (PKSDATARANGE)(DataList + 1);
+
+ for(Index = 0; Index < DataList->Count; Index++)
+ {
+ BOOL bMatch = FALSE;
+
+ if (DataRange->FormatSize >= sizeof(KSDATARANGE))
+ {
+ bMatch = IsEqualGUID(DataRange->MajorFormat, GUID_NULL);
+ }
+
+ if (!bMatch && DataRange->FormatSize >= sizeof(KSDATARANGE_AUDIO))
+ {
+ bMatch = IsEqualGUID(DataRange->MajorFormat, MEDIATYPE_Audio);
+ }
+
+ if (bMatch)
+ {
+ if (IsEqualGUID(DataRange->SubFormat, m_Type->subtype) ||
+ IsEqualGUID(DataRange->SubFormat, GUID_NULL))
+ {
+ if (IsEqualGUID(DataRange->Specifier, m_Type->formattype) ||
+ IsEqualGUID(DataRange->Specifier, GUID_NULL))
+ {
+ if (!IsEqualGUID(m_Type->formattype, FORMAT_WaveFormatEx) && !IsEqualGUID(DataRange->Specifier, FORMAT_WaveFormatEx))
+ {
+ //found match
+ hr = S_OK;
+ break;
+ }
+
+ if (DataRange->FormatSize >= sizeof(KSDATARANGE_AUDIO) && m_Type->cbFormat >= sizeof(WAVEFORMATEX))
+ {
+ LPWAVEFORMATEX Format = (LPWAVEFORMATEX)m_Type->pbFormat;
+ PKSDATARANGE_AUDIO AudioRange = (PKSDATARANGE_AUDIO)DataRange;
+
+ if (Format->nSamplesPerSec >= AudioRange->MinimumSampleFrequency &&
+ Format->nSamplesPerSec <= AudioRange->MaximumSampleFrequency &&
+ Format->wBitsPerSample >= AudioRange->MinimumSampleFrequency &&
+ Format->wBitsPerSample <= AudioRange->MaximumBitsPerSample &&
+ Format->nChannels <= AudioRange->MaximumChannels)
+ {
+ // found match
+ hr = S_OK;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ DataRange = (PKSDATARANGE)(((ULONG_PTR)DataRange + DataRange->FormatSize + 7) & ~7);
+ }
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsDataTypeHandler::KsPrepareIoOperation(
+ IN OUT IMediaSample *Sample,
+ IN OUT PVOID StreamHeader,
+ IN KSIOOPERATION IoOperation)
+{
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsDataTypeHandler::KsQueryExtendedSize(
+ OUT ULONG* ExtendedSize)
+{
+ /* no header extension required */
+ *ExtendedSize = 0;
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsDataTypeHandler::KsSetMediaType(
+ IN const AM_MEDIA_TYPE* AmMediaType)
+{
+ OutputDebugString("CKsDataTypeHandler::KsSetMediaType\n");
+
+ if (m_Type)
+ {
+ /* media type can only be set once */
+ return E_FAIL;
+ }
+
+ m_Type = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
+ if (!m_Type)
+ return E_OUTOFMEMORY;
+
+ CopyMemory(m_Type, AmMediaType, sizeof(AM_MEDIA_TYPE));
+
+ if (m_Type->cbFormat)
+ {
+ m_Type->pbFormat = (BYTE*)CoTaskMemAlloc(m_Type->cbFormat);
+
+ if (!m_Type->pbFormat)
+ {
+ CoTaskMemFree(m_Type);
+ return E_OUTOFMEMORY;
+ }
+
+ CopyMemory(m_Type->pbFormat, AmMediaType->pbFormat, m_Type->cbFormat);
+ }
+
+ if (m_Type->pUnk)
+ m_Type->pUnk->AddRef();
+
+
+ return S_OK;
+}
+
+HRESULT
+WINAPI
+CKsDataTypeHandler_Constructor (
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ OutputDebugStringW(L"CKsDataTypeHandler_Constructor\n");
+ CKsDataTypeHandler * handler = new CKsDataTypeHandler();
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksproxy/enum_mediatypes.cpp b/reactos/dll/directx/ksproxy/enum_mediatypes.cpp
new file mode 100644
index 00000000000..462ffda24fc
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/enum_mediatypes.cpp
@@ -0,0 +1,211 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Network Provider for MPEG2 based networks
+ * FILE: dll/directx/msdvbnp/enum_mediatypes.cpp
+ * PURPOSE: IEnumMediaTypes interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CEnumMediaTypes : public IEnumMediaTypes
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT STDMETHODCALLTYPE Next(ULONG cMediaTypes, AM_MEDIA_TYPE **ppMediaTypes, ULONG *pcFetched);
+ HRESULT STDMETHODCALLTYPE Skip(ULONG cMediaTypes);
+ HRESULT STDMETHODCALLTYPE Reset();
+ HRESULT STDMETHODCALLTYPE Clone(IEnumMediaTypes **ppEnum);
+
+
+ CEnumMediaTypes(ULONG MediaTypeCount, AM_MEDIA_TYPE * MediaTypes) : m_Ref(0), m_MediaTypeCount(MediaTypeCount), m_MediaTypes(MediaTypes), m_Index(0){};
+ virtual ~CEnumMediaTypes(){};
+
+protected:
+ LONG m_Ref;
+ ULONG m_MediaTypeCount;
+ AM_MEDIA_TYPE * m_MediaTypes;
+ ULONG m_Index;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IEnumMediaTypes))
+ {
+ *Output = (IEnumMediaTypes*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CEnumMediaTypes::QueryInterface: NoInterface for %s\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IEnumMediaTypes
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::Next(
+ ULONG cMediaTypes,
+ AM_MEDIA_TYPE **ppMediaTypes,
+ ULONG *pcFetched)
+{
+ ULONG i = 0;
+ AM_MEDIA_TYPE * MediaType;
+
+ if (!ppMediaTypes)
+ return E_POINTER;
+
+ if (cMediaTypes > 1 && !pcFetched)
+ return E_INVALIDARG;
+
+ while(i < cMediaTypes)
+ {
+ if (m_Index + i >= m_MediaTypeCount)
+ break;
+
+ MediaType = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
+ if (!MediaType)
+ break;
+
+ if (m_MediaTypes[m_Index + i].cbFormat)
+ {
+ LPBYTE pFormat = (LPBYTE)CoTaskMemAlloc(m_MediaTypes[m_Index + i].cbFormat);
+ if (!pFormat)
+ {
+ CoTaskMemFree(MediaType);
+ break;
+ }
+
+ CopyMemory(MediaType, &m_MediaTypes[m_Index + i], sizeof(AM_MEDIA_TYPE));
+ MediaType->pbFormat = pFormat;
+ CopyMemory(MediaType->pbFormat, m_MediaTypes[m_Index + i].pbFormat, m_MediaTypes[m_Index + i].cbFormat);
+ MediaType->pUnk = (IUnknown *)this;
+ MediaType->pUnk->AddRef();
+ }
+ else
+ {
+ CopyMemory(MediaType, &m_MediaTypes[m_Index + i], sizeof(AM_MEDIA_TYPE));
+ }
+
+ if (MediaType->pUnk)
+ {
+ MediaType->pUnk->AddRef();
+ }
+
+ ppMediaTypes[i] = MediaType;
+ i++;
+ }
+
+ if (pcFetched)
+ {
+ *pcFetched = i;
+ }
+
+ m_Index += i;
+ if (i < cMediaTypes)
+ return S_FALSE;
+ else
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::Skip(
+ ULONG cMediaTypes)
+{
+ if (cMediaTypes + m_Index >= m_MediaTypeCount)
+ {
+ return S_FALSE;
+ }
+
+ m_Index += cMediaTypes;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::Reset()
+{
+ m_Index = 0;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::Clone(
+ IEnumMediaTypes **ppEnum)
+{
+ OutputDebugStringW(L"CEnumMediaTypes::Clone : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CEnumMediaTypes_fnConstructor(
+ ULONG MediaTypeCount,
+ AM_MEDIA_TYPE * MediaTypes,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CEnumMediaTypes * handler = new CEnumMediaTypes(MediaTypeCount, MediaTypes);
+
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CEnumMediaTypes_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!handler)
+ {
+ CoTaskMemFree(MediaTypes);
+ return E_OUTOFMEMORY;
+ }
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
+
diff --git a/reactos/dll/directx/ksproxy/enumpins.cpp b/reactos/dll/directx/ksproxy/enumpins.cpp
new file mode 100644
index 00000000000..5c0f0ecd7bd
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/enumpins.cpp
@@ -0,0 +1,159 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Network Provider for MPEG2 based networks
+ * FILE: dll/directx/msdvbnp/enumpins.cpp
+ * PURPOSE: IEnumPins interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CEnumPins : public IEnumPins
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+
+ HRESULT STDMETHODCALLTYPE Next(ULONG cPins, IPin **ppPins, ULONG *pcFetched);
+ HRESULT STDMETHODCALLTYPE Skip(ULONG cPins);
+ HRESULT STDMETHODCALLTYPE Reset();
+ HRESULT STDMETHODCALLTYPE Clone(IEnumPins **ppEnum);
+
+ CEnumPins(std::vector Pins) : m_Ref(0), m_Pins(Pins), m_Index(0){};
+ virtual ~CEnumPins(){};
+
+protected:
+ LONG m_Ref;
+ std::vector m_Pins;
+ ULONG m_Index;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IEnumPins))
+ {
+ *Output = (IEnumPins*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::Next(
+ ULONG cPins,
+ IPin **ppPins,
+ ULONG *pcFetched)
+{
+ ULONG i = 0;
+
+ if (!ppPins)
+ return E_POINTER;
+
+ if (cPins > 1 && !pcFetched)
+ return E_INVALIDARG;
+
+ while(i < cPins)
+ {
+ if (m_Index + i >= m_Pins.size())
+ break;
+
+ ppPins[i] = m_Pins[m_Index + i];
+ m_Pins[m_Index + i]->AddRef();
+
+ i++;
+ }
+
+ if (pcFetched)
+ {
+ *pcFetched = i;
+ }
+
+ m_Index += i;
+ if (i < cPins)
+ return S_FALSE;
+ else
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::Skip(
+ ULONG cPins)
+{
+ if (cPins + m_Index >= m_Pins.size())
+ {
+ return S_FALSE;
+ }
+
+ m_Index += cPins;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::Reset()
+{
+ m_Index = 0;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::Clone(
+ IEnumPins **ppEnum)
+{
+ OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CEnumPins_fnConstructor(
+ std::vector Pins,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CEnumPins * handler = new CEnumPins(Pins);
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
\ No newline at end of file
diff --git a/reactos/dll/directx/ksproxy/input_pin.cpp b/reactos/dll/directx/ksproxy/input_pin.cpp
new file mode 100644
index 00000000000..783ff703e5e
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/input_pin.cpp
@@ -0,0 +1,1498 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/input_pin.cpp
+ * PURPOSE: InputPin of Proxy Filter
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID IID_IKsPinPipe = {0xe539cd90, 0xa8b4, 0x11d1, {0x81, 0x89, 0x00, 0xa0, 0xc9, 0x06, 0x28, 0x02}};
+const GUID IID_IKsPinEx = {0x7bb38260L, 0xd19c, 0x11d2, {0xb3, 0x8a, 0x00, 0xa0, 0xc9, 0x5e, 0xc2, 0x2e}};
+
+
+#ifndef _MSC_VER
+
+const GUID KSPROPSETID_Connection = {0x1D58C920L, 0xAC9B, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
+
+KSPIN_INTERFACE StandardPinInterface =
+{
+ {STATIC_KSINTERFACESETID_Standard},
+ KSINTERFACE_STANDARD_STREAMING,
+ 0
+};
+
+KSPIN_MEDIUM StandardPinMedium =
+{
+ {STATIC_KSMEDIUMSETID_Standard},
+ KSMEDIUM_TYPE_ANYINSTANCE,
+ 0
+};
+
+#else
+
+KSPIN_INTERFACE StandardPinInterface =
+{
+ STATIC_KSINTERFACESETID_Standard,
+ KSINTERFACE_STANDARD_STREAMING,
+ 0
+};
+
+KSPIN_MEDIUM StandardPinMedium =
+{
+ STATIC_KSMEDIUMSETID_Standard,
+ KSMEDIUM_TYPE_ANYINSTANCE,
+ 0
+};
+
+#endif
+
+class CInputPin : public IPin,
+ public IKsPropertySet,
+ public IKsControl,
+ public IKsObject,
+ public IKsPinEx,
+ public IMemInputPin,
+ public IKsPinPipe,
+ public IKsPinFactory,
+ public IStreamBuilder,
+ public IKsAggregateControl,
+ public IQualityControl,
+ public ISpecifyPropertyPages
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ //IKsPinPipe
+ HRESULT STDMETHODCALLTYPE KsGetPinFramingCache(PKSALLOCATOR_FRAMING_EX *FramingEx, PFRAMING_PROP FramingProp, FRAMING_CACHE_OPS Option);
+ HRESULT STDMETHODCALLTYPE KsSetPinFramingCache(PKSALLOCATOR_FRAMING_EX FramingEx, PFRAMING_PROP FramingProp, FRAMING_CACHE_OPS Option);
+ IPin* STDMETHODCALLTYPE KsGetConnectedPin();
+ IKsAllocatorEx* STDMETHODCALLTYPE KsGetPipe(KSPEEKOPERATION Operation);
+ HRESULT STDMETHODCALLTYPE KsSetPipe(IKsAllocatorEx *KsAllocator);
+ ULONG STDMETHODCALLTYPE KsGetPipeAllocatorFlag();
+ HRESULT STDMETHODCALLTYPE KsSetPipeAllocatorFlag(ULONG Flag);
+ GUID STDMETHODCALLTYPE KsGetPinBusCache();
+ HRESULT STDMETHODCALLTYPE KsSetPinBusCache(GUID Bus);
+ PWCHAR STDMETHODCALLTYPE KsGetPinName();
+ PWCHAR STDMETHODCALLTYPE KsGetFilterName();
+
+ //IPin methods
+ HRESULT STDMETHODCALLTYPE Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE Disconnect();
+ HRESULT STDMETHODCALLTYPE ConnectedTo(IPin **pPin);
+ HRESULT STDMETHODCALLTYPE ConnectionMediaType(AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE QueryPinInfo(PIN_INFO *pInfo);
+ HRESULT STDMETHODCALLTYPE QueryDirection(PIN_DIRECTION *pPinDir);
+ HRESULT STDMETHODCALLTYPE QueryId(LPWSTR *Id);
+ HRESULT STDMETHODCALLTYPE QueryAccept(const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE EnumMediaTypes(IEnumMediaTypes **ppEnum);
+ HRESULT STDMETHODCALLTYPE QueryInternalConnections(IPin **apPin, ULONG *nPin);
+ HRESULT STDMETHODCALLTYPE EndOfStream();
+ HRESULT STDMETHODCALLTYPE BeginFlush();
+ HRESULT STDMETHODCALLTYPE EndFlush();
+ HRESULT STDMETHODCALLTYPE NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+
+ // ISpecifyPropertyPages
+ HRESULT STDMETHODCALLTYPE GetPages(CAUUID *pPages);
+
+ //IKsObject methods
+ HANDLE STDMETHODCALLTYPE KsGetObjectHandle();
+
+ //IKsPropertySet
+ HRESULT STDMETHODCALLTYPE Set(REFGUID guidPropSet, DWORD dwPropID, LPVOID pInstanceData, DWORD cbInstanceData, LPVOID pPropData, DWORD cbPropData);
+ HRESULT STDMETHODCALLTYPE Get(REFGUID guidPropSet, DWORD dwPropID, LPVOID pInstanceData, DWORD cbInstanceData, LPVOID pPropData, DWORD cbPropData, DWORD *pcbReturned);
+ HRESULT STDMETHODCALLTYPE QuerySupported(REFGUID guidPropSet, DWORD dwPropID, DWORD *pTypeSupport);
+
+ //IKsControl
+ HRESULT STDMETHODCALLTYPE KsProperty(PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData, ULONG DataLength, ULONG* BytesReturned);
+ HRESULT STDMETHODCALLTYPE KsMethod(PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData, ULONG DataLength, ULONG* BytesReturned);
+ HRESULT STDMETHODCALLTYPE KsEvent(PKSEVENT Event, ULONG EventLength, LPVOID EventData, ULONG DataLength, ULONG* BytesReturned);
+
+ //IKsPin
+ HRESULT STDMETHODCALLTYPE KsQueryMediums(PKSMULTIPLE_ITEM* MediumList);
+ HRESULT STDMETHODCALLTYPE KsQueryInterfaces(PKSMULTIPLE_ITEM* InterfaceList);
+ HRESULT STDMETHODCALLTYPE KsCreateSinkPinHandle(KSPIN_INTERFACE& Interface, KSPIN_MEDIUM& Medium);
+ HRESULT STDMETHODCALLTYPE KsGetCurrentCommunication(KSPIN_COMMUNICATION *Communication, KSPIN_INTERFACE *Interface, KSPIN_MEDIUM *Medium);
+ HRESULT STDMETHODCALLTYPE KsPropagateAcquire();
+ HRESULT STDMETHODCALLTYPE KsDeliver(IMediaSample* Sample, ULONG Flags);
+ HRESULT STDMETHODCALLTYPE KsMediaSamplesCompleted(PKSSTREAM_SEGMENT StreamSegment);
+ IMemAllocator * STDMETHODCALLTYPE KsPeekAllocator(KSPEEKOPERATION Operation);
+ HRESULT STDMETHODCALLTYPE KsReceiveAllocator(IMemAllocator *MemAllocator);
+ HRESULT STDMETHODCALLTYPE KsRenegotiateAllocator();
+ LONG STDMETHODCALLTYPE KsIncrementPendingIoCount();
+ LONG STDMETHODCALLTYPE KsDecrementPendingIoCount();
+ HRESULT STDMETHODCALLTYPE KsQualityNotify(ULONG Proportion, REFERENCE_TIME TimeDelta);
+ // IKsPinEx
+ VOID STDMETHODCALLTYPE KsNotifyError(IMediaSample* Sample, HRESULT hr);
+
+ //IMemInputPin
+ HRESULT STDMETHODCALLTYPE GetAllocator(IMemAllocator **ppAllocator);
+ HRESULT STDMETHODCALLTYPE NotifyAllocator(IMemAllocator *pAllocator, BOOL bReadOnly);
+ HRESULT STDMETHODCALLTYPE GetAllocatorRequirements(ALLOCATOR_PROPERTIES *pProps);
+ HRESULT STDMETHODCALLTYPE Receive(IMediaSample *pSample);
+ HRESULT STDMETHODCALLTYPE ReceiveMultiple(IMediaSample **pSamples, long nSamples, long *nSamplesProcessed);
+ HRESULT STDMETHODCALLTYPE ReceiveCanBlock( void);
+
+ //IKsPinFactory
+ HRESULT STDMETHODCALLTYPE KsPinFactory(ULONG* PinFactory);
+
+ //IStreamBuilder
+ HRESULT STDMETHODCALLTYPE Render(IPin *ppinOut, IGraphBuilder *pGraph);
+ HRESULT STDMETHODCALLTYPE Backout(IPin *ppinOut, IGraphBuilder *pGraph);
+
+ //IKsAggregateControl
+ HRESULT STDMETHODCALLTYPE KsAddAggregate(IN REFGUID AggregateClass);
+ HRESULT STDMETHODCALLTYPE KsRemoveAggregate(REFGUID AggregateClass);
+
+ //IQualityControl
+ HRESULT STDMETHODCALLTYPE Notify(IBaseFilter *pSelf, Quality q);
+ HRESULT STDMETHODCALLTYPE SetSink(IQualityControl *piqc);
+
+ //---------------------------------------------------------------
+ HRESULT STDMETHODCALLTYPE CheckFormat(const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE CreatePin(const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE CreatePinHandle(PKSPIN_MEDIUM Medium, PKSPIN_INTERFACE Interface, const AM_MEDIA_TYPE *pmt);
+ CInputPin(IBaseFilter * ParentFilter, LPCWSTR PinName, HANDLE hFilter, ULONG PinId, KSPIN_COMMUNICATION Communication);
+ virtual ~CInputPin(){};
+
+protected:
+ LONG m_Ref;
+ IBaseFilter * m_ParentFilter;
+ LPCWSTR m_PinName;
+ HANDLE m_hFilter;
+ HANDLE m_hPin;
+ ULONG m_PinId;
+ IMemAllocator * m_MemAllocator;
+ LONG m_IoCount;
+ KSPIN_COMMUNICATION m_Communication;
+ KSPIN_INTERFACE m_Interface;
+ KSPIN_MEDIUM m_Medium;
+ AM_MEDIA_TYPE m_MediaFormat;
+ IPin * m_Pin;
+ BOOL m_ReadOnly;
+ IKsInterfaceHandler * m_InterfaceHandler;
+ IKsAllocatorEx * m_KsAllocatorEx;
+ ULONG m_PipeAllocatorFlag;
+ BOOL m_bPinBusCacheInitialized;
+ GUID m_PinBusCache;
+ LPWSTR m_FilterName;
+ FRAMING_PROP m_FramingProp[4];
+ PKSALLOCATOR_FRAMING_EX m_FramingEx[4];
+};
+
+CInputPin::CInputPin(
+ IBaseFilter * ParentFilter,
+ LPCWSTR PinName,
+ HANDLE hFilter,
+ ULONG PinId,
+ KSPIN_COMMUNICATION Communication) : m_Ref(0),
+ m_ParentFilter(ParentFilter),
+ m_PinName(PinName),
+ m_hFilter(hFilter),
+ m_hPin(INVALID_HANDLE_VALUE),
+ m_PinId(PinId),
+ m_MemAllocator(0),
+ m_IoCount(0),
+ m_Communication(Communication),
+ m_Pin(0),
+ m_ReadOnly(0),
+ m_InterfaceHandler(0),
+ m_KsAllocatorEx(0),
+ m_PipeAllocatorFlag(0),
+ m_bPinBusCacheInitialized(0),
+ m_FilterName(0)
+{
+ ZeroMemory(m_FramingProp, sizeof(m_FramingProp));
+ ZeroMemory(m_FramingEx, sizeof(m_FramingEx));
+
+ ZeroMemory(&m_MediaFormat, sizeof(AM_MEDIA_TYPE));
+ HRESULT hr = KsGetMediaType(0, &m_MediaFormat, m_hFilter, m_PinId);
+ assert(hr == S_OK);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ WCHAR Buffer[100];
+
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IPin))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IMemInputPin))
+ {
+ if (m_hPin == INVALID_HANDLE_VALUE)
+ {
+ HRESULT hr = CreatePin(&m_MediaFormat);
+ if (FAILED(hr))
+ return hr;
+ }
+
+ *Output = (IMemInputPin*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsObject))
+ {
+ *Output = (IKsObject*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsPropertySet))
+ {
+ if (m_hPin == INVALID_HANDLE_VALUE)
+ {
+ HRESULT hr = CreatePin(&m_MediaFormat);
+ if (FAILED(hr))
+ return hr;
+ }
+
+ *Output = (IKsPropertySet*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsControl))
+ {
+ *Output = (IKsControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsPin) ||
+ IsEqualGUID(refiid, IID_IKsPinEx))
+ {
+ *Output = (IKsPinEx*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsPinPipe))
+ {
+ *Output = (IKsPinPipe*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsPinFactory))
+ {
+ *Output = (IKsPinFactory*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+#if 0
+ else if (IsEqualGUID(refiid, IID_IStreamBuilder))
+ {
+ *Output = (IStreamBuilder*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+#endif
+ else if (IsEqualGUID(refiid, IID_IKsAggregateControl))
+ {
+ *Output = (IKsAggregateControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IQualityControl))
+ {
+ *Output = (IQualityControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_ISpecifyPropertyPages))
+ {
+ *Output = (ISpecifyPropertyPages*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CInputPin::QueryInterface: NoInterface for %s\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+//-------------------------------------------------------------------
+// IQualityControl interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::Notify(
+ IBaseFilter *pSelf,
+ Quality q)
+{
+ OutputDebugStringW(L"CInputPin::Notify NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::SetSink(
+ IQualityControl *piqc)
+{
+ OutputDebugStringW(L"CInputPin::SetSink NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+//-------------------------------------------------------------------
+// IKsAggregateControl interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsAddAggregate(
+ IN REFGUID AggregateClass)
+{
+ OutputDebugStringW(L"CInputPin::KsAddAggregate NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsRemoveAggregate(
+ REFGUID AggregateClass)
+{
+ OutputDebugStringW(L"CInputPin::KsRemoveAggregate NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IStreamBuilder
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::Render(
+ IPin *ppinOut,
+ IGraphBuilder *pGraph)
+{
+ OutputDebugStringW(L"CInputPin::Render\n");
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::Backout(
+ IPin *ppinOut,
+ IGraphBuilder *pGraph)
+{
+ OutputDebugStringW(L"CInputPin::Backout\n");
+ return S_OK;
+}
+
+//-------------------------------------------------------------------
+// IKsPinFactory
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsPinFactory(
+ ULONG* PinFactory)
+{
+ OutputDebugStringW(L"CInputPin::KsPinFactory\n");
+ *PinFactory = m_PinId;
+ return S_OK;
+}
+
+//-------------------------------------------------------------------
+// IKsPinPipe
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsGetPinFramingCache(
+ PKSALLOCATOR_FRAMING_EX *FramingEx,
+ PFRAMING_PROP FramingProp,
+ FRAMING_CACHE_OPS Option)
+{
+ if (Option > Framing_Cache_Write || Option < Framing_Cache_ReadLast)
+ {
+ // invalid argument
+ return E_INVALIDARG;
+ }
+
+ // get framing properties
+ *FramingProp = m_FramingProp[Option];
+ *FramingEx = m_FramingEx[Option];
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsSetPinFramingCache(
+ PKSALLOCATOR_FRAMING_EX FramingEx,
+ PFRAMING_PROP FramingProp,
+ FRAMING_CACHE_OPS Option)
+{
+ ULONG Index;
+ ULONG RefCount = 0;
+
+ if (m_FramingEx[Option])
+ {
+ for(Index = 1; Index < 4; Index++)
+ {
+ if (m_FramingEx[Index] == m_FramingEx[Option])
+ RefCount++;
+ }
+
+ if (RefCount == 1)
+ {
+ // existing framing is only used once
+ CoTaskMemFree(m_FramingEx[Option]);
+ }
+ }
+
+ // store framing
+ m_FramingEx[Option] = FramingEx;
+ m_FramingProp[Option] = *FramingProp;
+
+ return S_OK;
+}
+
+IPin*
+STDMETHODCALLTYPE
+CInputPin::KsGetConnectedPin()
+{
+ return m_Pin;
+}
+
+IKsAllocatorEx*
+STDMETHODCALLTYPE
+CInputPin::KsGetPipe(
+ KSPEEKOPERATION Operation)
+{
+ if (Operation == KsPeekOperation_AddRef)
+ {
+ if (m_KsAllocatorEx)
+ m_KsAllocatorEx->AddRef();
+ }
+ return m_KsAllocatorEx;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsSetPipe(
+ IKsAllocatorEx *KsAllocator)
+{
+ if (KsAllocator)
+ KsAllocator->AddRef();
+
+ if (m_KsAllocatorEx)
+ m_KsAllocatorEx->Release();
+
+ m_KsAllocatorEx = KsAllocator;
+ return NOERROR;
+}
+
+ULONG
+STDMETHODCALLTYPE
+CInputPin::KsGetPipeAllocatorFlag()
+{
+ return m_PipeAllocatorFlag;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsSetPipeAllocatorFlag(
+ ULONG Flag)
+{
+ m_PipeAllocatorFlag = Flag;
+ return NOERROR;
+}
+
+GUID
+STDMETHODCALLTYPE
+CInputPin::KsGetPinBusCache()
+{
+ if (!m_bPinBusCacheInitialized)
+ {
+ CopyMemory(&m_PinBusCache, &m_Medium.Set, sizeof(GUID));
+ m_bPinBusCacheInitialized = TRUE;
+ }
+
+ return m_PinBusCache;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsSetPinBusCache(
+ GUID Bus)
+{
+ CopyMemory(&m_PinBusCache, &Bus, sizeof(GUID));
+ return NOERROR;
+}
+
+PWCHAR
+STDMETHODCALLTYPE
+CInputPin::KsGetPinName()
+{
+ return (PWCHAR)m_PinName;
+}
+
+
+PWCHAR
+STDMETHODCALLTYPE
+CInputPin::KsGetFilterName()
+{
+ return m_FilterName;
+}
+
+//-------------------------------------------------------------------
+// ISpecifyPropertyPages
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::GetPages(CAUUID *pPages)
+{
+ if (!pPages)
+ return E_POINTER;
+
+ pPages->cElems = 0;
+ pPages->pElems = NULL;
+
+ return S_OK;
+}
+
+//-------------------------------------------------------------------
+// IMemInputPin
+//
+
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::GetAllocator(IMemAllocator **ppAllocator)
+{
+ OutputDebugStringW(L"CInputPin::GetAllocator\n");
+ return VFW_E_NO_ALLOCATOR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::NotifyAllocator(IMemAllocator *pAllocator, BOOL bReadOnly)
+{
+ WCHAR Buffer[100];
+ HRESULT hr;
+ ALLOCATOR_PROPERTIES Properties;
+
+ hr = pAllocator->GetProperties(&Properties);
+ swprintf(Buffer, L"CInputPin::NotifyAllocator hr %lx bReadOnly, %u cbAlign %u cbBuffer %u cbPrefix %u cBuffers %u\n", hr, bReadOnly, Properties.cbAlign, Properties.cbBuffer, Properties.cbPrefix, Properties.cBuffers);
+ OutputDebugStringW(Buffer);
+
+ if (pAllocator)
+ {
+ pAllocator->AddRef();
+ }
+
+ if (m_MemAllocator)
+ {
+ m_MemAllocator->Release();
+ }
+
+ m_MemAllocator = pAllocator;
+ m_ReadOnly = bReadOnly;
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::GetAllocatorRequirements(ALLOCATOR_PROPERTIES *pProps)
+{
+ KSALLOCATOR_FRAMING Framing;
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ Property.Set = KSPROPSETID_Connection;
+ Property.Id = KSPROPERTY_CONNECTION_ALLOCATORFRAMING;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ hr = KsProperty(&Property, sizeof(KSPROPERTY), (PVOID)&Framing, sizeof(KSALLOCATOR_FRAMING), &BytesReturned);
+ if (SUCCEEDED(hr))
+ {
+ pProps->cBuffers = Framing.Frames;
+ pProps->cbBuffer = Framing.FrameSize;
+ pProps->cbAlign = Framing.FileAlignment;
+ pProps->cbPrefix = 0;
+ }
+ else
+ hr = E_NOTIMPL;
+
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CInputPin::GetAllocatorRequirements hr %lx m_hPin %p cBuffers %u cbBuffer %u cbAlign %u cbPrefix %u\n", hr, m_hPin, pProps->cBuffers, pProps->cbBuffer, pProps->cbAlign, pProps->cbPrefix);
+ OutputDebugStringW(Buffer);
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::Receive(IMediaSample *pSample)
+{
+ OutputDebugStringW(L"CInputPin::Receive NotImplemented\n");
+ DebugBreak();
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::ReceiveMultiple(IMediaSample **pSamples, long nSamples, long *nSamplesProcessed)
+{
+ OutputDebugStringW(L"CInputPin::ReceiveMultiple NotImplemented\n");
+ DebugBreak();
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::ReceiveCanBlock( void)
+{
+ OutputDebugStringW(L"CInputPin::ReceiveCanBlock NotImplemented\n");
+ DebugBreak();
+ return S_FALSE;
+}
+
+//-------------------------------------------------------------------
+// IKsPin
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsQueryMediums(
+ PKSMULTIPLE_ITEM* MediumList)
+{
+ return KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsQueryInterfaces(
+ PKSMULTIPLE_ITEM* InterfaceList)
+{
+ return KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsCreateSinkPinHandle(
+ KSPIN_INTERFACE& Interface,
+ KSPIN_MEDIUM& Medium)
+{
+ return CreatePin(&m_MediaFormat);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsGetCurrentCommunication(
+ KSPIN_COMMUNICATION *Communication,
+ KSPIN_INTERFACE *Interface,
+ KSPIN_MEDIUM *Medium)
+{
+ if (Communication)
+ {
+ *Communication = m_Communication;
+ }
+
+ if (Interface)
+ {
+ if (!m_hPin)
+ return VFW_E_NOT_CONNECTED;
+
+ CopyMemory(Interface, &m_Interface, sizeof(KSPIN_INTERFACE));
+ }
+
+ if (Medium)
+ {
+ if (!m_hPin)
+ return VFW_E_NOT_CONNECTED;
+
+ CopyMemory(Medium, &m_Medium, sizeof(KSPIN_MEDIUM));
+ }
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsPropagateAcquire()
+{
+ KSPROPERTY Property;
+ KSSTATE State;
+ ULONG BytesReturned;
+ HRESULT hr;
+
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+
+ Property.Set = KSPROPSETID_Connection;
+ Property.Id = KSPROPERTY_CONNECTION_STATE;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ State = KSSTATE_ACQUIRE;
+
+ hr = KsProperty(&Property, sizeof(KSPROPERTY), (LPVOID)&State, sizeof(KSSTATE), &BytesReturned);
+
+ //TODO
+ //propagate to connected pin on the pipe
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsDeliver(
+ IMediaSample* Sample,
+ ULONG Flags)
+{
+ return E_FAIL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsMediaSamplesCompleted(PKSSTREAM_SEGMENT StreamSegment)
+{
+ return NOERROR;
+}
+
+IMemAllocator *
+STDMETHODCALLTYPE
+CInputPin::KsPeekAllocator(KSPEEKOPERATION Operation)
+{
+ if (Operation == KsPeekOperation_AddRef)
+ {
+ // add reference on allocator
+ m_MemAllocator->AddRef();
+ }
+
+ return m_MemAllocator;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsReceiveAllocator(IMemAllocator *MemAllocator)
+{
+
+ if (MemAllocator)
+ {
+ MemAllocator->AddRef();
+ }
+
+ if (m_MemAllocator)
+ {
+ m_MemAllocator->Release();
+ }
+
+ m_MemAllocator = MemAllocator;
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsRenegotiateAllocator()
+{
+ return E_FAIL;
+}
+
+LONG
+STDMETHODCALLTYPE
+CInputPin::KsIncrementPendingIoCount()
+{
+ return InterlockedIncrement((volatile LONG*)&m_IoCount);
+}
+
+LONG
+STDMETHODCALLTYPE
+CInputPin::KsDecrementPendingIoCount()
+{
+ return InterlockedDecrement((volatile LONG*)&m_IoCount);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsQualityNotify(
+ ULONG Proportion,
+ REFERENCE_TIME TimeDelta)
+{
+ OutputDebugStringW(L"CInputPin::KsQualityNotify NotImplemented\n");
+ DebugBreak();
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IKsPinEx
+//
+
+VOID
+STDMETHODCALLTYPE
+CInputPin::KsNotifyError(
+ IMediaSample* Sample,
+ HRESULT hr)
+{
+ OutputDebugStringW(L"CInputPin::KsNotifyError NotImplemented\n");
+}
+
+
+//-------------------------------------------------------------------
+// IKsControl
+//
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsProperty(
+ PKSPROPERTY Property,
+ ULONG PropertyLength,
+ LPVOID PropertyData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+ return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsMethod(
+ PKSMETHOD Method,
+ ULONG MethodLength,
+ LPVOID MethodData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+ return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::KsEvent(
+ PKSEVENT Event,
+ ULONG EventLength,
+ LPVOID EventData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+
+ if (EventLength)
+ return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
+ else
+ return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_DISABLE_EVENT, (PVOID)Event, EventLength, NULL, 0, BytesReturned);
+}
+
+
+//-------------------------------------------------------------------
+// IKsPropertySet
+//
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::Set(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ LPVOID pInstanceData,
+ DWORD cbInstanceData,
+ LPVOID pPropData,
+ DWORD cbPropData)
+{
+ ULONG BytesReturned;
+
+ if (cbInstanceData)
+ {
+ PKSPROPERTY Property = (PKSPROPERTY)CoTaskMemAlloc(sizeof(KSPROPERTY) + cbInstanceData);
+ if (!Property)
+ return E_OUTOFMEMORY;
+
+ Property->Set = guidPropSet;
+ Property->Id = dwPropID;
+ Property->Flags = KSPROPERTY_TYPE_SET;
+
+ CopyMemory((Property+1), pInstanceData, cbInstanceData);
+
+ HRESULT hr = KsProperty(Property, sizeof(KSPROPERTY) + cbInstanceData, pPropData, cbPropData, &BytesReturned);
+ CoTaskMemFree(Property);
+ return hr;
+ }
+ else
+ {
+ KSPROPERTY Property;
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ HRESULT hr = KsProperty(&Property, sizeof(KSPROPERTY), pPropData, cbPropData, &BytesReturned);
+ return hr;
+ }
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::Get(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ LPVOID pInstanceData,
+ DWORD cbInstanceData,
+ LPVOID pPropData,
+ DWORD cbPropData,
+ DWORD *pcbReturned)
+{
+ ULONG BytesReturned;
+
+ if (cbInstanceData)
+ {
+ PKSPROPERTY Property = (PKSPROPERTY)CoTaskMemAlloc(sizeof(KSPROPERTY) + cbInstanceData);
+ if (!Property)
+ return E_OUTOFMEMORY;
+
+ Property->Set = guidPropSet;
+ Property->Id = dwPropID;
+ Property->Flags = KSPROPERTY_TYPE_GET;
+
+ CopyMemory((Property+1), pInstanceData, cbInstanceData);
+
+ HRESULT hr = KsProperty(Property, sizeof(KSPROPERTY) + cbInstanceData, pPropData, cbPropData, &BytesReturned);
+ CoTaskMemFree(Property);
+ return hr;
+ }
+ else
+ {
+ KSPROPERTY Property;
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ HRESULT hr = KsProperty(&Property, sizeof(KSPROPERTY), pPropData, cbPropData, &BytesReturned);
+ return hr;
+ }
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::QuerySupported(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ DWORD *pTypeSupport)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
+
+ return KsProperty(&Property, sizeof(KSPROPERTY), pTypeSupport, sizeof(DWORD), &BytesReturned);
+}
+
+
+//-------------------------------------------------------------------
+// IKsObject
+//
+HANDLE
+STDMETHODCALLTYPE
+CInputPin::KsGetObjectHandle()
+{
+ assert(m_hPin);
+ return m_hPin;
+}
+
+//-------------------------------------------------------------------
+// IPin interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
+{
+ OutputDebugStringW(L"CInputPin::Connect NotImplemented\n");
+ DebugBreak();
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt)
+{
+ HRESULT hr;
+
+ if (m_Pin)
+ {
+ // already connected
+ return VFW_E_ALREADY_CONNECTED;
+ }
+
+ // first check format
+ hr = CheckFormat(pmt);
+ if (FAILED(hr))
+ {
+ // format is not supported
+ return hr;
+ }
+
+ hr = CreatePin(pmt);
+ if (FAILED(hr))
+ {
+ return hr;
+ }
+
+ m_Pin = pConnector;
+ m_Pin->AddRef();
+
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::Disconnect( void)
+{
+ if (!m_Pin)
+ {
+ // pin was not connected
+ return S_FALSE;
+ }
+
+ //FIXME
+ //check if filter is active
+
+ m_Pin->Release();
+ m_Pin = NULL;
+
+ OutputDebugStringW(L"CInputPin::Disconnect\n");
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::ConnectedTo(IPin **pPin)
+{
+ if (!pPin)
+ return E_POINTER;
+
+ if (m_Pin)
+ {
+ // increment reference count
+ m_Pin->AddRef();
+ *pPin = m_Pin;
+ return S_OK;
+ }
+
+ *pPin = NULL;
+ return VFW_E_NOT_CONNECTED;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
+{
+ if (!m_Pin)
+ return VFW_E_NOT_CONNECTED;
+
+ OutputDebugStringW(L"CInputPin::ConnectionMediaType NotImplemented\n");
+ DebugBreak();
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::QueryPinInfo(PIN_INFO *pInfo)
+{
+ wcscpy(pInfo->achName, m_PinName);
+ pInfo->dir = PINDIR_INPUT;
+ pInfo->pFilter = m_ParentFilter;
+ m_ParentFilter->AddRef();
+
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::QueryDirection(PIN_DIRECTION *pPinDir)
+{
+ if (pPinDir)
+ {
+ *pPinDir = PINDIR_INPUT;
+ return S_OK;
+ }
+
+ return E_POINTER;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::QueryId(LPWSTR *Id)
+{
+ *Id = (LPWSTR)CoTaskMemAlloc((wcslen(m_PinName)+1)*sizeof(WCHAR));
+ if (!*Id)
+ return E_OUTOFMEMORY;
+
+ wcscpy(*Id, m_PinName);
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::QueryAccept(
+ const AM_MEDIA_TYPE *pmt)
+{
+ return CheckFormat(pmt);
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum)
+{
+ HRESULT hr;
+ ULONG MediaTypeCount = 0, Index;
+ AM_MEDIA_TYPE * MediaTypes;
+
+ // query media type count
+ hr = KsGetMediaTypeCount(m_hFilter, m_PinId, &MediaTypeCount);
+ if (FAILED(hr) || !MediaTypeCount)
+ return hr;
+
+ // allocate media types
+ MediaTypes = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE) * MediaTypeCount);
+ if (!MediaTypes)
+ {
+ // not enough memory
+ return E_OUTOFMEMORY;
+ }
+
+ // zero media types
+ ZeroMemory(MediaTypes, sizeof(AM_MEDIA_TYPE) * MediaTypeCount);
+
+ for(Index = 0; Index < MediaTypeCount; Index++)
+ {
+ // get media type
+ hr = KsGetMediaType(Index, &MediaTypes[Index], m_hFilter, m_PinId);
+ if (FAILED(hr))
+ {
+ // failed
+ CoTaskMemFree(MediaTypes);
+ return hr;
+ }
+ }
+
+ return CEnumMediaTypes_fnConstructor(MediaTypeCount, MediaTypes, IID_IEnumMediaTypes, (void**)ppEnum);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::QueryInternalConnections(IPin **apPin, ULONG *nPin)
+{
+ OutputDebugStringW(L"CInputPin::QueryInternalConnections NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::EndOfStream( void)
+{
+ OutputDebugStringW(L"CInputPin::EndOfStream NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::BeginFlush( void)
+{
+ OutputDebugStringW(L"CInputPin::BeginFlush NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::EndFlush( void)
+{
+ OutputDebugStringW(L"CInputPin::EndFlush NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
+{
+ OutputDebugStringW(L"CInputPin::NewSegment NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+//-------------------------------------------------------------------
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::CheckFormat(
+ const AM_MEDIA_TYPE *pmt)
+{
+ PKSMULTIPLE_ITEM MultipleItem;
+ PKSDATAFORMAT DataFormat;
+ HRESULT hr;
+
+ if (!pmt)
+ return E_POINTER;
+
+ hr = KsGetMultiplePinFactoryItems(m_hFilter, m_PinId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
+ if (FAILED(hr))
+ return S_FALSE;
+
+ DataFormat = (PKSDATAFORMAT)(MultipleItem + 1);
+ for(ULONG Index = 0; Index < MultipleItem->Count; Index++)
+ {
+ if (IsEqualGUID(pmt->majortype, DataFormat->MajorFormat) &&
+ IsEqualGUID(pmt->subtype, DataFormat->SubFormat) &&
+ IsEqualGUID(pmt->formattype, DataFormat->Specifier))
+ {
+ // format is supported
+ CoTaskMemFree(MultipleItem);
+ OutputDebugStringW(L"CInputPin::CheckFormat format OK\n");
+ return S_OK;
+ }
+ DataFormat = (PKSDATAFORMAT)((ULONG_PTR)DataFormat + DataFormat->FormatSize);
+ }
+ //format is not supported
+ CoTaskMemFree(MultipleItem);
+ return S_FALSE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::CreatePin(
+ const AM_MEDIA_TYPE *pmt)
+{
+ PKSMULTIPLE_ITEM MediumList;
+ PKSMULTIPLE_ITEM InterfaceList;
+ PKSPIN_MEDIUM Medium;
+ PKSPIN_INTERFACE Interface;
+ IKsInterfaceHandler * InterfaceHandler;
+ HRESULT hr;
+
+ // query for pin medium
+ hr = KsQueryMediums(&MediumList);
+ if (FAILED(hr))
+ return hr;
+
+ // query for pin interface
+ hr = KsQueryInterfaces(&InterfaceList);
+ if (FAILED(hr))
+ {
+ // failed
+ CoTaskMemFree(MediumList);
+ return hr;
+ }
+
+ if (MediumList->Count)
+ {
+ //use first available medium
+ Medium = (PKSPIN_MEDIUM)(MediumList + 1);
+ }
+ else
+ {
+ // default to standard medium
+ Medium = &StandardPinMedium;
+ }
+
+ if (InterfaceList->Count)
+ {
+ //use first available interface
+ Interface = (PKSPIN_INTERFACE)(InterfaceList + 1);
+ }
+ else
+ {
+ // default to standard interface
+ Interface = &StandardPinInterface;
+ }
+
+ if (m_Communication != KSPIN_COMMUNICATION_BRIDGE && m_Communication != KSPIN_COMMUNICATION_NONE)
+ {
+ if (!m_InterfaceHandler)
+ {
+ // now load the IKsInterfaceHandler plugin
+ hr = CoCreateInstance(Interface->Set, NULL, CLSCTX_INPROC_SERVER, IID_IKsInterfaceHandler, (void**)&InterfaceHandler);
+ if (FAILED(hr))
+ {
+ // failed to load interface handler plugin
+ OutputDebugStringW(L"CInputPin::CreatePin failed to load InterfaceHandlerPlugin\n");
+ CoTaskMemFree(MediumList);
+ CoTaskMemFree(InterfaceList);
+
+ return hr;
+ }
+
+ // now set the pin
+ hr = InterfaceHandler->KsSetPin((IKsPin*)this);
+ if (FAILED(hr))
+ {
+ // failed to load interface handler plugin
+ OutputDebugStringW(L"CInputPin::CreatePin failed to initialize InterfaceHandlerPlugin\n");
+ InterfaceHandler->Release();
+ CoTaskMemFree(MediumList);
+ CoTaskMemFree(InterfaceList);
+ return hr;
+ }
+
+ // store interface handler
+ m_InterfaceHandler = InterfaceHandler;
+ }
+
+ // now create pin
+ hr = CreatePinHandle(Medium, Interface, pmt);
+ if (FAILED(hr))
+ {
+ m_InterfaceHandler->Release();
+ m_InterfaceHandler = InterfaceHandler;
+ }
+ }
+ else
+ {
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CInputPin::CreatePin unexpected communication %u %s\n", m_Communication, m_PinName);
+ OutputDebugStringW(Buffer);
+ DebugBreak();
+ hr = E_FAIL;
+ }
+
+ // free medium / interface / dataformat
+ CoTaskMemFree(MediumList);
+ CoTaskMemFree(InterfaceList);
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CInputPin::CreatePinHandle(
+ PKSPIN_MEDIUM Medium,
+ PKSPIN_INTERFACE Interface,
+ const AM_MEDIA_TYPE *pmt)
+{
+ PKSPIN_CONNECT PinConnect;
+ PKSDATAFORMAT DataFormat;
+ ULONG Length;
+ HRESULT hr;
+
+ if (m_hPin != INVALID_HANDLE_VALUE)
+ {
+ // pin already exists
+ //CloseHandle(m_hPin);
+ //m_hPin = INVALID_HANDLE_VALUE;
+ return S_OK;
+ }
+
+
+ // calc format size
+ Length = sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT) + pmt->cbFormat;
+
+ // allocate pin connect
+ PinConnect = (PKSPIN_CONNECT)CoTaskMemAlloc(Length);
+ if (!PinConnect)
+ {
+ // failed
+ return E_OUTOFMEMORY;
+ }
+
+ // setup request
+ CopyMemory(&PinConnect->Interface, Interface, sizeof(KSPIN_INTERFACE));
+ CopyMemory(&PinConnect->Medium, Medium, sizeof(KSPIN_MEDIUM));
+ PinConnect->PinId = m_PinId;
+ PinConnect->PinToHandle = NULL;
+ PinConnect->Priority.PriorityClass = KSPRIORITY_NORMAL;
+ PinConnect->Priority.PrioritySubClass = KSPRIORITY_NORMAL;
+
+ // get dataformat offset
+ DataFormat = (PKSDATAFORMAT)(PinConnect + 1);
+
+ // copy data format
+ DataFormat->FormatSize = sizeof(KSDATAFORMAT) + pmt->cbFormat;
+ DataFormat->Flags = 0;
+ DataFormat->SampleSize = pmt->lSampleSize;
+ DataFormat->Reserved = 0;
+ CopyMemory(&DataFormat->MajorFormat, &pmt->majortype, sizeof(GUID));
+ CopyMemory(&DataFormat->SubFormat, &pmt->subtype, sizeof(GUID));
+ CopyMemory(&DataFormat->Specifier, &pmt->formattype, sizeof(GUID));
+
+ if (pmt->cbFormat)
+ {
+ // copy extended format
+ CopyMemory((DataFormat + 1), pmt->pbFormat, pmt->cbFormat);
+ }
+
+ // create pin
+ hr = KsCreatePin(m_hFilter, PinConnect, GENERIC_WRITE, &m_hPin);
+
+ if (SUCCEEDED(hr))
+ {
+ // store current interface / medium
+ CopyMemory(&m_Medium, Medium, sizeof(KSPIN_MEDIUM));
+ CopyMemory(&m_Interface, Interface, sizeof(KSPIN_INTERFACE));
+ CopyMemory(&m_MediaFormat, pmt, sizeof(AM_MEDIA_TYPE));
+
+ LPOLESTR pMajor, pSub, pFormat;
+ StringFromIID(m_MediaFormat.majortype, &pMajor);
+ StringFromIID(m_MediaFormat.subtype , &pSub);
+ StringFromIID(m_MediaFormat.formattype, &pFormat);
+ WCHAR Buffer[200];
+ swprintf(Buffer, L"CInputPin::CreatePinHandle Major %s SubType %s Format %s pbFormat %p cbFormat %u\n", pMajor, pSub, pFormat, pmt->pbFormat, pmt->cbFormat);
+ CoTaskMemFree(pMajor);
+ CoTaskMemFree(pSub);
+ CoTaskMemFree(pFormat);
+ OutputDebugStringW(Buffer);
+
+ if (pmt->cbFormat)
+ {
+ m_MediaFormat.pbFormat = (BYTE*)CoTaskMemAlloc(pmt->cbFormat);
+ if (!m_MediaFormat.pbFormat)
+ {
+ CoTaskMemFree(PinConnect);
+ m_MediaFormat.pbFormat = NULL;
+ m_MediaFormat.cbFormat = 0;
+ return E_OUTOFMEMORY;
+ }
+ CopyMemory(m_MediaFormat.pbFormat, pmt->pbFormat, pmt->cbFormat);
+ }
+
+ //TODO
+ // connect pin pipes
+
+ }
+
+ // free pin connect
+ CoTaskMemFree(PinConnect);
+
+ return hr;
+}
+
+HRESULT
+WINAPI
+CInputPin_Constructor(
+ IBaseFilter * ParentFilter,
+ LPCWSTR PinName,
+ HANDLE hFilter,
+ ULONG PinId,
+ KSPIN_COMMUNICATION Communication,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CInputPin * handler = new CInputPin(ParentFilter, PinName, hFilter, PinId, Communication);
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return S_OK;
+}
diff --git a/reactos/dll/directx/ksproxy/interface.cpp b/reactos/dll/directx/ksproxy/interface.cpp
new file mode 100644
index 00000000000..3d1af0db1b0
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/interface.cpp
@@ -0,0 +1,497 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/interface.cpp
+ * PURPOSE: IKsInterfaceHandler interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID IID_IKsObject = {0x423c13a2, 0x2070, 0x11d0, {0x9e, 0xf7, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
+
+class CKsInterfaceHandler : public IKsInterfaceHandler
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+ HRESULT STDMETHODCALLTYPE KsSetPin(IKsPin *KsPin);
+ HRESULT STDMETHODCALLTYPE KsProcessMediaSamples(IKsDataTypeHandler *KsDataTypeHandler, IMediaSample** SampleList, PLONG SampleCount, KSIOOPERATION IoOperation, PKSSTREAM_SEGMENT *StreamSegment);
+ HRESULT STDMETHODCALLTYPE KsCompleteIo(PKSSTREAM_SEGMENT StreamSegment);
+
+ CKsInterfaceHandler() : m_Ref(0), m_Handle(NULL), m_Pin(0) {m_PinName[0] = L'\0';};
+ virtual ~CKsInterfaceHandler(){};
+
+protected:
+ LONG m_Ref;
+ HANDLE m_Handle;
+ IKsPinEx * m_Pin;
+ WCHAR m_PinName[129];
+};
+
+typedef struct
+{
+ KSSTREAM_SEGMENT StreamSegment;
+ OVERLAPPED Overlapped;
+ IMediaSample * MediaSample[64];
+
+ ULONG SampleCount;
+ ULONG ExtendedSize;
+ PKSSTREAM_HEADER StreamHeader;
+}KSSTREAM_SEGMENT_EXT, *PKSSTREAM_SEGMENT_EXT;
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsInterfaceHandler::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IKsInterfaceHandler))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsInterfaceHandler::KsSetPin(
+ IKsPin *KsPin)
+{
+ HRESULT hr;
+ IKsObject * KsObject;
+ IKsPinEx * Pin;
+
+ // get IKsPinEx interface
+ hr = KsPin->QueryInterface(IID_IKsPinEx, (void**)&Pin);
+ if (SUCCEEDED(hr))
+ {
+ // check if IKsObject is supported
+ hr = KsPin->QueryInterface(IID_IKsObject, (void**)&KsObject);
+
+ if (SUCCEEDED(hr))
+ {
+ // get pin handle
+ m_Handle = KsObject->KsGetObjectHandle();
+
+ // release IKsObject interface
+ KsObject->Release();
+
+ if (!m_Handle)
+ {
+ // expected a file handle
+ hr = E_UNEXPECTED;
+ Pin->Release();
+ }
+ else
+ {
+ if (m_Pin)
+ {
+ // release old interface
+ m_Pin->Release();
+ }
+ m_Pin = Pin;
+ }
+ }
+ else
+ {
+ //release IKsPinEx interface
+ Pin->Release();
+ }
+ }
+#if 1
+ //DBG code
+ PIN_INFO PinInfo;
+ IPin * pPin;
+ if (SUCCEEDED(KsPin->QueryInterface(IID_IPin, (void**)&pPin)))
+ {
+ if (SUCCEEDED(pPin->QueryPinInfo(&PinInfo)))
+ {
+ if (PinInfo.pFilter)
+ PinInfo.pFilter->Release();
+
+ wcscpy(m_PinName, PinInfo.achName);
+ }
+ pPin->Release();
+ }
+#endif
+
+ // done
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsInterfaceHandler::KsProcessMediaSamples(
+ IKsDataTypeHandler *KsDataTypeHandler,
+ IMediaSample** SampleList,
+ PLONG SampleCount,
+ KSIOOPERATION IoOperation,
+ PKSSTREAM_SEGMENT *OutStreamSegment)
+{
+ PKSSTREAM_SEGMENT_EXT StreamSegment;
+ ULONG ExtendedSize, Index, BytesReturned;
+ HRESULT hr = S_OK;
+
+ // sanity check
+ assert(*SampleCount);
+
+ if (*SampleCount == 0 || *SampleCount < 0)
+ return E_FAIL;
+
+ // zero stream segment
+ *OutStreamSegment = NULL;
+
+ // allocate stream segment
+ StreamSegment = (PKSSTREAM_SEGMENT_EXT)CoTaskMemAlloc(sizeof(KSSTREAM_SEGMENT_EXT));
+ if (!StreamSegment)
+ return E_OUTOFMEMORY;
+
+ // zero stream segment
+ ZeroMemory(StreamSegment, sizeof(KSSTREAM_SEGMENT_EXT));
+
+ //allocate event
+ StreamSegment->StreamSegment.CompletionEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+
+ if (!StreamSegment->StreamSegment.CompletionEvent)
+ {
+ // failed to create event
+ CoTaskMemFree(StreamSegment);
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ // increase our own reference count
+ AddRef();
+
+ // setup stream segment
+ StreamSegment->StreamSegment.KsDataTypeHandler = KsDataTypeHandler;
+ StreamSegment->StreamSegment.KsInterfaceHandler = (IKsInterfaceHandler*)this;
+ StreamSegment->StreamSegment.IoOperation = IoOperation;
+ StreamSegment->Overlapped.hEvent = StreamSegment->StreamSegment.CompletionEvent;
+
+
+ // ge extension size
+ ExtendedSize = 0;
+ if (KsDataTypeHandler)
+ {
+ // query extension size
+ KsDataTypeHandler->KsQueryExtendedSize(&ExtendedSize);
+
+ if (ExtendedSize)
+ {
+ // increment reference count
+ KsDataTypeHandler->AddRef();
+ }
+ else
+ {
+ // no need for the datatype handler
+ StreamSegment->StreamSegment.KsDataTypeHandler = NULL;
+ }
+ }
+
+ StreamSegment->ExtendedSize = ExtendedSize;
+ StreamSegment->SampleCount = (ULONG)*SampleCount;
+
+ // calculate stream header size count
+ ULONG StreamHeaderSize = StreamSegment->SampleCount * (sizeof(KSSTREAM_HEADER) + ExtendedSize);
+
+ // allocate stream header
+ StreamSegment->StreamHeader = (PKSSTREAM_HEADER)CoTaskMemAlloc(StreamHeaderSize);
+ if (!StreamSegment->StreamHeader)
+ {
+ // not enough memory
+ CloseHandle(StreamSegment->StreamSegment.CompletionEvent);
+
+ if (StreamSegment->StreamSegment.KsDataTypeHandler)
+ StreamSegment->StreamSegment.KsDataTypeHandler->Release();
+
+ // free stream segment
+ CoTaskMemFree(StreamSegment);
+
+ //release our reference count
+ Release();
+ return E_OUTOFMEMORY;
+ }
+
+ // zero stream headers
+ ZeroMemory(StreamSegment->StreamHeader, StreamHeaderSize);
+
+ PKSSTREAM_HEADER CurStreamHeader = StreamSegment->StreamHeader;
+
+ // initialize all stream headers
+ for(Index = 0; Index < StreamSegment->SampleCount; Index++)
+ {
+ if (ExtendedSize)
+ {
+ // initialize extended size
+ hr = KsDataTypeHandler->KsPrepareIoOperation(SampleList[Index], (CurStreamHeader + 1), IoOperation);
+ // sanity check
+ assert(hr == NOERROR);
+ }
+
+ // query for IMediaSample2 interface
+ IMediaSample2 * MediaSample;
+ AM_SAMPLE2_PROPERTIES Properties;
+ ZeroMemory(&Properties, sizeof(AM_SAMPLE2_PROPERTIES));
+
+ hr = SampleList[Index]->QueryInterface(IID_IMediaSample2, (void**)&MediaSample);
+ if (SUCCEEDED(hr))
+ {
+ //get properties
+
+ hr = MediaSample->GetProperties(sizeof(AM_SAMPLE2_PROPERTIES), (BYTE*)&Properties);
+
+ //release IMediaSample2 interface
+ MediaSample->Release();
+ }
+ else
+ {
+ // get properties
+ hr = SampleList[Index]->GetPointer((BYTE**)&Properties.pbBuffer);
+ assert(hr == NOERROR);
+ hr = SampleList[Index]->GetTime(&Properties.tStart, &Properties.tStop);
+
+ Properties.cbBuffer = SampleList[Index]->GetSize();
+ assert(Properties.cbBuffer);
+
+ Properties.dwSampleFlags = 0;
+
+ if (SampleList[Index]->IsDiscontinuity() == S_OK)
+ Properties.dwSampleFlags |= AM_SAMPLE_DATADISCONTINUITY;
+
+ if (SampleList[Index]->IsPreroll() == S_OK)
+ Properties.dwSampleFlags |= AM_SAMPLE_PREROLL;
+
+ if (SampleList[Index]->IsSyncPoint() == S_OK)
+ Properties.dwSampleFlags |= AM_SAMPLE_SPLICEPOINT;
+ }
+
+ WCHAR Buffer[200];
+ swprintf(Buffer, L"CKsInterfaceHandler::KsProcessMediaSamples PinName %s BufferLength %lu Property Buffer %p ExtendedSize %u lActual %u dwSampleFlags %lx\n", m_PinName, Properties.cbBuffer, Properties.pbBuffer, ExtendedSize, Properties.lActual, Properties.dwSampleFlags);
+ //OutputDebugStringW(Buffer);
+
+ CurStreamHeader->Size = sizeof(KSSTREAM_HEADER) + ExtendedSize;
+ CurStreamHeader->PresentationTime.Denominator = 1;
+ CurStreamHeader->PresentationTime.Numerator = 1;
+ CurStreamHeader->FrameExtent = Properties.cbBuffer;
+ CurStreamHeader->Data = Properties.pbBuffer;
+
+ if (IoOperation == KsIoOperation_Write)
+ {
+ // set flags
+ CurStreamHeader->OptionsFlags = Properties.dwSampleFlags;
+ CurStreamHeader->DataUsed = Properties.lActual;
+ // increment reference count
+ SampleList[Index]->AddRef();
+ }
+
+ // store sample in stream segment
+ StreamSegment->MediaSample[Index] = SampleList[Index];
+
+ // move to next header
+ CurStreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)CurStreamHeader + CurStreamHeader->Size);
+ }
+
+ // submit to device
+ m_Pin->KsIncrementPendingIoCount();
+
+ if (DeviceIoControl(m_Handle,
+ IoOperation == KsIoOperation_Write ? IOCTL_KS_WRITE_STREAM : IOCTL_KS_READ_STREAM,
+ NULL, 0,
+ StreamSegment->StreamHeader,
+ StreamHeaderSize,
+ &BytesReturned,
+ &StreamSegment->Overlapped))
+ {
+ // signal completion
+ SetEvent(StreamSegment->StreamSegment.CompletionEvent);
+ hr = S_OK;
+ *OutStreamSegment = (PKSSTREAM_SEGMENT)StreamSegment;
+ }
+ else
+ {
+ if (GetLastError() == ERROR_IO_PENDING)
+ {
+ *OutStreamSegment = (PKSSTREAM_SEGMENT)StreamSegment;
+ hr = S_OK;
+ }
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsInterfaceHandler::KsCompleteIo(
+ PKSSTREAM_SEGMENT InStreamSegment)
+{
+ PKSSTREAM_SEGMENT_EXT StreamSegment;
+ PKSSTREAM_HEADER CurStreamHeader;
+ DWORD dwError = ERROR_SUCCESS, BytesReturned;
+ BOOL bOverlapped;
+ ULONG Index;
+ HRESULT hr;
+ IMediaSample2 * MediaSample;
+ AM_SAMPLE2_PROPERTIES Properties;
+ REFERENCE_TIME Start, Stop;
+
+ // get private stream segment
+ StreamSegment = (PKSSTREAM_SEGMENT_EXT)InStreamSegment;
+
+ // get result
+ bOverlapped = GetOverlappedResult(m_Handle, &StreamSegment->Overlapped, &BytesReturned, FALSE);
+ dwError = GetLastError();
+
+ CurStreamHeader = StreamSegment->StreamHeader;
+
+ //iterate through all stream headers
+ for(Index = 0; Index < StreamSegment->SampleCount; Index++)
+ {
+ if (!bOverlapped)
+ {
+ // operation failed
+ m_Pin->KsNotifyError(StreamSegment->MediaSample[Index], MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, dwError));
+ }
+
+ // query IMediaSample2 interface
+ hr = StreamSegment->MediaSample[Index]->QueryInterface(IID_IMediaSample2, (void**)&MediaSample);
+ if (SUCCEEDED(hr))
+ {
+ // media sample properties
+ hr = MediaSample->GetProperties(sizeof(AM_SAMPLE2_PROPERTIES), (BYTE*)&Properties);
+ if (SUCCEEDED(hr))
+ {
+ //update media sample properties
+ Properties.dwTypeSpecificFlags = CurStreamHeader->TypeSpecificFlags;
+ Properties.dwSampleFlags |= (CurStreamHeader->OptionsFlags & KSSTREAM_HEADER_OPTIONSF_TIMEDISCONTINUITY);
+
+ MediaSample->SetProperties(sizeof(AM_SAMPLE2_PROPERTIES), (BYTE*)&Properties);
+ }
+ // release IMediaSample2 interface
+ MediaSample->Release();
+ }
+
+ // was an extended header used
+ if (StreamSegment->ExtendedSize)
+ {
+ // unprepare stream header extension
+ StreamSegment->StreamSegment.KsDataTypeHandler->KsCompleteIoOperation(StreamSegment->MediaSample[Index], (CurStreamHeader + 1), StreamSegment->StreamSegment.IoOperation, bOverlapped == FALSE);
+ }
+
+ Start = 0;
+ Stop = 0;
+ if (bOverlapped && StreamSegment->StreamSegment.IoOperation == KsIoOperation_Read)
+ {
+ // update common media sample details
+ StreamSegment->MediaSample[Index]->SetSyncPoint((CurStreamHeader->OptionsFlags & KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT));
+ StreamSegment->MediaSample[Index]->SetPreroll((CurStreamHeader->OptionsFlags & KSSTREAM_HEADER_OPTIONSF_PREROLL));
+ StreamSegment->MediaSample[Index]->SetDiscontinuity((CurStreamHeader->OptionsFlags & KSSTREAM_HEADER_OPTIONSF_DATADISCONTINUITY));
+
+ if (CurStreamHeader->OptionsFlags & KSSTREAM_HEADER_OPTIONSF_TIMEVALID)
+ {
+ // use valid timestamp
+ Start = CurStreamHeader->PresentationTime.Time;
+
+ if (CurStreamHeader->OptionsFlags & KSSTREAM_HEADER_OPTIONSF_DURATIONVALID)
+ {
+ Stop = CurStreamHeader->PresentationTime.Time + CurStreamHeader->Duration;
+ }
+ }
+ }
+
+ // now set time
+ hr = StreamSegment->MediaSample[Index]->SetTime(&Start, &Stop);
+ if (FAILED(hr))
+ {
+ // use start time
+ StreamSegment->MediaSample[Index]->SetTime(&Start, &Start);
+ }
+
+ // set valid data length
+ StreamSegment->MediaSample[Index]->SetActualDataLength(CurStreamHeader->DataUsed);
+
+ if (StreamSegment->StreamSegment.IoOperation == KsIoOperation_Read)
+ {
+ if (bOverlapped)
+ {
+ // deliver sample
+ m_Pin->KsDeliver(StreamSegment->MediaSample[Index], CurStreamHeader->OptionsFlags);
+ }
+ }
+ else if (StreamSegment->StreamSegment.IoOperation == KsIoOperation_Write)
+ {
+ // release media sample reference
+ StreamSegment->MediaSample[Index]->Release();
+ }
+
+ CurStreamHeader = (PKSSTREAM_HEADER)((ULONG_PTR)CurStreamHeader + CurStreamHeader->Size);
+ }
+
+ // delete stream headers
+ CoTaskMemFree(StreamSegment->StreamHeader);
+
+ if (StreamSegment->StreamSegment.KsDataTypeHandler)
+ {
+ // release reference
+ StreamSegment->StreamSegment.KsDataTypeHandler->Release();
+ }
+
+ // decrement pending i/o count
+ m_Pin->KsDecrementPendingIoCount();
+
+ //notify of completion
+ m_Pin->KsMediaSamplesCompleted(InStreamSegment);
+
+ //destroy stream segment
+ CoTaskMemFree(StreamSegment);
+
+ //release reference to ourselves
+ Release();
+
+ // done
+ // Event handle is closed by caller
+ return S_OK;
+}
+
+HRESULT
+WINAPI
+CKsInterfaceHandler_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ OutputDebugStringW(L"CKsInterfaceHandler_Constructor\n");
+
+ CKsInterfaceHandler * handler = new CKsInterfaceHandler();
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksproxy/ksproxy.c b/reactos/dll/directx/ksproxy/ksproxy.c
deleted file mode 100644
index bb899578b57..00000000000
--- a/reactos/dll/directx/ksproxy/ksproxy.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * KSPROXY.AX - ReactOS WDM Streaming ActiveMovie Proxy
- *
- * Copyright 2008 Dmitry Chapyshev
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-HRESULT WINAPI
-KsSynchronousDeviceControl(
- HANDLE Handle,
- ULONG IoControl,
- PVOID InBuffer,
- ULONG InLength,
- PVOID OutBuffer,
- ULONG OutLength,
- PULONG BytesReturned)
-{
- return NOERROR;
-}
-
-HRESULT WINAPI
-KsResolveRequiredAttributes(
- PKSDATARANGE DataRange,
- KSMULTIPLE_ITEM *Attributes OPTIONAL)
-{
- return NOERROR;
-}
-
-HRESULT WINAPI
-KsOpenDefaultDevice(
- REFGUID Category,
- ACCESS_MASK Access,
- PHANDLE DeviceHandle)
-{
- return NOERROR;
-}
-
-HRESULT WINAPI
-KsGetMultiplePinFactoryItems(
- HANDLE FilterHandle,
- ULONG PinFactoryId,
- ULONG PropertyId,
- PVOID *Items)
-{
- return NOERROR;
-}
-
-HRESULT WINAPI
-KsGetMediaTypeCount(
- HANDLE FilterHandle,
- ULONG PinFactoryId,
- ULONG *MediaTypeCount)
-{
- return NOERROR;
-}
-
-HRESULT WINAPI
-KsGetMediaType(
- int Position,
- AM_MEDIA_TYPE *AmMediaType,
- HANDLE FilterHandle,
- ULONG PinFactoryId)
-{
- return NOERROR;
-}
-
-HRESULT WINAPI
-DllUnregisterServer(void)
-{
- return S_OK;
-}
-
-HRESULT WINAPI
-DllRegisterServer(void)
-{
- return S_OK;
-}
-
-HRESULT WINAPI
-DllGetClassObject(
- REFCLSID rclsid,
- REFIID riid,
- LPVOID *ppv)
-{
- return S_OK;
-}
-
-HRESULT WINAPI
-DllCanUnloadNow(void)
-{
- return S_OK;
-}
-
diff --git a/reactos/dll/directx/ksproxy/ksproxy.cpp b/reactos/dll/directx/ksproxy/ksproxy.cpp
new file mode 100644
index 00000000000..f1e17c96922
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/ksproxy.cpp
@@ -0,0 +1,402 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/ksproxy.c
+ * PURPOSE: ActiveMovie Proxy functions
+ *
+ * PROGRAMMERS: Dmitry Chapyshev
+ Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+
+const GUID CLSID_KsClockForwarder = {0x877e4351, 0x6fea, 0x11d0, {0xb8, 0x63, 0x00, 0xaa, 0x00, 0xa2, 0x16, 0xa1}};
+const GUID CLSID_KsQualityForwarder = {0xe05592e4, 0xc0b5, 0x11d0, {0xa4, 0x39, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96}};
+
+
+#ifndef _MSC_VER
+const GUID CLSID_KsIBasicAudioInterfaceHandler = {0xb9f8ac3e, 0x0f71, 0x11d2, {0xb7, 0x2c, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d}};
+const GUID KSPROPSETID_Pin = {0x8C134960, 0x51AD, 0x11CF, {0x87, 0x8A, 0x94, 0xF8, 0x01, 0xC1, 0x00, 0x00}};
+const GUID KSINTERFACESETID_Standard = {STATIC_KSINTERFACESETID_Standard};
+const GUID CLSID_Proxy = {0x17CCA71B, 0xECD7, 0x11D0, {0xB9, 0x08, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
+#endif
+
+static INTERFACE_TABLE InterfaceTable[] =
+{
+ {&MEDIATYPE_Audio, CKsDataTypeHandler_Constructor},
+ {&KSINTERFACESETID_Standard, CKsInterfaceHandler_Constructor},
+ {&CLSID_KsClockForwarder, CKsClockForwarder_Constructor},
+ {&CLSID_KsQualityForwarder, CKsQualityForwarder_Constructor},
+ {&IID_IVPConfig, CVPConfig_Constructor},
+ {&IID_IVPVBIConfig, CVPVBIConfig_Constructor},
+ {&CLSID_KsIBasicAudioInterfaceHandler, CKsBasicAudio_Constructor},
+ {&CLSID_Proxy, CKsProxy_Constructor},
+ {NULL, NULL}
+};
+
+KSDDKAPI
+HRESULT
+WINAPI
+KsSynchronousDeviceControl(
+ HANDLE Handle,
+ ULONG IoControl,
+ PVOID InBuffer,
+ ULONG InLength,
+ PVOID OutBuffer,
+ ULONG OutLength,
+ PULONG BytesReturned)
+{
+ OVERLAPPED Overlapped;
+ DWORD Transferred;
+
+ /* zero overlapped */
+ RtlZeroMemory(&Overlapped, sizeof(OVERLAPPED));
+
+ /* create notification event */
+ Overlapped.hEvent = CreateEventW(NULL, TRUE, FALSE, NULL);
+
+ if (!Overlapped.hEvent)
+ {
+ /* failed */
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ if (!DeviceIoControl(Handle, IoControl, InBuffer, InLength, OutBuffer, OutLength, BytesReturned, &Overlapped))
+ {
+ /* operation failed */
+ if (GetLastError() != ERROR_IO_PENDING)
+ {
+ /* failed */
+ CloseHandle(Overlapped.hEvent);
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+ }
+
+ /* get result of pending operation */
+ if (!GetOverlappedResult(Handle, &Overlapped, &Transferred, TRUE))
+ {
+ /* failed */
+ CloseHandle(Overlapped.hEvent);
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ /* store number of bytes transferred */
+ *BytesReturned = Transferred;
+
+ /* close event object */
+ CloseHandle(Overlapped.hEvent);
+
+ /* done */
+ return NOERROR;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+KsResolveRequiredAttributes(
+ PKSDATARANGE DataRange,
+ KSMULTIPLE_ITEM *Attributes OPTIONAL)
+{
+ //UNIMPLEMENTED
+ return NOERROR;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+KsOpenDefaultDevice(
+ REFGUID Category,
+ ACCESS_MASK Access,
+ PHANDLE DeviceHandle)
+{
+ HDEVINFO hList;
+ SP_DEVINFO_DATA DeviceInfoData;
+ SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
+ PSP_DEVICE_INTERFACE_DETAIL_DATA_W DeviceInterfaceDetailData;
+ WCHAR Path[MAX_PATH+sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W)];
+
+ /* open device list */
+ hList = SetupDiGetClassDevsW(&Category, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
+
+ if (hList == INVALID_HANDLE_VALUE)
+ {
+ /* failed */
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ /* setup parameters */
+ DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
+ DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+
+ if (SetupDiEnumDeviceInterfaces(hList, NULL, &Category, 0, &DeviceInterfaceData))
+ {
+ /* setup interface data struct */
+ DeviceInterfaceDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA_W)Path;
+ DeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W);
+
+ /* get device interface details */
+ if (SetupDiGetDeviceInterfaceDetailW(hList, &DeviceInterfaceData, DeviceInterfaceDetailData, sizeof(Path), NULL, NULL))
+ {
+ /* open device */
+ *DeviceHandle = CreateFileW(DeviceInterfaceDetailData->DevicePath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED | FILE_ATTRIBUTE_NORMAL, NULL);
+
+ if (*DeviceHandle != INVALID_HANDLE_VALUE)
+ {
+ /* operation succeeded */
+ SetupDiDestroyDeviceInfoList(hList);
+ return NOERROR;
+ }
+ }
+ }
+
+ /* free device list */
+ SetupDiDestroyDeviceInfoList(hList);
+
+ /* failed */
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+KsGetMultiplePinFactoryItems(
+ HANDLE FilterHandle,
+ ULONG PinFactoryId,
+ ULONG PropertyId,
+ PVOID *Items)
+{
+ KSP_PIN Property;
+ ULONG BytesReturned, NumData;
+ HRESULT hResult;
+
+ /* zero pin property */
+ RtlZeroMemory(&Property, sizeof(KSP_PIN));
+ Property.Property.Set = KSPROPSETID_Pin;
+ Property.Property.Id = PropertyId;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.PinId = PinFactoryId;
+
+ /* query pin factory */
+ hResult = KsSynchronousDeviceControl(FilterHandle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_PIN), NULL, 0, &BytesReturned);
+
+ if (hResult == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_INSUFFICIENT_BUFFER))
+ {
+ /* buffer too small */
+ hResult = KsSynchronousDeviceControl(FilterHandle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_PIN), (PVOID)&NumData, sizeof(ULONG), &BytesReturned);
+
+ if (SUCCEEDED(hResult))
+ {
+ /* store required data size */
+ BytesReturned = NumData;
+ hResult = MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_MORE_DATA);
+ }
+ }
+
+ if (hResult == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_MORE_DATA))
+ {
+ /* allocate data */
+ *Items = CoTaskMemAlloc(BytesReturned);
+
+ if (!*Items)
+ {
+ /* no memory */
+ return E_OUTOFMEMORY;
+ }
+
+ /* retry querying property */
+ hResult = KsSynchronousDeviceControl(FilterHandle, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_PIN), (PVOID)*Items, BytesReturned, &BytesReturned);
+
+ /* check for success */
+ if (FAILED(hResult))
+ {
+ /* free memory */
+ CoTaskMemFree(*Items);
+ }
+ }
+
+ /* done */
+ return hResult;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+KsGetMediaTypeCount(
+ HANDLE FilterHandle,
+ ULONG PinFactoryId,
+ ULONG *MediaTypeCount)
+{
+ PKSMULTIPLE_ITEM MultipleItem;
+ HRESULT hr;
+
+ /* try get contrained data ranges */
+ hr = KsGetMultiplePinFactoryItems(FilterHandle, PinFactoryId, KSPROPERTY_PIN_CONSTRAINEDDATARANGES, (PVOID*)&MultipleItem);
+
+ /* check for failure*/
+ if (FAILED(hr))
+ {
+ /* try getting default data ranges */
+ hr = KsGetMultiplePinFactoryItems(FilterHandle, PinFactoryId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ /* store number of media types */
+ *MediaTypeCount = MultipleItem->Count;
+
+ /* free memory */
+ CoTaskMemFree(MultipleItem);
+ }
+
+ /* done */
+ return hr;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+KsGetMediaType(
+ int Position,
+ AM_MEDIA_TYPE *AmMediaType,
+ HANDLE FilterHandle,
+ ULONG PinFactoryId)
+{
+ HRESULT hr;
+ PKSMULTIPLE_ITEM ItemList;
+ int i = 0;
+ PKSDATAFORMAT DataFormat;
+
+ if (Position < 0)
+ return E_INVALIDARG;
+
+ // get current supported ranges
+ hr = KsGetMultiplePinFactoryItems(FilterHandle, PinFactoryId, KSPROPERTY_PIN_CONSTRAINEDDATARANGES, (PVOID*)&ItemList);
+ if (FAILED(hr))
+ {
+ // get standard dataranges
+ hr = KsGetMultiplePinFactoryItems(FilterHandle, PinFactoryId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&ItemList);
+
+ //check for success
+ if (FAILED(hr))
+ return hr;
+ }
+
+ if ((ULONG)Position >= ItemList->Count)
+ {
+ // out of bounds
+ CoTaskMemFree(ItemList);
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NO_MORE_ITEMS);
+ }
+
+ // goto first datarange
+ DataFormat = (PKSDATAFORMAT)(ItemList + 1);
+
+ while(i != Position)
+ {
+ // goto next format;
+ DataFormat = (PKSDATAFORMAT)(ULONG_PTR)(DataFormat + DataFormat->FormatSize);
+ i++;
+ }
+
+
+ DataFormat->FormatSize -= sizeof(KSDATAFORMAT);
+ if (DataFormat->FormatSize)
+ {
+ // copy extra format buffer
+ AmMediaType->pbFormat = (BYTE*)CoTaskMemAlloc(DataFormat->FormatSize);
+ if (!AmMediaType->pbFormat)
+ {
+ // not enough memory
+ CoTaskMemFree(ItemList);
+ return E_OUTOFMEMORY;
+ }
+ // copy format buffer
+ CopyMemory(AmMediaType->pbFormat, (DataFormat + 1), DataFormat->FormatSize);
+ AmMediaType->cbFormat = DataFormat->FormatSize;
+ }
+ else
+ {
+ // no format buffer
+ AmMediaType->pbFormat = NULL;
+ AmMediaType->cbFormat = 0;
+ }
+
+ // copy type info
+ CopyMemory(&AmMediaType->majortype, &DataFormat->MajorFormat, sizeof(GUID));
+ CopyMemory(&AmMediaType->subtype, &DataFormat->SubFormat, sizeof(GUID));
+ CopyMemory(&AmMediaType->formattype, &DataFormat->Specifier, sizeof(GUID));
+ AmMediaType->bTemporalCompression = FALSE; //FIXME verify
+ AmMediaType->pUnk = NULL; //FIXME
+ AmMediaType->lSampleSize = DataFormat->SampleSize;
+ AmMediaType->bFixedSizeSamples = (AmMediaType->lSampleSize) ? TRUE : FALSE;
+
+ // free dataformat list
+ CoTaskMemFree(ItemList);
+
+ return NOERROR;
+}
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllUnregisterServer(void)
+{
+ return S_OK;
+}
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllRegisterServer(void)
+{
+ return S_OK;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllGetClassObject(
+ REFCLSID rclsid,
+ REFIID riid,
+ LPVOID *ppv)
+{
+ UINT i;
+ HRESULT hres = E_OUTOFMEMORY;
+ IClassFactory * pcf = NULL;
+
+ if (!ppv)
+ return E_INVALIDARG;
+
+ *ppv = NULL;
+
+ for (i = 0; InterfaceTable[i].riid; i++)
+ {
+ if (IsEqualIID(*InterfaceTable[i].riid, rclsid))
+ {
+ pcf = CClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL);
+ break;
+ }
+ }
+
+ if (!pcf)
+ {
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
+ hres = pcf->QueryInterface(riid, ppv);
+ pcf->Release();
+
+ return hres;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllCanUnloadNow(void)
+{
+ return S_OK;
+}
+
diff --git a/reactos/dll/directx/ksproxy/ksproxy.rbuild b/reactos/dll/directx/ksproxy/ksproxy.rbuild
index c4c177b5e16..86cd50a2c1d 100644
--- a/reactos/dll/directx/ksproxy/ksproxy.rbuild
+++ b/reactos/dll/directx/ksproxy/ksproxy.rbuild
@@ -4,9 +4,39 @@
.
- advapi32
ntdll
- ksproxy.c
+ kernel32
+ advapi32
+ ole32
+ setupapi
+ msvcrt
+ strmiids
+ ksuser
+
+ -fno-exceptions
+ -fno-rtti
+
+
+
+ /GR-
+
+ allocator.cpp
+ basicaudio.cpp
+ classfactory.cpp
+ clockforward.cpp
+ cvpconfig.cpp
+ cvpvbiconfig.cpp
+ datatype.cpp
+ enum_mediatypes.cpp
+ enumpins.cpp
+ input_pin.cpp
+ interface.cpp
+ ksproxy.cpp
ksproxy.rc
+ mediasample.cpp
+ node.cpp
+ output_pin.cpp
+ proxy.cpp
+ qualityforward.cpp
diff --git a/reactos/dll/directx/ksproxy/ksproxy.rc b/reactos/dll/directx/ksproxy/ksproxy.rc
index cf8ecb41a6a..2539cac432b 100644
--- a/reactos/dll/directx/ksproxy/ksproxy.rc
+++ b/reactos/dll/directx/ksproxy/ksproxy.rc
@@ -1,9 +1,98 @@
+// Microsoft Visual C++ generated resource script.
+//
+//#include "resource."
-#define REACTOS_VERSION_DLL
-#define REACTOS_STR_FILE_DESCRIPTION "ReactOS WDM Streaming ActiveMovie Proxy\0"
-#define REACTOS_STR_INTERNAL_NAME "ksproxy\0"
-#define REACTOS_STR_ORIGINAL_FILENAME "ksproxy.ax\0"
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
-#include
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Deutsch (Deutschland) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
+#ifdef _WIN32
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 5,3,2600,3264
+ PRODUCTVERSION 5,3,2600,3264
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040704b0"
+ BEGIN
+ VALUE "CompanyName", "ReactOS WDM Streaming ActiveMovie Proxy"
+ VALUE "FileDescription", "ReactOS WDM Streaming ActiveMovie Proxy"
+ VALUE "FileVersion", "5, 3, 2600, 3264"
+ VALUE "InternalName", "ksproxy"
+ VALUE "LegalCopyright", "Copyright (C) 2010"
+ VALUE "OriginalFilename", "ksproxy.dll"
+ VALUE "ProductName", "ReactOS WDM Streaming ActiveMovie Proxy"
+ VALUE "ProductVersion", "5, 3, 2600, 3264"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x407, 1200
+ END
+END
+
+#endif // Deutsch (Deutschland) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+ /////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
-#include
diff --git a/reactos/dll/directx/ksproxy/mediasample.cpp b/reactos/dll/directx/ksproxy/mediasample.cpp
new file mode 100644
index 00000000000..8e317efef61
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/mediasample.cpp
@@ -0,0 +1,370 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/mediasample.cpp
+ * PURPOSE: IMediaSample interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CMediaSample : public IMediaSample
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ DebugBreak();
+ if (!m_Ref)
+ {
+ if (m_Allocator)
+ {
+ m_Allocator->ReleaseBuffer((IMediaSample*)this);
+ return 0;
+ }
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT STDMETHODCALLTYPE GetPointer(BYTE **ppBuffer);
+ long STDMETHODCALLTYPE GetSize(void);
+ HRESULT STDMETHODCALLTYPE GetTime(REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd);
+ HRESULT STDMETHODCALLTYPE SetTime(REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd);
+ HRESULT STDMETHODCALLTYPE IsSyncPoint();
+ HRESULT STDMETHODCALLTYPE SetSyncPoint(BOOL bIsSyncPoint);
+ HRESULT STDMETHODCALLTYPE IsPreroll();
+ HRESULT STDMETHODCALLTYPE SetPreroll(BOOL bIsPreroll);
+ long STDMETHODCALLTYPE GetActualDataLength();
+ HRESULT STDMETHODCALLTYPE SetActualDataLength(long Length);
+ HRESULT STDMETHODCALLTYPE GetMediaType(AM_MEDIA_TYPE **ppMediaType);
+ HRESULT STDMETHODCALLTYPE SetMediaType(AM_MEDIA_TYPE *pMediaType);
+ HRESULT STDMETHODCALLTYPE IsDiscontinuity();
+ HRESULT STDMETHODCALLTYPE SetDiscontinuity(BOOL bDiscontinuity);
+ HRESULT STDMETHODCALLTYPE GetMediaTime(LONGLONG *pTimeStart, LONGLONG *pTimeEnd);
+ HRESULT STDMETHODCALLTYPE SetMediaTime(LONGLONG *pTimeStart, LONGLONG *pTimeEnd);
+
+ CMediaSample(IMemAllocator * Allocator, BYTE * Buffer, LONG BufferSize);
+ virtual ~CMediaSample(){}
+
+protected:
+ ULONG m_Flags;
+ ULONG m_TypeFlags;
+ BYTE * m_Buffer;
+ LONG m_ActualLength;
+ LONG m_BufferSize;
+ IMemAllocator * m_Allocator;
+ CMediaSample * m_Next;
+ REFERENCE_TIME m_StartTime;
+ REFERENCE_TIME m_StopTime;
+ LONGLONG m_MediaStart;
+ LONGLONG m_MediaStop;
+ AM_MEDIA_TYPE * m_MediaType;
+ ULONG m_StreamId;
+
+public:
+ LONG m_Ref;
+
+ BOOL m_bMediaTimeValid;
+
+
+};
+
+CMediaSample::CMediaSample(
+ IMemAllocator * Allocator,
+ BYTE * Buffer,
+ LONG BufferSize) :
+ m_Flags(0),
+ m_TypeFlags(0),
+ m_Buffer(Buffer),
+ m_ActualLength(BufferSize),
+ m_BufferSize(BufferSize),
+ m_Allocator(Allocator),
+ m_Next(0),
+ m_StartTime(0),
+ m_StopTime(0),
+ m_MediaStart(0),
+ m_MediaStop(0),
+ m_MediaType(0),
+ m_StreamId(0),
+ m_Ref(0),
+ m_bMediaTimeValid(0)
+{
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IMediaSample))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IMediaSample2))
+ {
+
+ OutputDebugStringW(L"CMediaSample::QueryInterface requested IMediaSample2 interface\n");
+#if 0
+ *Output = (IMediaSample2*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+#endif
+ }
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IMediaSample interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::GetPointer(
+ BYTE **ppBuffer)
+{
+ if (!ppBuffer)
+ return E_POINTER;
+
+ *ppBuffer = m_Buffer;
+ return S_OK;
+}
+
+long
+STDMETHODCALLTYPE
+CMediaSample::GetSize()
+{
+ return m_BufferSize;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::GetTime(
+ REFERENCE_TIME *pTimeStart,
+ REFERENCE_TIME *pTimeEnd)
+{
+ HRESULT hr;
+
+ if (!pTimeStart || !pTimeEnd)
+ return E_POINTER;
+
+ if (!(m_Flags & (AM_SAMPLE_TIMEVALID | AM_SAMPLE_STOPVALID)))
+ {
+ // no time is set
+ return VFW_E_SAMPLE_TIME_NOT_SET;
+ }
+
+ *pTimeStart = m_StartTime;
+
+ if (m_Flags & AM_SAMPLE_STOPVALID)
+ {
+ *pTimeEnd = m_StopTime;
+ hr = NOERROR;
+ }
+ else
+ {
+ *pTimeEnd = m_StartTime + 1;
+ hr = VFW_S_NO_STOP_TIME;
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::SetTime(REFERENCE_TIME *pTimeStart, REFERENCE_TIME *pTimeEnd)
+{
+ if (!pTimeStart)
+ {
+ m_Flags &= ~(AM_SAMPLE_TIMEVALID | AM_SAMPLE_STOPVALID);
+ return NOERROR;
+ }
+
+ if (!pTimeEnd)
+ {
+ m_Flags &= ~(AM_SAMPLE_STOPVALID);
+ m_Flags |= AM_SAMPLE_TIMEVALID;
+ m_StartTime = *pTimeStart;
+ return NOERROR;
+ }
+
+
+ m_Flags |= (AM_SAMPLE_TIMEVALID | AM_SAMPLE_STOPVALID);
+ m_StartTime = *pTimeStart;
+ m_StopTime = *pTimeEnd;
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::IsSyncPoint()
+{
+ return (m_Flags & AM_SAMPLE_SPLICEPOINT) ? S_OK : S_FALSE;
+}
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::SetSyncPoint(BOOL bIsSyncPoint)
+{
+ if (bIsSyncPoint)
+ m_Flags |= AM_SAMPLE_SPLICEPOINT;
+ else
+ m_Flags &= ~AM_SAMPLE_SPLICEPOINT;
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::IsPreroll()
+{
+ return (m_Flags & AM_SAMPLE_PREROLL) ? S_OK : S_FALSE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::SetPreroll(BOOL bIsPreroll)
+{
+ if (bIsPreroll)
+ m_Flags |= AM_SAMPLE_PREROLL;
+ else
+ m_Flags &= ~AM_SAMPLE_PREROLL;
+
+ return NOERROR;
+}
+
+long
+STDMETHODCALLTYPE
+CMediaSample::GetActualDataLength()
+{
+ return m_ActualLength;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::SetActualDataLength(long Length)
+{
+ if (Length > m_BufferSize)
+ return VFW_E_BUFFER_OVERFLOW;
+
+ m_ActualLength = Length;
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::GetMediaType(AM_MEDIA_TYPE **ppMediaType)
+{
+ OutputDebugStringW(L"CMediaSample::GetMediaType\n");
+
+ if (!m_MediaType)
+ {
+ *ppMediaType = NULL;
+ return S_FALSE;
+ }
+
+ assert(0);
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::SetMediaType(AM_MEDIA_TYPE *pMediaType)
+{
+ OutputDebugStringW(L"CMediaSample::SetMediaType NotImplemented\n");
+ DebugBreak();
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::IsDiscontinuity()
+{
+ return (m_Flags & AM_SAMPLE_DATADISCONTINUITY) ? S_OK : S_FALSE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::SetDiscontinuity(BOOL bDiscontinuity)
+{
+ if (bDiscontinuity)
+ m_Flags |= AM_SAMPLE_DATADISCONTINUITY;
+ else
+ m_Flags &= ~AM_SAMPLE_DATADISCONTINUITY;
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::GetMediaTime(LONGLONG *pTimeStart, LONGLONG *pTimeEnd)
+{
+ if (!pTimeStart || !pTimeEnd)
+ return E_POINTER;
+
+ if (!m_bMediaTimeValid)
+ return VFW_E_MEDIA_TIME_NOT_SET;
+
+ m_MediaStart = *pTimeStart;
+ m_MediaStop = *pTimeEnd;
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CMediaSample::SetMediaTime(LONGLONG *pTimeStart, LONGLONG *pTimeEnd)
+{
+ if (!pTimeStart || !pTimeEnd)
+ {
+ m_bMediaTimeValid = false;
+ return NOERROR;
+ }
+
+ m_MediaStart = *pTimeStart;
+ m_MediaStop = *pTimeEnd;
+
+ return NOERROR;
+}
+
+
+
+
+HRESULT
+WINAPI
+CMediaSample_Constructor(
+ IMemAllocator* Allocator,
+ BYTE* pBuffer,
+ ULONG BufferSize,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ OutputDebugStringW(L"CMediaSample_Constructor\n");
+
+ CMediaSample * handler = new CMediaSample(Allocator, pBuffer, BufferSize);
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksproxy/node.cpp b/reactos/dll/directx/ksproxy/node.cpp
new file mode 100644
index 00000000000..d2686bb96a4
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/node.cpp
@@ -0,0 +1,157 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/node.cpp
+ * PURPOSE: Control Node
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CKsNode : public IKsControl
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ //IKsControl
+ HRESULT STDMETHODCALLTYPE KsProperty(PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData, ULONG DataLength, ULONG* BytesReturned);
+ HRESULT STDMETHODCALLTYPE KsMethod(PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData, ULONG DataLength, ULONG* BytesReturned);
+ HRESULT STDMETHODCALLTYPE KsEvent(PKSEVENT Event, ULONG EventLength, LPVOID EventData, ULONG DataLength, ULONG* BytesReturned);
+
+ CKsNode(IUnknown * pUnkOuter, HANDLE Handle) : m_Ref(0), m_pUnkOuter(pUnkOuter), m_Handle(Handle){};
+ virtual ~CKsNode()
+ {
+ CloseHandle(m_Handle);
+ };
+
+protected:
+ LONG m_Ref;
+ IUnknown * m_pUnkOuter;
+ HANDLE m_Handle;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CKsNode::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IKsControl))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IKsControl
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsNode::KsProperty(
+ PKSPROPERTY Property,
+ ULONG PropertyLength,
+ LPVOID PropertyData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_Handle != 0);
+ return KsSynchronousDeviceControl(m_Handle, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsNode::KsMethod(
+ PKSMETHOD Method,
+ ULONG MethodLength,
+ LPVOID MethodData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_Handle != 0);
+ return KsSynchronousDeviceControl(m_Handle, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsNode::KsEvent(
+ PKSEVENT Event,
+ ULONG EventLength,
+ LPVOID EventData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_Handle != 0);
+
+ if (EventLength)
+ return KsSynchronousDeviceControl(m_Handle, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
+ else
+ return KsSynchronousDeviceControl(m_Handle, IOCTL_KS_DISABLE_EVENT, (PVOID)Event, EventLength, NULL, 0, BytesReturned);
+}
+
+HRESULT
+WINAPI
+CKsNode_Constructor(
+ IUnknown * pUnkOuter,
+ HANDLE ParentHandle,
+ ULONG NodeId,
+ ACCESS_MASK DesiredAccess,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ HRESULT hr;
+ HANDLE handle;
+ KSNODE_CREATE NodeCreate;
+
+ OutputDebugStringW(L"CKsNode_Constructor\n");
+
+ //setup request
+ NodeCreate.CreateFlags = 0;
+ NodeCreate.Node = NodeId;
+
+ hr = KsCreateTopologyNode(ParentHandle, &NodeCreate, DesiredAccess, &handle);
+ if (hr != NOERROR)
+ {
+ OutputDebugString("CKsNode_Constructor failed to open device\n");
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, hr);
+ }
+
+ CKsNode * quality = new CKsNode(pUnkOuter, handle);
+
+ if (!quality)
+ {
+ // free clock handle
+ CloseHandle(handle);
+ return E_OUTOFMEMORY;
+ }
+
+ if (FAILED(quality->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete quality;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksproxy/output_pin.cpp b/reactos/dll/directx/ksproxy/output_pin.cpp
new file mode 100644
index 00000000000..e5f172bf2e0
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/output_pin.cpp
@@ -0,0 +1,2149 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/output_pin.cpp
+ * PURPOSE: OutputPin of Proxy Filter
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class COutputPin : public IPin,
+ public IKsObject,
+ public IKsPropertySet,
+ public IStreamBuilder,
+ public IKsPinFactory,
+ public ISpecifyPropertyPages,
+ public IKsPinEx,
+ public IKsPinPipe,
+ public IKsControl,
+ public IKsAggregateControl,
+ public IQualityControl,
+ public IMediaSeeking,
+ public IAMBufferNegotiation,
+ public IAMStreamConfig,
+ public IMemAllocatorNotifyCallbackTemp
+
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ //delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ //IKsPin
+ HRESULT STDMETHODCALLTYPE KsQueryMediums(PKSMULTIPLE_ITEM* MediumList);
+ HRESULT STDMETHODCALLTYPE KsQueryInterfaces(PKSMULTIPLE_ITEM* InterfaceList);
+ HRESULT STDMETHODCALLTYPE KsCreateSinkPinHandle(KSPIN_INTERFACE& Interface, KSPIN_MEDIUM& Medium);
+ HRESULT STDMETHODCALLTYPE KsGetCurrentCommunication(KSPIN_COMMUNICATION *Communication, KSPIN_INTERFACE *Interface, KSPIN_MEDIUM *Medium);
+ HRESULT STDMETHODCALLTYPE KsPropagateAcquire();
+ HRESULT STDMETHODCALLTYPE KsDeliver(IMediaSample* Sample, ULONG Flags);
+ HRESULT STDMETHODCALLTYPE KsMediaSamplesCompleted(PKSSTREAM_SEGMENT StreamSegment);
+ IMemAllocator * STDMETHODCALLTYPE KsPeekAllocator(KSPEEKOPERATION Operation);
+ HRESULT STDMETHODCALLTYPE KsReceiveAllocator(IMemAllocator *MemAllocator);
+ HRESULT STDMETHODCALLTYPE KsRenegotiateAllocator();
+ LONG STDMETHODCALLTYPE KsIncrementPendingIoCount();
+ LONG STDMETHODCALLTYPE KsDecrementPendingIoCount();
+ HRESULT STDMETHODCALLTYPE KsQualityNotify(ULONG Proportion, REFERENCE_TIME TimeDelta);
+ // IKsPinEx
+ VOID STDMETHODCALLTYPE KsNotifyError(IMediaSample* Sample, HRESULT hr);
+
+ //IKsPinPipe
+ HRESULT STDMETHODCALLTYPE KsGetPinFramingCache(PKSALLOCATOR_FRAMING_EX *FramingEx, PFRAMING_PROP FramingProp, FRAMING_CACHE_OPS Option);
+ HRESULT STDMETHODCALLTYPE KsSetPinFramingCache(PKSALLOCATOR_FRAMING_EX FramingEx, PFRAMING_PROP FramingProp, FRAMING_CACHE_OPS Option);
+ IPin* STDMETHODCALLTYPE KsGetConnectedPin();
+ IKsAllocatorEx* STDMETHODCALLTYPE KsGetPipe(KSPEEKOPERATION Operation);
+ HRESULT STDMETHODCALLTYPE KsSetPipe(IKsAllocatorEx *KsAllocator);
+ ULONG STDMETHODCALLTYPE KsGetPipeAllocatorFlag();
+ HRESULT STDMETHODCALLTYPE KsSetPipeAllocatorFlag(ULONG Flag);
+ GUID STDMETHODCALLTYPE KsGetPinBusCache();
+ HRESULT STDMETHODCALLTYPE KsSetPinBusCache(GUID Bus);
+ PWCHAR STDMETHODCALLTYPE KsGetPinName();
+ PWCHAR STDMETHODCALLTYPE KsGetFilterName();
+
+ //IPin methods
+ HRESULT STDMETHODCALLTYPE Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE Disconnect();
+ HRESULT STDMETHODCALLTYPE ConnectedTo(IPin **pPin);
+ HRESULT STDMETHODCALLTYPE ConnectionMediaType(AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE QueryPinInfo(PIN_INFO *pInfo);
+ HRESULT STDMETHODCALLTYPE QueryDirection(PIN_DIRECTION *pPinDir);
+ HRESULT STDMETHODCALLTYPE QueryId(LPWSTR *Id);
+ HRESULT STDMETHODCALLTYPE QueryAccept(const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE EnumMediaTypes(IEnumMediaTypes **ppEnum);
+ HRESULT STDMETHODCALLTYPE QueryInternalConnections(IPin **apPin, ULONG *nPin);
+ HRESULT STDMETHODCALLTYPE EndOfStream();
+ HRESULT STDMETHODCALLTYPE BeginFlush();
+ HRESULT STDMETHODCALLTYPE EndFlush();
+ HRESULT STDMETHODCALLTYPE NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+
+ // ISpecifyPropertyPages
+ HRESULT STDMETHODCALLTYPE GetPages(CAUUID *pPages);
+
+ //IKsObject methods
+ HANDLE STDMETHODCALLTYPE KsGetObjectHandle();
+
+ //IKsPropertySet
+ HRESULT STDMETHODCALLTYPE Set(REFGUID guidPropSet, DWORD dwPropID, LPVOID pInstanceData, DWORD cbInstanceData, LPVOID pPropData, DWORD cbPropData);
+ HRESULT STDMETHODCALLTYPE Get(REFGUID guidPropSet, DWORD dwPropID, LPVOID pInstanceData, DWORD cbInstanceData, LPVOID pPropData, DWORD cbPropData, DWORD *pcbReturned);
+ HRESULT STDMETHODCALLTYPE QuerySupported(REFGUID guidPropSet, DWORD dwPropID, DWORD *pTypeSupport);
+
+ //IKsControl
+ HRESULT STDMETHODCALLTYPE KsProperty(PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData, ULONG DataLength, ULONG* BytesReturned);
+ HRESULT STDMETHODCALLTYPE KsMethod(PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData, ULONG DataLength, ULONG* BytesReturned);
+ HRESULT STDMETHODCALLTYPE KsEvent(PKSEVENT Event, ULONG EventLength, LPVOID EventData, ULONG DataLength, ULONG* BytesReturned);
+
+ //IStreamBuilder
+ HRESULT STDMETHODCALLTYPE Render(IPin *ppinOut, IGraphBuilder *pGraph);
+ HRESULT STDMETHODCALLTYPE Backout(IPin *ppinOut, IGraphBuilder *pGraph);
+
+ //IKsPinFactory
+ HRESULT STDMETHODCALLTYPE KsPinFactory(ULONG* PinFactory);
+
+ //IKsAggregateControl
+ HRESULT STDMETHODCALLTYPE KsAddAggregate(IN REFGUID AggregateClass);
+ HRESULT STDMETHODCALLTYPE KsRemoveAggregate(REFGUID AggregateClass);
+
+ //IQualityControl
+ HRESULT STDMETHODCALLTYPE Notify(IBaseFilter *pSelf, Quality q);
+ HRESULT STDMETHODCALLTYPE SetSink(IQualityControl *piqc);
+
+ //IMediaSeeking
+ HRESULT STDMETHODCALLTYPE GetCapabilities(DWORD *pCapabilities);
+ HRESULT STDMETHODCALLTYPE CheckCapabilities(DWORD *pCapabilities);
+ HRESULT STDMETHODCALLTYPE IsFormatSupported(const GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE QueryPreferredFormat(GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE GetTimeFormat(GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE IsUsingTimeFormat(const GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE SetTimeFormat(const GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE GetDuration(LONGLONG *pDuration);
+ HRESULT STDMETHODCALLTYPE GetStopPosition(LONGLONG *pStop);
+ HRESULT STDMETHODCALLTYPE GetCurrentPosition(LONGLONG *pCurrent);
+ HRESULT STDMETHODCALLTYPE ConvertTimeFormat(LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat);
+ HRESULT STDMETHODCALLTYPE SetPositions(LONGLONG *pCurrent, DWORD dwCurrentFlags, LONGLONG *pStop, DWORD dwStopFlags);
+ HRESULT STDMETHODCALLTYPE GetPositions(LONGLONG *pCurrent, LONGLONG *pStop);
+ HRESULT STDMETHODCALLTYPE GetAvailable(LONGLONG *pEarliest, LONGLONG *pLatest);
+ HRESULT STDMETHODCALLTYPE SetRate(double dRate);
+ HRESULT STDMETHODCALLTYPE GetRate(double *pdRate);
+ HRESULT STDMETHODCALLTYPE GetPreroll(LONGLONG *pllPreroll);
+
+ //IAMBufferNegotiation
+ HRESULT STDMETHODCALLTYPE SuggestAllocatorProperties(const ALLOCATOR_PROPERTIES *pprop);
+ HRESULT STDMETHODCALLTYPE GetAllocatorProperties(ALLOCATOR_PROPERTIES *pprop);
+
+ //IAMStreamConfig
+ HRESULT STDMETHODCALLTYPE SetFormat(AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE GetFormat(AM_MEDIA_TYPE **ppmt);
+ HRESULT STDMETHODCALLTYPE GetNumberOfCapabilities(int *piCount, int *piSize);
+ HRESULT STDMETHODCALLTYPE GetStreamCaps(int iIndex, AM_MEDIA_TYPE **ppmt, BYTE *pSCC);
+
+ //IMemAllocatorNotifyCallbackTemp
+ HRESULT STDMETHODCALLTYPE NotifyRelease();
+
+ //---------------------------------------------------------------
+ COutputPin(IBaseFilter * ParentFilter, LPCWSTR PinName, ULONG PinId, KSPIN_COMMUNICATION Communication);
+ virtual ~COutputPin();
+ HRESULT STDMETHODCALLTYPE CheckFormat(const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE CreatePin(const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE CreatePinHandle(PKSPIN_MEDIUM Medium, PKSPIN_INTERFACE Interface, const AM_MEDIA_TYPE *pmt);
+ HRESULT WINAPI IoProcessRoutine();
+ HRESULT WINAPI InitializeIOThread();
+
+ friend DWORD WINAPI COutputPin_IoThreadStartup(LPVOID lpParameter);
+ friend HRESULT STDMETHODCALLTYPE COutputPin_SetState(IPin * Pin, KSSTATE State);
+
+protected:
+ LONG m_Ref;
+ IBaseFilter * m_ParentFilter;
+ LPCWSTR m_PinName;
+ HANDLE m_hPin;
+ ULONG m_PinId;
+ IKsObject * m_KsObjectParent;
+ IPin * m_Pin;
+ IKsAllocatorEx * m_KsAllocatorEx;
+ ULONG m_PipeAllocatorFlag;
+ BOOL m_bPinBusCacheInitialized;
+ GUID m_PinBusCache;
+ LPWSTR m_FilterName;
+ FRAMING_PROP m_FramingProp[4];
+ PKSALLOCATOR_FRAMING_EX m_FramingEx[4];
+
+ IMemAllocator * m_MemAllocator;
+ IMemInputPin * m_MemInputPin;
+ LONG m_IoCount;
+ KSPIN_COMMUNICATION m_Communication;
+ KSPIN_INTERFACE m_Interface;
+ KSPIN_MEDIUM m_Medium;
+ AM_MEDIA_TYPE m_MediaFormat;
+
+ IMediaSeeking * m_FilterMediaSeeking;
+ ALLOCATOR_PROPERTIES m_Properties;
+ IKsInterfaceHandler * m_InterfaceHandler;
+
+ HANDLE m_hStartEvent;
+ HANDLE m_hBufferAvailable;
+ HANDLE m_hStopEvent;
+ BOOL m_StopInProgress;
+ BOOL m_IoThreadStarted;
+
+ KSSTATE m_State;
+};
+
+COutputPin::~COutputPin()
+{
+ if (m_KsObjectParent)
+ m_KsObjectParent->Release();
+}
+
+COutputPin::COutputPin(
+ IBaseFilter * ParentFilter,
+ LPCWSTR PinName,
+ ULONG PinId,
+ KSPIN_COMMUNICATION Communication) : m_Ref(0),
+ m_ParentFilter(ParentFilter),
+ m_PinName(PinName),
+ m_hPin(INVALID_HANDLE_VALUE),
+ m_PinId(PinId),
+ m_KsObjectParent(0),
+ m_Pin(0),
+ m_KsAllocatorEx(0),
+ m_PipeAllocatorFlag(0),
+ m_bPinBusCacheInitialized(0),
+ m_FilterName(0),
+ m_MemAllocator(0),
+ m_MemInputPin(0),
+ m_IoCount(0),
+ m_Communication(Communication),
+ m_FilterMediaSeeking(0),
+ m_InterfaceHandler(0),
+ m_hStartEvent(0),
+ m_hBufferAvailable(0),
+ m_hStopEvent(0),
+ m_StopInProgress(0),
+ m_IoThreadStarted(0),
+ m_State(KSSTATE_STOP)
+{
+ HRESULT hr;
+
+ hr = m_ParentFilter->QueryInterface(IID_IKsObject, (LPVOID*)&m_KsObjectParent);
+ assert(hr == S_OK);
+
+ hr = m_ParentFilter->QueryInterface(IID_IMediaSeeking, (LPVOID*)&m_FilterMediaSeeking);
+ assert(hr == S_OK);
+
+ ZeroMemory(m_FramingProp, sizeof(m_FramingProp));
+ ZeroMemory(m_FramingEx, sizeof(m_FramingEx));
+
+ hr = KsGetMediaType(0, &m_MediaFormat, m_KsObjectParent->KsGetObjectHandle(), m_PinId);
+ assert(hr == S_OK);
+};
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IPin))
+ {
+ OutputDebugStringW(L"COutputPin::QueryInterface IID_IPin\n");
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsObject))
+ {
+ if (m_hPin == INVALID_HANDLE_VALUE)
+ {
+ HRESULT hr = CreatePin(&m_MediaFormat);
+ if (FAILED(hr))
+ return hr;
+ }
+
+ OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsObject\n");
+ *Output = (IKsObject*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsPin) || IsEqualGUID(refiid, IID_IKsPinEx))
+ {
+ *Output = (IKsPinEx*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsPinPipe))
+ {
+ *Output = (IKsPinPipe*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsAggregateControl))
+ {
+ *Output = (IKsAggregateControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IQualityControl))
+ {
+ *Output = (IQualityControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsPropertySet))
+ {
+ if (m_hPin == INVALID_HANDLE_VALUE)
+ {
+ HRESULT hr = CreatePin(&m_MediaFormat);
+ if (FAILED(hr))
+ return hr;
+ }
+ OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsPropertySet\n");
+ *Output = (IKsPropertySet*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsControl))
+ {
+ OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsControl\n");
+ *Output = (IKsControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+#if 0
+ else if (IsEqualGUID(refiid, IID_IStreamBuilder))
+ {
+ *Output = (IStreamBuilder*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+#endif
+ else if (IsEqualGUID(refiid, IID_IKsPinFactory))
+ {
+ OutputDebugStringW(L"COutputPin::QueryInterface IID_IKsPinFactory\n");
+ *Output = (IKsPinFactory*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_ISpecifyPropertyPages))
+ {
+ OutputDebugStringW(L"COutputPin::QueryInterface IID_ISpecifyPropertyPages\n");
+ *Output = (ISpecifyPropertyPages*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IMediaSeeking))
+ {
+ *Output = (IMediaSeeking*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IAMBufferNegotiation))
+ {
+ *Output = (IAMBufferNegotiation*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IAMStreamConfig))
+ {
+ *Output = (IAMStreamConfig*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IMemAllocatorNotifyCallbackTemp))
+ {
+ *Output = (IMemAllocatorNotifyCallbackTemp*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"COutputPin::QueryInterface: NoInterface for %s PinId %u PinName %s\n", lpstr, m_PinId, m_PinName);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IAMBufferNegotiation interface
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::SuggestAllocatorProperties(
+ const ALLOCATOR_PROPERTIES *pprop)
+{
+ OutputDebugStringW(L"COutputPin::SuggestAllocatorProperties\n");
+
+ if (m_Pin)
+ {
+ // pin is already connected
+ return VFW_E_ALREADY_CONNECTED;
+ }
+
+ CopyMemory(&m_Properties, pprop, sizeof(ALLOCATOR_PROPERTIES));
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetAllocatorProperties(
+ ALLOCATOR_PROPERTIES *pprop)
+{
+ OutputDebugStringW(L"COutputPin::GetAllocatorProperties\n");
+
+ if (!m_Pin)
+ {
+ // you should call this method AFTER you connected
+ return E_UNEXPECTED;
+ }
+
+ if (!m_KsAllocatorEx)
+ {
+ // something went wrong while creating the allocator
+ return E_FAIL;
+ }
+
+ CopyMemory(pprop, &m_Properties, sizeof(ALLOCATOR_PROPERTIES));
+ return NOERROR;
+}
+
+//-------------------------------------------------------------------
+// IAMStreamConfig interface
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::SetFormat(
+ AM_MEDIA_TYPE *pmt)
+{
+ OutputDebugStringW(L"COutputPin::SetFormat NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetFormat(AM_MEDIA_TYPE **ppmt)
+{
+ OutputDebugStringW(L"COutputPin::GetFormat NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetNumberOfCapabilities(
+ int *piCount,
+ int *piSize)
+{
+ OutputDebugStringW(L"COutputPin::GetNumberOfCapabilities NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetStreamCaps(
+ int iIndex,
+ AM_MEDIA_TYPE **ppmt,
+ BYTE *pSCC)
+{
+ OutputDebugStringW(L"COutputPin::GetStreamCaps NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IMemAllocatorNotifyCallbackTemp interface
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::NotifyRelease()
+{
+ OutputDebugStringW(L"COutputPin::NotifyRelease\n");
+
+ // notify thread of new available sample
+ SetEvent(m_hBufferAvailable);
+
+ return NOERROR;
+}
+
+//-------------------------------------------------------------------
+// IMediaSeeking interface
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetCapabilities(
+ DWORD *pCapabilities)
+{
+ return m_FilterMediaSeeking->GetCapabilities(pCapabilities);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::CheckCapabilities(
+ DWORD *pCapabilities)
+{
+ return m_FilterMediaSeeking->CheckCapabilities(pCapabilities);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::IsFormatSupported(
+ const GUID *pFormat)
+{
+ return m_FilterMediaSeeking->IsFormatSupported(pFormat);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::QueryPreferredFormat(
+ GUID *pFormat)
+{
+ return m_FilterMediaSeeking->QueryPreferredFormat(pFormat);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetTimeFormat(
+ GUID *pFormat)
+{
+ return m_FilterMediaSeeking->GetTimeFormat(pFormat);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::IsUsingTimeFormat(
+ const GUID *pFormat)
+{
+ return m_FilterMediaSeeking->IsUsingTimeFormat(pFormat);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::SetTimeFormat(
+ const GUID *pFormat)
+{
+ return m_FilterMediaSeeking->SetTimeFormat(pFormat);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetDuration(
+ LONGLONG *pDuration)
+{
+ return m_FilterMediaSeeking->GetDuration(pDuration);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetStopPosition(
+ LONGLONG *pStop)
+{
+ return m_FilterMediaSeeking->GetStopPosition(pStop);
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetCurrentPosition(
+ LONGLONG *pCurrent)
+{
+ return m_FilterMediaSeeking->GetCurrentPosition(pCurrent);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::ConvertTimeFormat(
+ LONGLONG *pTarget,
+ const GUID *pTargetFormat,
+ LONGLONG Source,
+ const GUID *pSourceFormat)
+{
+ return m_FilterMediaSeeking->ConvertTimeFormat(pTarget, pTargetFormat, Source, pSourceFormat);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::SetPositions(
+ LONGLONG *pCurrent,
+ DWORD dwCurrentFlags,
+ LONGLONG *pStop,
+ DWORD dwStopFlags)
+{
+ return m_FilterMediaSeeking->SetPositions(pCurrent, dwCurrentFlags, pStop, dwStopFlags);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetPositions(
+ LONGLONG *pCurrent,
+ LONGLONG *pStop)
+{
+ return m_FilterMediaSeeking->GetPositions(pCurrent, pStop);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetAvailable(
+ LONGLONG *pEarliest,
+ LONGLONG *pLatest)
+{
+ return m_FilterMediaSeeking->GetAvailable(pEarliest, pLatest);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::SetRate(
+ double dRate)
+{
+ return m_FilterMediaSeeking->SetRate(dRate);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetRate(
+ double *pdRate)
+{
+ return m_FilterMediaSeeking->GetRate(pdRate);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetPreroll(
+ LONGLONG *pllPreroll)
+{
+ return m_FilterMediaSeeking->GetPreroll(pllPreroll);
+}
+
+//-------------------------------------------------------------------
+// IQualityControl interface
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::Notify(
+ IBaseFilter *pSelf,
+ Quality q)
+{
+ OutputDebugStringW(L"COutputPin::Notify NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::SetSink(
+ IQualityControl *piqc)
+{
+ OutputDebugStringW(L"COutputPin::SetSink NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+//-------------------------------------------------------------------
+// IKsAggregateControl interface
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsAddAggregate(
+ IN REFGUID AggregateClass)
+{
+ OutputDebugStringW(L"COutputPin::KsAddAggregate NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsRemoveAggregate(
+ REFGUID AggregateClass)
+{
+ OutputDebugStringW(L"COutputPin::KsRemoveAggregate NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+//-------------------------------------------------------------------
+// IKsPin
+//
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsQueryMediums(
+ PKSMULTIPLE_ITEM* MediumList)
+{
+ HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
+ return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_MEDIUMS, (PVOID*)MediumList);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsQueryInterfaces(
+ PKSMULTIPLE_ITEM* InterfaceList)
+{
+ HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
+
+ return KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_INTERFACES, (PVOID*)InterfaceList);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsCreateSinkPinHandle(
+ KSPIN_INTERFACE& Interface,
+ KSPIN_MEDIUM& Medium)
+{
+ OutputDebugStringW(L"COutputPin::KsCreateSinkPinHandle NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsGetCurrentCommunication(
+ KSPIN_COMMUNICATION *Communication,
+ KSPIN_INTERFACE *Interface,
+ KSPIN_MEDIUM *Medium)
+{
+ if (Communication)
+ {
+ *Communication = m_Communication;
+ }
+
+ if (Interface)
+ {
+ if (!m_hPin)
+ return VFW_E_NOT_CONNECTED;
+
+ CopyMemory(Interface, &m_Interface, sizeof(KSPIN_INTERFACE));
+ }
+
+ if (Medium)
+ {
+ if (!m_hPin)
+ return VFW_E_NOT_CONNECTED;
+
+ CopyMemory(Medium, &m_Medium, sizeof(KSPIN_MEDIUM));
+ }
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsPropagateAcquire()
+{
+ KSPROPERTY Property;
+ KSSTATE State;
+ ULONG BytesReturned;
+ HRESULT hr;
+
+ OutputDebugStringW(L"COutputPin::KsPropagateAcquire\n");
+
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+
+ Property.Set = KSPROPSETID_Connection;
+ Property.Id = KSPROPERTY_CONNECTION_STATE;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ State = KSSTATE_ACQUIRE;
+
+ hr = KsProperty(&Property, sizeof(KSPROPERTY), (LPVOID)&State, sizeof(KSSTATE), &BytesReturned);
+
+ //TODO
+ //propagate to connected pin on the pipe
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsDeliver(
+ IMediaSample* Sample,
+ ULONG Flags)
+{
+ return E_FAIL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsMediaSamplesCompleted(PKSSTREAM_SEGMENT StreamSegment)
+{
+ return NOERROR;
+}
+
+IMemAllocator *
+STDMETHODCALLTYPE
+COutputPin::KsPeekAllocator(KSPEEKOPERATION Operation)
+{
+ if (Operation == KsPeekOperation_AddRef)
+ {
+ // add reference on allocator
+ m_MemAllocator->AddRef();
+ }
+
+ return m_MemAllocator;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsReceiveAllocator(IMemAllocator *MemAllocator)
+{
+ if (MemAllocator)
+ {
+ MemAllocator->AddRef();
+ }
+
+ if (m_MemAllocator)
+ {
+ m_MemAllocator->Release();
+ }
+
+ m_MemAllocator = MemAllocator;
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsRenegotiateAllocator()
+{
+ return E_FAIL;
+}
+
+LONG
+STDMETHODCALLTYPE
+COutputPin::KsIncrementPendingIoCount()
+{
+ return InterlockedIncrement((volatile LONG*)&m_IoCount);
+}
+
+LONG
+STDMETHODCALLTYPE
+COutputPin::KsDecrementPendingIoCount()
+{
+ return InterlockedDecrement((volatile LONG*)&m_IoCount);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsQualityNotify(
+ ULONG Proportion,
+ REFERENCE_TIME TimeDelta)
+{
+ OutputDebugStringW(L"COutputPin::KsQualityNotify NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IKsPinEx
+//
+
+VOID
+STDMETHODCALLTYPE
+COutputPin::KsNotifyError(
+ IMediaSample* Sample,
+ HRESULT hr)
+{
+ OutputDebugStringW(L"COutputPin::KsNotifyError NotImplemented\n");
+}
+
+
+//-------------------------------------------------------------------
+// IKsPinPipe
+//
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsGetPinFramingCache(
+ PKSALLOCATOR_FRAMING_EX *FramingEx,
+ PFRAMING_PROP FramingProp,
+ FRAMING_CACHE_OPS Option)
+{
+ if (Option > Framing_Cache_Write || Option < Framing_Cache_ReadLast)
+ {
+ // invalid argument
+ return E_INVALIDARG;
+ }
+
+ // get framing properties
+ *FramingProp = m_FramingProp[Option];
+ *FramingEx = m_FramingEx[Option];
+
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsSetPinFramingCache(
+ PKSALLOCATOR_FRAMING_EX FramingEx,
+ PFRAMING_PROP FramingProp,
+ FRAMING_CACHE_OPS Option)
+{
+ ULONG Index;
+ ULONG RefCount = 0;
+
+ if (m_FramingEx[Option])
+ {
+ for(Index = 1; Index < 4; Index++)
+ {
+ if (m_FramingEx[Index] == m_FramingEx[Option])
+ RefCount++;
+ }
+
+ if (RefCount == 1)
+ {
+ // existing framing is only used once
+ CoTaskMemFree(m_FramingEx[Option]);
+ }
+ }
+
+ // store framing
+ m_FramingEx[Option] = FramingEx;
+ m_FramingProp[Option] = *FramingProp;
+
+ return S_OK;
+}
+
+IPin*
+STDMETHODCALLTYPE
+COutputPin::KsGetConnectedPin()
+{
+ return m_Pin;
+}
+
+IKsAllocatorEx*
+STDMETHODCALLTYPE
+COutputPin::KsGetPipe(
+ KSPEEKOPERATION Operation)
+{
+ if (Operation == KsPeekOperation_AddRef)
+ {
+ if (m_KsAllocatorEx)
+ m_KsAllocatorEx->AddRef();
+ }
+ return m_KsAllocatorEx;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsSetPipe(
+ IKsAllocatorEx *KsAllocator)
+{
+ if (KsAllocator)
+ KsAllocator->AddRef();
+
+ if (m_KsAllocatorEx)
+ m_KsAllocatorEx->Release();
+
+ m_KsAllocatorEx = KsAllocator;
+ return NOERROR;
+}
+
+ULONG
+STDMETHODCALLTYPE
+COutputPin::KsGetPipeAllocatorFlag()
+{
+ return m_PipeAllocatorFlag;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsSetPipeAllocatorFlag(
+ ULONG Flag)
+{
+ m_PipeAllocatorFlag = Flag;
+ return NOERROR;
+}
+
+GUID
+STDMETHODCALLTYPE
+COutputPin::KsGetPinBusCache()
+{
+ if (!m_bPinBusCacheInitialized)
+ {
+ CopyMemory(&m_PinBusCache, &m_Medium.Set, sizeof(GUID));
+ m_bPinBusCacheInitialized = TRUE;
+ }
+
+ return m_PinBusCache;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsSetPinBusCache(
+ GUID Bus)
+{
+ CopyMemory(&m_PinBusCache, &Bus, sizeof(GUID));
+ return NOERROR;
+}
+
+PWCHAR
+STDMETHODCALLTYPE
+COutputPin::KsGetPinName()
+{
+ return (PWCHAR)m_PinName;
+}
+
+
+PWCHAR
+STDMETHODCALLTYPE
+COutputPin::KsGetFilterName()
+{
+ return m_FilterName;
+}
+
+//-------------------------------------------------------------------
+// ISpecifyPropertyPages
+//
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::GetPages(CAUUID *pPages)
+{
+ OutputDebugStringW(L"COutputPin::GetPages NotImplemented\n");
+
+ if (!pPages)
+ return E_POINTER;
+
+ pPages->cElems = 0;
+ pPages->pElems = NULL;
+
+ return S_OK;
+}
+
+//-------------------------------------------------------------------
+// IKsPinFactory
+//
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsPinFactory(
+ ULONG* PinFactory)
+{
+ OutputDebugStringW(L"COutputPin::KsPinFactory\n");
+ *PinFactory = m_PinId;
+ return S_OK;
+}
+
+
+//-------------------------------------------------------------------
+// IStreamBuilder
+//
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::Render(
+ IPin *ppinOut,
+ IGraphBuilder *pGraph)
+{
+ OutputDebugStringW(L"COutputPin::Render\n");
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::Backout(
+ IPin *ppinOut,
+ IGraphBuilder *pGraph)
+{
+ OutputDebugStringW(L"COutputPin::Backout\n");
+ return S_OK;
+}
+//-------------------------------------------------------------------
+// IKsObject
+//
+HANDLE
+STDMETHODCALLTYPE
+COutputPin::KsGetObjectHandle()
+{
+ OutputDebugStringW(L"COutputPin::KsGetObjectHandle\n");
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+ return m_hPin;
+}
+
+//-------------------------------------------------------------------
+// IKsControl
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsProperty(
+ PKSPROPERTY Property,
+ ULONG PropertyLength,
+ LPVOID PropertyData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ HRESULT hr;
+ WCHAR Buffer[100];
+ LPOLESTR pstr;
+
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+
+ hr = KsSynchronousDeviceControl(m_hPin, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
+
+ StringFromCLSID(Property->Set, &pstr);
+ swprintf(Buffer, L"COutputPin::KsProperty Set %s Id %lu Flags %x hr %x\n", pstr, Property->Id, Property->Flags, hr);
+ OutputDebugStringW(Buffer);
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsMethod(
+ PKSMETHOD Method,
+ ULONG MethodLength,
+ LPVOID MethodData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+ OutputDebugStringW(L"COutputPin::KsMethod\n");
+ return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::KsEvent(
+ PKSEVENT Event,
+ ULONG EventLength,
+ LPVOID EventData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_hPin != INVALID_HANDLE_VALUE);
+
+ OutputDebugStringW(L"COutputPin::KsEvent\n");
+
+ if (EventLength)
+ return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
+ else
+ return KsSynchronousDeviceControl(m_hPin, IOCTL_KS_DISABLE_EVENT, (PVOID)Event, EventLength, NULL, 0, BytesReturned);
+}
+
+
+//-------------------------------------------------------------------
+// IKsPropertySet
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::Set(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ LPVOID pInstanceData,
+ DWORD cbInstanceData,
+ LPVOID pPropData,
+ DWORD cbPropData)
+{
+ ULONG BytesReturned;
+
+ if (cbInstanceData)
+ {
+ PKSPROPERTY Property = (PKSPROPERTY)CoTaskMemAlloc(sizeof(KSPROPERTY) + cbInstanceData);
+ if (!Property)
+ return E_OUTOFMEMORY;
+
+ Property->Set = guidPropSet;
+ Property->Id = dwPropID;
+ Property->Flags = KSPROPERTY_TYPE_SET;
+
+ CopyMemory((Property+1), pInstanceData, cbInstanceData);
+
+ HRESULT hr = KsProperty(Property, sizeof(KSPROPERTY) + cbInstanceData, pPropData, cbPropData, &BytesReturned);
+ CoTaskMemFree(Property);
+ return hr;
+ }
+ else
+ {
+ KSPROPERTY Property;
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ HRESULT hr = KsProperty(&Property, sizeof(KSPROPERTY), pPropData, cbPropData, &BytesReturned);
+ return hr;
+ }
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::Get(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ LPVOID pInstanceData,
+ DWORD cbInstanceData,
+ LPVOID pPropData,
+ DWORD cbPropData,
+ DWORD *pcbReturned)
+{
+ ULONG BytesReturned;
+
+ if (cbInstanceData)
+ {
+ PKSPROPERTY Property = (PKSPROPERTY)CoTaskMemAlloc(sizeof(KSPROPERTY) + cbInstanceData);
+ if (!Property)
+ return E_OUTOFMEMORY;
+
+ Property->Set = guidPropSet;
+ Property->Id = dwPropID;
+ Property->Flags = KSPROPERTY_TYPE_GET;
+
+ CopyMemory((Property+1), pInstanceData, cbInstanceData);
+
+ HRESULT hr = KsProperty(Property, sizeof(KSPROPERTY) + cbInstanceData, pPropData, cbPropData, &BytesReturned);
+ CoTaskMemFree(Property);
+ return hr;
+ }
+ else
+ {
+ KSPROPERTY Property;
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ HRESULT hr = KsProperty(&Property, sizeof(KSPROPERTY), pPropData, cbPropData, &BytesReturned);
+ return hr;
+ }
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::QuerySupported(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ DWORD *pTypeSupport)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+
+ OutputDebugStringW(L"COutputPin::QuerySupported\n");
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
+
+ return KsProperty(&Property, sizeof(KSPROPERTY), pTypeSupport, sizeof(DWORD), &BytesReturned);
+}
+
+
+//-------------------------------------------------------------------
+// IPin interface
+//
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
+{
+ HRESULT hr;
+ ALLOCATOR_PROPERTIES Properties;
+ IMemAllocatorCallbackTemp *pMemCallback;
+ WCHAR Buffer[200];
+
+ OutputDebugStringW(L"COutputPin::Connect called\n");
+ if (pmt)
+ {
+ hr = pReceivePin->QueryAccept(pmt);
+ if (FAILED(hr))
+ return hr;
+ }
+ else
+ {
+ // query accept
+ hr = pReceivePin->QueryAccept(&m_MediaFormat);
+ if (FAILED(hr))
+ return hr;
+
+ pmt = &m_MediaFormat;
+ }
+
+ // query for IMemInput interface
+ hr = pReceivePin->QueryInterface(IID_IMemInputPin, (void**)&m_MemInputPin);
+ if (FAILED(hr))
+ {
+ OutputDebugStringW(L"COutputPin::Connect no IMemInputPin interface\n");
+ DebugBreak();
+ return hr;
+ }
+
+ // get input pin allocator properties
+ ZeroMemory(&Properties, sizeof(ALLOCATOR_PROPERTIES));
+ m_MemInputPin->GetAllocatorRequirements(&Properties);
+
+ //FIXME determine allocator properties
+ Properties.cBuffers = 32;
+ Properties.cbBuffer = 2048 * 188; //2048 frames * MPEG2 TS Payload size
+ Properties.cbAlign = 4;
+
+ // get input pin allocator
+#if 0
+ hr = m_MemInputPin->GetAllocator(&m_MemAllocator);
+ if (SUCCEEDED(hr))
+ {
+ // set allocator properties
+ hr = m_MemAllocator->SetProperties(&Properties, &m_Properties);
+ if (FAILED(hr))
+ m_MemAllocator->Release();
+ }
+#endif
+
+ if (1)
+ {
+ hr = CKsAllocator_Constructor(NULL, IID_IMemAllocator, (void**)&m_MemAllocator);
+ if (FAILED(hr))
+ return hr;
+
+ // set allocator properties
+ hr = m_MemAllocator->SetProperties(&Properties, &m_Properties);
+ if (FAILED(hr))
+ {
+ swprintf(Buffer, L"COutputPin::Connect IMemAllocator::SetProperties failed with hr %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ m_MemAllocator->Release();
+ m_MemInputPin->Release();
+ return hr;
+ }
+ }
+
+ // commit property changes
+ hr = m_MemAllocator->Commit();
+ if (FAILED(hr))
+ {
+ swprintf(Buffer, L"COutputPin::Connect IMemAllocator::Commit failed with hr %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ m_MemAllocator->Release();
+ m_MemInputPin->Release();
+ return hr;
+ }
+
+ // get callback interface
+ hr = m_MemAllocator->QueryInterface(IID_IMemAllocatorCallbackTemp, (void**)&pMemCallback);
+ if (FAILED(hr))
+ {
+ swprintf(Buffer, L"COutputPin::Connect No IMemAllocatorCallbackTemp interface hr %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ m_MemAllocator->Release();
+ m_MemInputPin->Release();
+ return hr;
+ }
+
+ // set notification routine
+ hr = pMemCallback->SetNotify((IMemAllocatorNotifyCallbackTemp*)this);
+
+ // release IMemAllocatorNotifyCallbackTemp interface
+ pMemCallback->Release();
+
+ if (FAILED(hr))
+ {
+ swprintf(Buffer, L"COutputPin::Connect IMemAllocatorNotifyCallbackTemp::SetNotify failed hr %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ m_MemAllocator->Release();
+ m_MemInputPin->Release();
+ return hr;
+ }
+
+ // now set allocator
+ hr = m_MemInputPin->NotifyAllocator(m_MemAllocator, TRUE);
+ if (FAILED(hr))
+ {
+ swprintf(Buffer, L"COutputPin::Connect IMemInputPin::NotifyAllocator failed with hr %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ m_MemAllocator->Release();
+ m_MemInputPin->Release();
+ return hr;
+ }
+
+ if (!m_hPin)
+ {
+ //FIXME create pin handle
+ assert(0);
+ }
+
+ // receive connection;
+ hr = pReceivePin->ReceiveConnection((IPin*)this, pmt);
+ if (SUCCEEDED(hr))
+ {
+ // increment reference count
+ pReceivePin->AddRef();
+ m_Pin = pReceivePin;
+ OutputDebugStringW(L"COutputPin::Connect success\n");
+ }
+ else
+ {
+ m_MemInputPin->Release();
+ m_MemAllocator->Release();
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt)
+{
+ return E_UNEXPECTED;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::Disconnect( void)
+{
+ OutputDebugStringW(L"COutputPin::Disconnect\n");
+
+ if (!m_Pin)
+ {
+ // pin was not connected
+ return S_FALSE;
+ }
+
+ //FIXME
+ //check if filter is active
+
+ m_Pin->Release();
+ m_Pin = NULL;
+ m_MemInputPin->Release();
+ m_MemAllocator->Release();
+
+ OutputDebugStringW(L"COutputPin::Disconnect\n");
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::ConnectedTo(IPin **pPin)
+{
+ OutputDebugStringW(L"COutputPin::ConnectedTo\n");
+
+ if (!pPin)
+ return E_POINTER;
+
+ if (m_Pin)
+ {
+ // increment reference count
+ m_Pin->AddRef();
+ *pPin = m_Pin;
+ return S_OK;
+ }
+
+ *pPin = NULL;
+ return VFW_E_NOT_CONNECTED;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
+{
+ OutputDebugStringW(L"COutputPin::ConnectionMediaType called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::QueryPinInfo(PIN_INFO *pInfo)
+{
+ wcscpy(pInfo->achName, m_PinName);
+ pInfo->dir = PINDIR_OUTPUT;
+ pInfo->pFilter = m_ParentFilter;
+ m_ParentFilter->AddRef();
+
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::QueryDirection(PIN_DIRECTION *pPinDir)
+{
+ if (pPinDir)
+ {
+ *pPinDir = PINDIR_OUTPUT;
+ return S_OK;
+ }
+
+ return E_POINTER;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::QueryId(LPWSTR *Id)
+{
+ *Id = (LPWSTR)CoTaskMemAlloc((wcslen(m_PinName)+1)*sizeof(WCHAR));
+ if (!*Id)
+ return E_OUTOFMEMORY;
+
+ wcscpy(*Id, m_PinName);
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::QueryAccept(const AM_MEDIA_TYPE *pmt)
+{
+ OutputDebugStringW(L"COutputPin::QueryAccept called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::EnumMediaTypes(IEnumMediaTypes **ppEnum)
+{
+ HRESULT hr;
+ ULONG MediaTypeCount = 0, Index;
+ AM_MEDIA_TYPE * MediaTypes;
+ HANDLE hFilter;
+
+ if (!m_KsObjectParent)
+ {
+ // no interface
+ return E_NOINTERFACE;
+ }
+
+ // get parent filter handle
+ hFilter = m_KsObjectParent->KsGetObjectHandle();
+
+ // query media type count
+ hr = KsGetMediaTypeCount(hFilter, m_PinId, &MediaTypeCount);
+ if (FAILED(hr) || !MediaTypeCount)
+ {
+ return hr;
+ }
+
+ // allocate media types
+ MediaTypes = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE) * MediaTypeCount);
+ if (!MediaTypes)
+ {
+ // not enough memory
+ return E_OUTOFMEMORY;
+ }
+
+ // zero media types
+ ZeroMemory(MediaTypes, sizeof(AM_MEDIA_TYPE) * MediaTypeCount);
+
+ for(Index = 0; Index < MediaTypeCount; Index++)
+ {
+ // get media type
+ hr = KsGetMediaType(Index, &MediaTypes[Index], hFilter, m_PinId);
+ if (FAILED(hr))
+ {
+ // failed
+ CoTaskMemFree(MediaTypes);
+ return hr;
+ }
+ }
+
+ return CEnumMediaTypes_fnConstructor(MediaTypeCount, MediaTypes, IID_IEnumMediaTypes, (void**)ppEnum);
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::QueryInternalConnections(IPin **apPin, ULONG *nPin)
+{
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::EndOfStream( void)
+{
+ /* should be called only on input pins */
+ return E_UNEXPECTED;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::BeginFlush( void)
+{
+ /* should be called only on input pins */
+ return E_UNEXPECTED;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::EndFlush( void)
+{
+ /* should be called only on input pins */
+ return E_UNEXPECTED;
+}
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
+{
+ if (!m_Pin)
+ {
+ // we are not connected
+ return VFW_E_NOT_CONNECTED;
+ }
+
+ return m_Pin->NewSegment(tStart, tStop, dRate);
+}
+
+//-------------------------------------------------------------------
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::CheckFormat(
+ const AM_MEDIA_TYPE *pmt)
+{
+ PKSMULTIPLE_ITEM MultipleItem;
+ PKSDATAFORMAT DataFormat;
+ HRESULT hr;
+
+ if (!pmt)
+ return E_POINTER;
+
+ HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
+ assert(hFilter != NULL);
+
+ hr = KsGetMultiplePinFactoryItems(hFilter, m_PinId, KSPROPERTY_PIN_DATARANGES, (PVOID*)&MultipleItem);
+ if (FAILED(hr))
+ return S_FALSE;
+
+ DataFormat = (PKSDATAFORMAT)(MultipleItem + 1);
+ for(ULONG Index = 0; Index < MultipleItem->Count; Index++)
+ {
+ if (IsEqualGUID(pmt->majortype, DataFormat->MajorFormat) &&
+ IsEqualGUID(pmt->subtype, DataFormat->SubFormat) &&
+ IsEqualGUID(pmt->formattype, DataFormat->Specifier))
+ {
+ // format is supported
+ CoTaskMemFree(MultipleItem);
+ return S_OK;
+ }
+ DataFormat = (PKSDATAFORMAT)((ULONG_PTR)DataFormat + DataFormat->FormatSize);
+ }
+ //format is not supported
+ CoTaskMemFree(MultipleItem);
+ return S_FALSE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::CreatePin(
+ const AM_MEDIA_TYPE *pmt)
+{
+ PKSMULTIPLE_ITEM MediumList;
+ PKSMULTIPLE_ITEM InterfaceList;
+ PKSPIN_MEDIUM Medium;
+ PKSPIN_INTERFACE Interface;
+ IKsInterfaceHandler * InterfaceHandler;
+ HRESULT hr;
+
+ // query for pin medium
+ hr = KsQueryMediums(&MediumList);
+ if (FAILED(hr))
+ return hr;
+
+ // query for pin interface
+ hr = KsQueryInterfaces(&InterfaceList);
+ if (FAILED(hr))
+ {
+ // failed
+ CoTaskMemFree(MediumList);
+ return hr;
+ }
+
+ if (MediumList->Count)
+ {
+ //use first available medium
+ Medium = (PKSPIN_MEDIUM)(MediumList + 1);
+ }
+ else
+ {
+ // default to standard medium
+ Medium = &StandardPinMedium;
+ }
+
+ if (InterfaceList->Count)
+ {
+ //use first available interface
+ Interface = (PKSPIN_INTERFACE)(InterfaceList + 1);
+ }
+ else
+ {
+ // default to standard interface
+ Interface = &StandardPinInterface;
+ }
+
+ if (m_Communication != KSPIN_COMMUNICATION_BRIDGE && m_Communication != KSPIN_COMMUNICATION_NONE)
+ {
+ // now create pin
+ hr = CreatePinHandle(Medium, Interface, pmt);
+ if (FAILED(hr))
+ {
+ m_InterfaceHandler->Release();
+ m_InterfaceHandler = InterfaceHandler;
+ }
+
+ if (!m_InterfaceHandler)
+ {
+ // now load the IKsInterfaceHandler plugin
+ hr = CoCreateInstance(Interface->Set, NULL, CLSCTX_INPROC_SERVER, IID_IKsInterfaceHandler, (void**)&InterfaceHandler);
+ if (FAILED(hr))
+ {
+ // failed to load interface handler plugin
+ CoTaskMemFree(MediumList);
+ CoTaskMemFree(InterfaceList);
+
+ return hr;
+ }
+
+ // now set the pin
+ hr = InterfaceHandler->KsSetPin((IKsPin*)this);
+ if (FAILED(hr))
+ {
+ // failed to load interface handler plugin
+ InterfaceHandler->Release();
+ CoTaskMemFree(MediumList);
+ CoTaskMemFree(InterfaceList);
+ return hr;
+ }
+
+ // store interface handler
+ m_InterfaceHandler = InterfaceHandler;
+ }
+ }
+ else
+ {
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"COutputPin::CreatePin unexpected communication %u %s\n", m_Communication, m_PinName);
+ OutputDebugStringW(Buffer);
+ DebugBreak();
+ hr = E_FAIL;
+ }
+
+ // free medium / interface / dataformat
+ CoTaskMemFree(MediumList);
+ CoTaskMemFree(InterfaceList);
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin::CreatePinHandle(
+ PKSPIN_MEDIUM Medium,
+ PKSPIN_INTERFACE Interface,
+ const AM_MEDIA_TYPE *pmt)
+{
+ PKSPIN_CONNECT PinConnect;
+ PKSDATAFORMAT DataFormat;
+ ULONG Length;
+ HRESULT hr;
+ //KSALLOCATOR_FRAMING Framing;
+ //KSPROPERTY Property;
+ //ULONG BytesReturned;
+
+ if (m_hPin != INVALID_HANDLE_VALUE)
+ {
+ // pin already exists
+ //CloseHandle(m_hPin);
+ //m_hPin = INVALID_HANDLE_VALUE;
+ return S_OK;
+ }
+
+
+ // calc format size
+ Length = sizeof(KSPIN_CONNECT) + sizeof(KSDATAFORMAT) + pmt->cbFormat;
+
+ // allocate pin connect
+ PinConnect = (PKSPIN_CONNECT)CoTaskMemAlloc(Length);
+ if (!PinConnect)
+ {
+ // failed
+ return E_OUTOFMEMORY;
+ }
+
+ // setup request
+ CopyMemory(&PinConnect->Interface, Interface, sizeof(KSPIN_INTERFACE));
+ CopyMemory(&PinConnect->Medium, Medium, sizeof(KSPIN_MEDIUM));
+ PinConnect->PinId = m_PinId;
+ PinConnect->PinToHandle = NULL;
+ PinConnect->Priority.PriorityClass = KSPRIORITY_NORMAL;
+ PinConnect->Priority.PrioritySubClass = KSPRIORITY_NORMAL;
+
+ // get dataformat offset
+ DataFormat = (PKSDATAFORMAT)(PinConnect + 1);
+
+ // copy data format
+ DataFormat->FormatSize = sizeof(KSDATAFORMAT) + pmt->cbFormat;
+ DataFormat->Flags = 0;
+ DataFormat->SampleSize = pmt->lSampleSize;
+ DataFormat->Reserved = 0;
+ CopyMemory(&DataFormat->MajorFormat, &pmt->majortype, sizeof(GUID));
+ CopyMemory(&DataFormat->SubFormat, &pmt->subtype, sizeof(GUID));
+ CopyMemory(&DataFormat->Specifier, &pmt->formattype, sizeof(GUID));
+
+ if (pmt->cbFormat)
+ {
+ // copy extended format
+ CopyMemory((DataFormat + 1), pmt->pbFormat, pmt->cbFormat);
+ }
+
+ HANDLE hFilter = m_KsObjectParent->KsGetObjectHandle();
+ assert(hFilter != NULL);
+
+ // create pin
+ hr = KsCreatePin(hFilter, PinConnect, GENERIC_READ, &m_hPin);
+
+ if (SUCCEEDED(hr))
+ {
+ // store current interface / medium
+ CopyMemory(&m_Medium, Medium, sizeof(KSPIN_MEDIUM));
+ CopyMemory(&m_Interface, Interface, sizeof(KSPIN_INTERFACE));
+ CopyMemory(&m_MediaFormat, pmt, sizeof(AM_MEDIA_TYPE));
+
+ LPOLESTR pMajor, pSub, pFormat;
+ StringFromIID(m_MediaFormat.majortype, &pMajor);
+ StringFromIID(m_MediaFormat.subtype , &pSub);
+ StringFromIID(m_MediaFormat.formattype, &pFormat);
+ WCHAR Buffer[200];
+ swprintf(Buffer, L"COutputPin::CreatePinHandle Major %s SubType %s Format %s pbFormat %p cbFormat %u\n", pMajor, pSub, pFormat, pmt->pbFormat, pmt->cbFormat);
+ CoTaskMemFree(pMajor);
+ CoTaskMemFree(pSub);
+ CoTaskMemFree(pFormat);
+ OutputDebugStringW(Buffer);
+
+ if (pmt->cbFormat)
+ {
+ m_MediaFormat.pbFormat = (BYTE*)CoTaskMemAlloc(pmt->cbFormat);
+ if (!m_MediaFormat.pbFormat)
+ {
+ CoTaskMemFree(PinConnect);
+ m_MediaFormat.pbFormat = NULL;
+ m_MediaFormat.cbFormat = 0;
+ return E_OUTOFMEMORY;
+ }
+ CopyMemory(m_MediaFormat.pbFormat, pmt->pbFormat, pmt->cbFormat);
+ }
+#if 0
+ Property.Set = KSPROPSETID_Connection;
+ Property.Id = KSPROPERTY_CONNECTION_ALLOCATORFRAMING;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ ZeroMemory(&Framing, sizeof(KSALLOCATOR_FRAMING));
+ hr = KsProperty(&Property, sizeof(KSPROPERTY), (PVOID)&Framing, sizeof(KSALLOCATOR_FRAMING), &BytesReturned);
+ if (SUCCEEDED(hr))
+ {
+ m_Properties.cbAlign = (Framing.FileAlignment + 1);
+ m_Properties.cbBuffer = Framing.FrameSize;
+ m_Properties.cbPrefix = 0; //FIXME
+ m_Properties.cBuffers = Framing.Frames;
+ }
+ hr = S_OK;
+#endif
+
+ if (FAILED(InitializeIOThread()))
+ {
+ OutputDebugStringW(L"COutputPin::CreatePinHandle failed to initialize i/o thread\n");
+ DebugBreak();
+ }
+
+ //TODO
+ // connect pin pipes
+
+ }
+ // free pin connect
+ CoTaskMemFree(PinConnect);
+
+ return hr;
+}
+
+HRESULT
+WINAPI
+COutputPin::IoProcessRoutine()
+{
+ IMediaSample *Sample;
+ LONG SampleCount;
+ HRESULT hr;
+ PKSSTREAM_SEGMENT StreamSegment;
+ HANDLE hEvent;
+ WCHAR Buffer[100];
+ IMediaSample * Samples[1];
+
+ // first wait for the start event to signal
+ WaitForSingleObject(m_hStartEvent, INFINITE);
+
+ assert(m_InterfaceHandler);
+ REFERENCE_TIME Start = 0;
+ REFERENCE_TIME Stop = 1;
+ do
+ {
+ if (m_StopInProgress)
+ {
+ // stop io thread
+ break;
+ }
+
+ // get buffer
+ hr = m_MemAllocator->GetBuffer(&Sample, NULL, NULL, AM_GBF_NOWAIT);
+
+ if (FAILED(hr))
+ {
+ OutputDebugStringW(L"OutOfSamples\n");
+ m_Pin->BeginFlush();
+ WaitForSingleObject(m_hBufferAvailable, INFINITE);
+ m_Pin->EndFlush();
+ OutputDebugStringW(L"After Wait OutOfSamples\n");
+ // now retry again
+ continue;
+ }
+
+ // fill buffer
+ SampleCount = 1;
+ Samples[0] = Sample;
+
+ Sample->SetTime(NULL, NULL);
+ hr = m_InterfaceHandler->KsProcessMediaSamples(NULL, /* FIXME */
+ Samples,
+ &SampleCount,
+ KsIoOperation_Read,
+ &StreamSegment);
+ if (FAILED(hr) || !StreamSegment)
+ {
+ swprintf(Buffer, L"COutputPin::IoProcessRoutine KsProcessMediaSamples FAILED PinName %s hr %lx\n", m_PinName, hr);
+ OutputDebugStringW(Buffer);
+ SetEvent(m_hStopEvent);
+ m_IoThreadStarted = false;
+ ExitThread(0);
+ }
+
+ // get completion event
+ hEvent = StreamSegment->CompletionEvent;
+
+ // wait for i/o completion
+ WaitForSingleObject(hEvent, INFINITE);
+
+ // perform completion
+ m_InterfaceHandler->KsCompleteIo(StreamSegment);
+
+ // close completion event
+ CloseHandle(hEvent);
+
+ if (SUCCEEDED(hr))
+ {
+ LONG Length = Sample->GetActualDataLength();
+ Stop += Length;
+ // Sample->SetMediaTime(&Start, &Stop);
+ Start = Stop;
+
+ // now deliver the sample
+ hr = m_MemInputPin->Receive(Sample);
+
+ swprintf(Buffer, L"COutputPin::IoProcessRoutine PinName %s IMemInputPin::Receive hr %lx Sample %p m_MemAllocator %p\n", m_PinName, hr, Sample, m_MemAllocator);
+ OutputDebugStringW(Buffer);
+ if (FAILED(hr))
+ DebugBreak();
+ Sample = NULL;
+ }
+ }while(TRUE);
+
+ // signal end of i/o thread
+ SetEvent(m_hStopEvent);
+
+ m_IoThreadStarted = false;
+
+ return NOERROR;
+}
+
+DWORD
+WINAPI
+COutputPin_IoThreadStartup(
+ LPVOID lpParameter)
+{
+ COutputPin * Pin = (COutputPin*)lpParameter;
+ assert(Pin);
+
+ return Pin->IoProcessRoutine();
+}
+
+
+HRESULT
+WINAPI
+COutputPin::InitializeIOThread()
+{
+ HANDLE hThread;
+
+ if (m_IoThreadStarted)
+ return NOERROR;
+
+ if (!m_hStartEvent)
+ m_hStartEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
+ else
+ ResetEvent(m_hStartEvent);
+
+ if (!m_hStartEvent)
+ return E_OUTOFMEMORY;
+
+ if (!m_hStopEvent)
+ m_hStopEvent = CreateEventW(NULL, FALSE, FALSE, NULL);
+ else
+ ResetEvent(m_hStopEvent);
+
+ if (!m_hStopEvent)
+ return E_OUTOFMEMORY;
+
+ if (!m_hBufferAvailable)
+ m_hBufferAvailable = CreateEventW(NULL, FALSE, FALSE, NULL);
+ else
+ ResetEvent(m_hBufferAvailable);
+
+ if (!m_hBufferAvailable)
+ return E_OUTOFMEMORY;
+
+ m_StopInProgress = false;
+ m_IoThreadStarted = true;
+
+ // now create the startup thread
+ hThread = CreateThread(NULL, 0, COutputPin_IoThreadStartup, (LPVOID)this, 0, NULL);
+ if (!hThread)
+ return E_OUTOFMEMORY;
+
+
+ // close thread handle
+ CloseHandle(hThread);
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin_SetState(
+ IPin * Pin,
+ KSSTATE State)
+{
+ HRESULT hr = S_OK;
+ KSPROPERTY Property;
+ KSSTATE CurState;
+ WCHAR Buffer[100];
+ ULONG BytesReturned;
+
+ COutputPin * pPin = (COutputPin*)Pin;
+
+
+ Property.Set = KSPROPSETID_Connection;
+ Property.Id = KSPROPERTY_CONNECTION_STATE;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+
+ if (pPin->m_State < State)
+ {
+ if (pPin->m_State == KSSTATE_STOP)
+ {
+ CurState = KSSTATE_ACQUIRE;
+ hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
+
+ swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_ACQUIRE PinName %s hr %lx\n", pPin->m_PinName, hr);
+ OutputDebugStringW(Buffer);
+ if (FAILED(hr))
+ return hr;
+
+ pPin->m_State = CurState;
+
+ if (pPin->m_State == State)
+ return hr;
+ }
+ if (pPin->m_State == KSSTATE_ACQUIRE)
+ {
+ CurState = KSSTATE_PAUSE;
+ hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
+
+ swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_PAUSE PinName %s hr %lx\n", pPin->m_PinName, hr);
+ OutputDebugStringW(Buffer);
+ if (FAILED(hr))
+ return hr;
+
+ pPin->m_State = CurState;
+
+ if (pPin->m_State == State)
+ return hr;
+ }
+
+ CurState = KSSTATE_RUN;
+ hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
+
+ swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_RUN PinName %s hr %lx\n", pPin->m_PinName, hr);
+ OutputDebugStringW(Buffer);
+ if (FAILED(hr))
+ return hr;
+
+ // signal start event
+ SetEvent(pPin->m_hStartEvent);
+
+
+ pPin->m_State = CurState;
+ return hr;
+ }
+ else
+ {
+ if (pPin->m_State == KSSTATE_RUN)
+ {
+ CurState = KSSTATE_PAUSE;
+ hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
+
+ swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_PAUSE PinName %u hr %lx\n", pPin->m_PinName, hr);
+ OutputDebugStringW(Buffer);
+ if (FAILED(hr))
+ return hr;
+
+ pPin->m_State = CurState;
+
+ if (pPin->m_State == State)
+ return hr;
+ }
+ if (pPin->m_State == KSSTATE_PAUSE)
+ {
+ CurState = KSSTATE_ACQUIRE;
+ hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
+
+ swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_ACQUIRE PinName %u hr %lx\n", pPin->m_PinName, hr);
+ OutputDebugStringW(Buffer);
+ if (FAILED(hr))
+ return hr;
+
+ pPin->m_State = CurState;
+
+ if (pPin->m_State == State)
+ return hr;
+ }
+
+ // setting pending stop flag
+ pPin->m_StopInProgress = true;
+
+ CurState = KSSTATE_STOP;
+ hr = pPin->KsProperty(&Property, sizeof(KSPROPERTY), &CurState, sizeof(KSSTATE), &BytesReturned);
+
+ swprintf(Buffer, L"COutputPin_SetState Setting State KSSTATE_STOP PinName %s hr %lx\n", pPin->m_PinName, hr);
+ OutputDebugStringW(Buffer);
+ if (FAILED(hr))
+ return hr;
+
+ // release any waiting threads
+ SetEvent(pPin->m_hBufferAvailable);
+
+ // wait until i/o thread is done
+ WaitForSingleObject(pPin->m_hStopEvent, INFINITE);
+
+ pPin->m_State = CurState;
+ return hr;
+ }
+}
+
+
+HRESULT
+WINAPI
+COutputPin_Constructor(
+ IBaseFilter * ParentFilter,
+ LPCWSTR PinName,
+ ULONG PinId,
+ KSPIN_COMMUNICATION Communication,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ COutputPin * handler = new COutputPin(ParentFilter, PinName, PinId, Communication);
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return S_OK;
+}
diff --git a/reactos/dll/directx/ksproxy/precomp.h b/reactos/dll/directx/ksproxy/precomp.h
new file mode 100644
index 00000000000..c02b6adb6f4
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/precomp.h
@@ -0,0 +1,203 @@
+#pragma once
+
+#define _FORCENAMELESSUNION
+#define BUILDING_KS
+#define _KSDDK_
+#include
+//#include
+#include
+#define __STREAMS__
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+//#include
+
+
+interface DECLSPEC_UUID("877E4351-6FEA-11D0-B863-00AA00A216A1") IKsClock;
+
+#undef INTERFACE
+#define INTERFACE IKsClock
+
+DECLARE_INTERFACE_(IKsClock, IUnknown)
+{
+ STDMETHOD_(HANDLE, KsGetClockHandle)(
+ THIS
+ ) PURE;
+};
+
+
+typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject);
+
+typedef struct {
+ const GUID* riid;
+ LPFNCREATEINSTANCE lpfnCI;
+} INTERFACE_TABLE;
+
+/* classfactory.cpp */
+
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst);
+
+/* datatype.cpp */
+HRESULT
+WINAPI
+CKsDataTypeHandler_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* interface.cpp */
+HRESULT
+WINAPI
+CKsInterfaceHandler_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* clockforward.cpp */
+HRESULT
+WINAPI
+CKsClockForwarder_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* qualityforward.cpp */
+HRESULT
+WINAPI
+CKsQualityForwarder_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* cvpconfig.cpp */
+HRESULT
+WINAPI
+CVPConfig_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* cvpvbiconfig.cpp */
+HRESULT
+WINAPI
+CVPVBIConfig_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* basicaudio.cpp */
+HRESULT
+WINAPI
+CKsBasicAudio_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* proxy.cpp */
+HRESULT
+WINAPI
+CKsProxy_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* input_pin.cpp */
+HRESULT
+WINAPI
+CInputPin_Constructor(
+ IBaseFilter * ParentFilter,
+ LPCWSTR PinName,
+ HANDLE hFilter,
+ ULONG PinId,
+ KSPIN_COMMUNICATION Communication,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* output_pin.cpp */
+HRESULT
+WINAPI
+COutputPin_Constructor(
+ IBaseFilter * ParentFilter,
+ LPCWSTR PinName,
+ ULONG PinId,
+ KSPIN_COMMUNICATION Communication,
+ REFIID riid,
+ LPVOID * ppv);
+
+HRESULT
+STDMETHODCALLTYPE
+COutputPin_SetState(
+ IPin * Pin,
+ KSSTATE State);
+
+/* enumpins.cpp */
+HRESULT
+WINAPI
+CEnumPins_fnConstructor(
+ std::vector Pins,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* enum_mediatypes.cpp */
+HRESULT
+WINAPI
+CEnumMediaTypes_fnConstructor(
+ ULONG MediaTypeCount,
+ AM_MEDIA_TYPE * MediaTypes,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* node.cpp */
+HRESULT
+WINAPI
+CKsNode_Constructor(
+ IUnknown * pUnkOuter,
+ HANDLE ParentHandle,
+ ULONG NodeId,
+ ACCESS_MASK DesiredAccess,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* allocator.cpp */
+HRESULT
+WINAPI
+CKsAllocator_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* mediasample.cpp */
+HRESULT
+WINAPI
+CMediaSample_Constructor(
+ IMemAllocator* Allocator,
+ BYTE* pBuffer,
+ ULONG BufferSize,
+ REFIID riid,
+ LPVOID * ppv);
+
+
+extern const GUID IID_IKsObject;
+extern const GUID IID_IKsPinEx;
+extern const GUID IID_IKsAggregateControl;
+extern const GUID IID_IKsPinPipe;
+extern const GUID IID_IKsPinFactory;
+extern const GUID IID_IKsAllocatorEx;
+extern KSPIN_INTERFACE StandardPinInterface;
+extern KSPIN_MEDIUM StandardPinMedium;
diff --git a/reactos/dll/directx/ksproxy/proxy.cpp b/reactos/dll/directx/ksproxy/proxy.cpp
new file mode 100644
index 00000000000..41d543fa70e
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/proxy.cpp
@@ -0,0 +1,2926 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/proxy.cpp
+ * PURPOSE: IKsProxy interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+#ifndef _MSC_VER
+const GUID IID_IPersistPropertyBag = {0x37D84F60, 0x42CB, 0x11CE, {0x81, 0x35, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51}};
+const GUID GUID_NULL = {0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
+const GUID IID_ISpecifyPropertyPages = {0xB196B28B, 0xBAB4, 0x101A, {0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07}};
+const GUID IID_IPersistStream = {0x00000109, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+const GUID KSPROPSETID_MediaSeeking = {0xEE904F0CL, 0xD09B, 0x11D0, {0xAB, 0xE9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
+const GUID KSPROPSETID_Clock = {0xDF12A4C0L, 0xAC17, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
+const GUID KSEVENTSETID_Clock = {0x364D8E20L, 0x62C7, 0x11CF, {0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00}};
+const GUID KSPROPSETID_Stream = {0x65aaba60L, 0x98ae, 0x11cf, {0xa1, 0x0d, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4}};
+const GUID IID_IPersist = {0x0000010c, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+#endif
+
+const GUID IID_IBDA_DeviceControl = {0xFD0A5AF3, 0xB41D, 0x11d2, {0x9C, 0x95, 0x00, 0xC0, 0x4F, 0x79, 0x71, 0xE0}};
+const GUID IID_IKsAggregateControl = {0x7F40EAC0, 0x3947, 0x11D2, {0x87, 0x4E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
+const GUID IID_IKsClockPropertySet = {0x5C5CBD84, 0xE755, 0x11D0, {0xAC, 0x18, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
+const GUID IID_IKsTopology = {0x28F54683, 0x06FD, 0x11D2, {0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
+const GUID IID_IKsClock = {0x877E4351, 0x6FEA, 0x11D0, {0xB8, 0x63, 0x00, 0xAA, 0x00, 0xA2, 0x16, 0xA1}};
+/*
+ Needs IKsClock, IKsNotifyEvent
+*/
+
+class CKsProxy : public IBaseFilter,
+ public IAMovieSetup,
+ public IPersistPropertyBag,
+ public IKsObject,
+ public IPersistStream,
+ public IAMDeviceRemoval,
+ public ISpecifyPropertyPages,
+ public IReferenceClock,
+ public IMediaSeeking,
+ public IKsPropertySet,
+ public IKsClock,
+ public IKsClockPropertySet,
+ public IAMFilterMiscFlags,
+ public IKsControl,
+ public IKsTopology,
+ public IKsAggregateControl
+
+{
+public:
+ typedef std::vectorProxyPluginVector;
+ typedef std::vector PinVector;
+
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IBaseFilter methods
+ HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID);
+ HRESULT STDMETHODCALLTYPE Stop( void);
+ HRESULT STDMETHODCALLTYPE Pause( void);
+ HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME tStart);
+ HRESULT STDMETHODCALLTYPE GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *State);
+ HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *pClock);
+ HRESULT STDMETHODCALLTYPE GetSyncSource(IReferenceClock **pClock);
+ HRESULT STDMETHODCALLTYPE EnumPins(IEnumPins **ppEnum);
+ HRESULT STDMETHODCALLTYPE FindPin(LPCWSTR Id, IPin **ppPin);
+ HRESULT STDMETHODCALLTYPE QueryFilterInfo(FILTER_INFO *pInfo);
+ HRESULT STDMETHODCALLTYPE JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pName);
+ HRESULT STDMETHODCALLTYPE QueryVendorInfo(LPWSTR *pVendorInfo);
+
+ //IReferenceClock
+ HRESULT STDMETHODCALLTYPE GetTime(REFERENCE_TIME *pTime);
+ HRESULT STDMETHODCALLTYPE AdviseTime(REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HEVENT hEvent, DWORD_PTR *pdwAdviseCookie);
+ HRESULT STDMETHODCALLTYPE AdvisePeriodic(REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HSEMAPHORE hSemaphore, DWORD_PTR *pdwAdviseCookie);
+ HRESULT STDMETHODCALLTYPE Unadvise(DWORD_PTR dwAdviseCookie);
+
+ //IMediaSeeking
+ HRESULT STDMETHODCALLTYPE GetCapabilities(DWORD *pCapabilities);
+ HRESULT STDMETHODCALLTYPE CheckCapabilities(DWORD *pCapabilities);
+ HRESULT STDMETHODCALLTYPE IsFormatSupported(const GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE QueryPreferredFormat(GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE GetTimeFormat(GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE IsUsingTimeFormat(const GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE SetTimeFormat(const GUID *pFormat);
+ HRESULT STDMETHODCALLTYPE GetDuration(LONGLONG *pDuration);
+ HRESULT STDMETHODCALLTYPE GetStopPosition(LONGLONG *pStop);
+ HRESULT STDMETHODCALLTYPE GetCurrentPosition(LONGLONG *pCurrent);
+ HRESULT STDMETHODCALLTYPE ConvertTimeFormat(LONGLONG *pTarget, const GUID *pTargetFormat, LONGLONG Source, const GUID *pSourceFormat);
+ HRESULT STDMETHODCALLTYPE SetPositions(LONGLONG *pCurrent, DWORD dwCurrentFlags, LONGLONG *pStop, DWORD dwStopFlags);
+ HRESULT STDMETHODCALLTYPE GetPositions(LONGLONG *pCurrent, LONGLONG *pStop);
+ HRESULT STDMETHODCALLTYPE GetAvailable(LONGLONG *pEarliest, LONGLONG *pLatest);
+ HRESULT STDMETHODCALLTYPE SetRate(double dRate);
+ HRESULT STDMETHODCALLTYPE GetRate(double *pdRate);
+ HRESULT STDMETHODCALLTYPE GetPreroll(LONGLONG *pllPreroll);
+
+ //IKsPropertySet
+ HRESULT STDMETHODCALLTYPE Set(REFGUID guidPropSet, DWORD dwPropID, LPVOID pInstanceData, DWORD cbInstanceData, LPVOID pPropData, DWORD cbPropData);
+ HRESULT STDMETHODCALLTYPE Get(REFGUID guidPropSet, DWORD dwPropID, LPVOID pInstanceData, DWORD cbInstanceData, LPVOID pPropData, DWORD cbPropData, DWORD *pcbReturned);
+ HRESULT STDMETHODCALLTYPE QuerySupported(REFGUID guidPropSet, DWORD dwPropID, DWORD *pTypeSupport);
+
+ //IAMFilterMiscFlags
+ ULONG STDMETHODCALLTYPE GetMiscFlags( void);
+
+ //IKsControl
+ HRESULT STDMETHODCALLTYPE KsProperty(PKSPROPERTY Property, ULONG PropertyLength, LPVOID PropertyData, ULONG DataLength, ULONG* BytesReturned);
+ HRESULT STDMETHODCALLTYPE KsMethod(PKSMETHOD Method, ULONG MethodLength, LPVOID MethodData, ULONG DataLength, ULONG* BytesReturned);
+ HRESULT STDMETHODCALLTYPE KsEvent(PKSEVENT Event, ULONG EventLength, LPVOID EventData, ULONG DataLength, ULONG* BytesReturned);
+
+ //IKsTopolology
+ HRESULT STDMETHODCALLTYPE CreateNodeInstance(ULONG NodeId, ULONG Flags, ACCESS_MASK DesiredAccess, IUnknown* UnkOuter, REFGUID InterfaceId, LPVOID* Interface);
+
+ //IKsAggregateControl
+ HRESULT STDMETHODCALLTYPE KsAddAggregate(IN REFGUID AggregateClass);
+ HRESULT STDMETHODCALLTYPE KsRemoveAggregate(REFGUID AggregateClass);
+
+ //IKsClockPropertySet
+ HRESULT STDMETHODCALLTYPE KsGetTime(LONGLONG* Time);
+ HRESULT STDMETHODCALLTYPE KsSetTime(LONGLONG Time);
+ HRESULT STDMETHODCALLTYPE KsGetPhysicalTime(LONGLONG* Time);
+ HRESULT STDMETHODCALLTYPE KsSetPhysicalTime(LONGLONG Time);
+ HRESULT STDMETHODCALLTYPE KsGetCorrelatedTime(KSCORRELATED_TIME* CorrelatedTime);
+ HRESULT STDMETHODCALLTYPE KsSetCorrelatedTime(KSCORRELATED_TIME* CorrelatedTime);
+ HRESULT STDMETHODCALLTYPE KsGetCorrelatedPhysicalTime(KSCORRELATED_TIME* CorrelatedTime);
+ HRESULT STDMETHODCALLTYPE KsSetCorrelatedPhysicalTime(KSCORRELATED_TIME* CorrelatedTime);
+ HRESULT STDMETHODCALLTYPE KsGetResolution(KSRESOLUTION* Resolution);
+ HRESULT STDMETHODCALLTYPE KsGetState(KSSTATE* State);
+
+
+ //IAMovieSetup methods
+ HRESULT STDMETHODCALLTYPE Register( void);
+ HRESULT STDMETHODCALLTYPE Unregister( void);
+
+ // IPersistPropertyBag methods
+ HRESULT STDMETHODCALLTYPE InitNew( void);
+ HRESULT STDMETHODCALLTYPE Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog);
+ HRESULT STDMETHODCALLTYPE Save(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties);
+
+ // IKsObject
+ HANDLE STDMETHODCALLTYPE KsGetObjectHandle();
+
+ // IKsClock
+ HANDLE STDMETHODCALLTYPE KsGetClockHandle();
+
+ //IAMDeviceRemoval
+ HRESULT STDMETHODCALLTYPE DeviceInfo(CLSID *pclsidInterfaceClass, LPWSTR *pwszSymbolicLink);
+ HRESULT STDMETHODCALLTYPE Reassociate(void);
+ HRESULT STDMETHODCALLTYPE Disassociate( void);
+
+ //IPersistStream
+ HRESULT STDMETHODCALLTYPE IsDirty( void);
+ HRESULT STDMETHODCALLTYPE Load(IStream *pStm);
+ HRESULT STDMETHODCALLTYPE Save(IStream *pStm, BOOL fClearDirty);
+ HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize);
+
+ // ISpecifyPropertyPages
+ HRESULT STDMETHODCALLTYPE GetPages(CAUUID *pPages);
+
+
+ CKsProxy() : m_Ref(0), m_pGraph(0), m_ReferenceClock((IReferenceClock*)this), m_FilterState(State_Stopped), m_hDevice(0), m_Plugins(), m_Pins(), m_DevicePath(0), m_hClock(0) {};
+ ~CKsProxy()
+ {
+ if (m_hDevice)
+ CloseHandle(m_hDevice);
+ };
+
+ HRESULT STDMETHODCALLTYPE GetSupportedSets(LPGUID * pOutGuid, PULONG NumGuids);
+ HRESULT STDMETHODCALLTYPE LoadProxyPlugins(LPGUID pGuids, ULONG NumGuids);
+ HRESULT STDMETHODCALLTYPE GetNumberOfPins(PULONG NumPins);
+ HRESULT STDMETHODCALLTYPE GetPinInstanceCount(ULONG PinId, PKSPIN_CINSTANCES Instances);
+ HRESULT STDMETHODCALLTYPE GetPinDataflow(ULONG PinId, KSPIN_DATAFLOW * DataFlow);
+ HRESULT STDMETHODCALLTYPE GetPinName(ULONG PinId, KSPIN_DATAFLOW DataFlow, ULONG PinCount, LPWSTR * OutPinName);
+ HRESULT STDMETHODCALLTYPE GetPinCommunication(ULONG PinId, KSPIN_COMMUNICATION * Communication);
+ HRESULT STDMETHODCALLTYPE CreatePins();
+ HRESULT STDMETHODCALLTYPE GetMediaSeekingFormats(PKSMULTIPLE_ITEM *FormatList);
+ HRESULT STDMETHODCALLTYPE CreateClockInstance();
+ HRESULT STDMETHODCALLTYPE PerformClockProperty(ULONG PropertyId, ULONG PropertyFlags, PVOID OutputBuffer, ULONG OutputBufferSize);
+ HRESULT STDMETHODCALLTYPE SetPinState(KSSTATE State);
+
+
+protected:
+ LONG m_Ref;
+ IFilterGraph *m_pGraph;
+ IReferenceClock * m_ReferenceClock;
+ FILTER_STATE m_FilterState;
+ HANDLE m_hDevice;
+ ProxyPluginVector m_Plugins;
+ PinVector m_Pins;
+ LPWSTR m_DevicePath;
+ CLSID m_DeviceInterfaceGUID;
+ HANDLE m_hClock;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IBaseFilter))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IPersistPropertyBag))
+ {
+ *Output = (IPersistPropertyBag*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IAMDeviceRemoval))
+ {
+ *Output = (IAMDeviceRemoval*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IPersistStream))
+ {
+ *Output = (IPersistStream*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IPersist))
+ {
+ *Output = (IPersistStream*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsObject))
+ {
+ *Output = (IKsObject*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsClock))
+ {
+ *Output = (IKsClock*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IReferenceClock))
+ {
+ if (!m_hClock)
+ {
+ HRESULT hr = CreateClockInstance();
+ if (FAILED(hr))
+ return hr;
+ }
+
+ *Output = (IReferenceClock*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IMediaSeeking))
+ {
+ *Output = (IMediaSeeking*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IAMFilterMiscFlags))
+ {
+ *Output = (IAMFilterMiscFlags*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsControl))
+ {
+ *Output = (IKsControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsPropertySet))
+ {
+ *Output = (IKsPropertySet*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsTopology))
+ {
+ *Output = (IKsTopology*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsAggregateControl))
+ {
+ *Output = (IKsAggregateControl*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_IKsClockPropertySet))
+ {
+ if (!m_hClock)
+ {
+ HRESULT hr = CreateClockInstance();
+ if (FAILED(hr))
+ return hr;
+ }
+
+ *Output = (IKsClockPropertySet*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ else if (IsEqualGUID(refiid, IID_ISpecifyPropertyPages))
+ {
+ *Output = (ISpecifyPropertyPages*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ for(ULONG Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ if (m_Pins[Index])
+ {
+ HRESULT hr = m_Plugins[Index]->QueryInterface(refiid, Output);
+ if (SUCCEEDED(hr))
+ {
+ WCHAR Buffer[100];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CKsProxy::QueryInterface plugin %lu supports interface %s\n", Index, lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+ return hr;
+ }
+ }
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CKsProxy::QueryInterface: NoInterface for %s !!!\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// ISpecifyPropertyPages
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetPages(CAUUID *pPages)
+{
+ OutputDebugStringW(L"CKsProxy::GetPages NotImplemented\n");
+
+ if (!pPages)
+ return E_POINTER;
+
+ pPages->cElems = 0;
+ pPages->pElems = NULL;
+
+ return S_OK;
+}
+
+//-------------------------------------------------------------------
+// IKsClockPropertySet interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::CreateClockInstance()
+{
+ HRESULT hr;
+ HANDLE hPin = INVALID_HANDLE_VALUE;
+ ULONG Index;
+ PIN_DIRECTION PinDir;
+ IKsObject *pObject;
+ KSCLOCK_CREATE ClockCreate;
+
+ // find output pin and handle
+ for(Index = 0; Index < m_Pins.size(); Index++)
+ {
+ //get pin
+ IPin * pin = m_Pins[Index];
+ if (!pin)
+ continue;
+
+ // get direction
+ hr = pin->QueryDirection(&PinDir);
+ if (FAILED(hr))
+ continue;
+
+ // query IKsObject interface
+ hr = pin->QueryInterface(IID_IKsObject, (void**)&pObject);
+ if (FAILED(hr))
+ continue;
+
+
+ // get pin handle
+ hPin = pObject->KsGetObjectHandle();
+
+ //release IKsObject
+ pObject->Release();
+
+ if (hPin != INVALID_HANDLE_VALUE)
+ break;
+ }
+
+ if (hPin == INVALID_HANDLE_VALUE)
+ {
+ // clock can only be instantiated on a pin handle
+ return E_NOTIMPL;
+ }
+
+ if (m_hClock)
+ {
+ // release clock handle
+ CloseHandle(m_hClock);
+ }
+
+ //setup clock create request
+ ClockCreate.CreateFlags = 0;
+
+ // setup clock create request
+ hr = KsCreateClock(hPin, &ClockCreate, &m_hClock); // FIXME KsCreateClock returns NTSTATUS
+ if (SUCCEEDED(hr))
+ {
+ // failed to create clock
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::PerformClockProperty(
+ ULONG PropertyId,
+ ULONG PropertyFlags,
+ PVOID OutputBuffer,
+ ULONG OutputBufferSize)
+{
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ if (!m_hClock)
+ {
+ // create clock
+ hr = CreateClockInstance();
+ if (FAILED(hr))
+ return hr;
+ }
+
+ // setup request
+ Property.Set = KSPROPSETID_Clock;
+ Property.Id = PropertyId;
+ Property.Flags = PropertyFlags;
+
+ hr = KsSynchronousDeviceControl(m_hClock, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)OutputBuffer, OutputBufferSize, &BytesReturned);
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsGetTime(
+ LONGLONG* Time)
+{
+ OutputDebugStringW(L"CKsProxy::KsGetTime\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsSetTime(
+ LONGLONG Time)
+{
+ OutputDebugStringW(L"CKsProxy::KsSetTime\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_TIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsGetPhysicalTime(
+ LONGLONG* Time)
+{
+ OutputDebugStringW(L"CKsProxy::KsGetPhysicalTime\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)Time, sizeof(LONGLONG));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsSetPhysicalTime(
+ LONGLONG Time)
+{
+ OutputDebugStringW(L"CKsProxy::KsSetPhysicalTime\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_PHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)&Time, sizeof(LONGLONG));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsGetCorrelatedTime(
+ KSCORRELATED_TIME* CorrelatedTime)
+{
+ OutputDebugStringW(L"CKsProxy::KsGetCorrelatedTime\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsSetCorrelatedTime(
+ KSCORRELATED_TIME* CorrelatedTime)
+{
+ OutputDebugStringW(L"CKsProxy::KsSetCorrelatedTime\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsGetCorrelatedPhysicalTime(
+ KSCORRELATED_TIME* CorrelatedTime)
+{
+ OutputDebugStringW(L"CKsProxy::KsGetCorrelatedPhysicalTime\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_GET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsSetCorrelatedPhysicalTime(
+ KSCORRELATED_TIME* CorrelatedTime)
+{
+ OutputDebugStringW(L"CKsProxy::KsSetCorrelatedPhysicalTime\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_CORRELATEDPHYSICALTIME, KSPROPERTY_TYPE_SET, (PVOID)CorrelatedTime, sizeof(KSCORRELATED_TIME));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsGetResolution(
+ KSRESOLUTION* Resolution)
+{
+ OutputDebugStringW(L"CKsProxy::KsGetResolution\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_RESOLUTION, KSPROPERTY_TYPE_GET, (PVOID)Resolution, sizeof(KSRESOLUTION));
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsGetState(
+ KSSTATE* State)
+{
+ OutputDebugStringW(L"CKsProxy::KsGetState\n");
+ return PerformClockProperty(KSPROPERTY_CLOCK_STATE, KSPROPERTY_TYPE_GET, (PVOID)State, sizeof(KSSTATE));
+}
+
+//-------------------------------------------------------------------
+// IReferenceClock interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetTime(
+ REFERENCE_TIME *pTime)
+{
+ HRESULT hr;
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+
+ OutputDebugStringW(L"CKsProxy::GetTime\n");
+
+ if (!pTime)
+ return E_POINTER;
+
+ //
+ //FIXME locks
+ //
+
+ if (!m_hClock)
+ {
+ // create clock
+ hr = CreateClockInstance();
+ if (FAILED(hr))
+ return hr;
+ }
+
+ // setup request
+ Property.Set = KSPROPSETID_Clock;
+ Property.Id = KSPROPERTY_CLOCK_TIME;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hClock, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pTime, sizeof(REFERENCE_TIME), &BytesReturned);
+
+ // TODO
+ // increment value
+ //
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::AdviseTime(
+ REFERENCE_TIME baseTime,
+ REFERENCE_TIME streamTime,
+ HEVENT hEvent,
+ DWORD_PTR *pdwAdviseCookie)
+{
+ HRESULT hr;
+ KSEVENT Property;
+ ULONG BytesReturned;
+ PKSEVENT_TIME_MARK Event;
+
+ OutputDebugStringW(L"CKsProxy::AdviseTime\n");
+
+ //
+ //FIXME locks
+ //
+
+ if (!pdwAdviseCookie)
+ return E_POINTER;
+
+ if (!m_hClock)
+ {
+ // create clock
+ hr = CreateClockInstance();
+ if (FAILED(hr))
+ return hr;
+ }
+
+ // allocate event entry
+ Event = (PKSEVENT_TIME_MARK)CoTaskMemAlloc(sizeof(KSEVENT_TIME_MARK));
+ if (Event)
+ {
+ // setup request
+ Property.Set = KSEVENTSETID_Clock;
+ Property.Id = KSEVENT_CLOCK_POSITION_MARK;
+ Property.Flags = KSEVENT_TYPE_ENABLE;
+
+ Event->EventData.NotificationType = KSEVENTF_EVENT_HANDLE;
+ Event->EventData.EventHandle.Event = (HANDLE)hEvent;
+ Event->EventData.Alignment.Alignment[0] = 0;
+ Event->EventData.Alignment.Alignment[1] = 0;
+ Event->MarkTime = baseTime + streamTime;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hClock, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSEVENT), (PVOID)Event, sizeof(KSEVENT_TIME_MARK), &BytesReturned);
+ if (SUCCEEDED(hr))
+ {
+ // store event handle
+ *pdwAdviseCookie = (DWORD_PTR)Event;
+ }
+ else
+ {
+ // failed to enable event
+ CoTaskMemFree(Event);
+ }
+ }
+ else
+ {
+ hr = E_OUTOFMEMORY;
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::AdvisePeriodic(
+ REFERENCE_TIME startTime,
+ REFERENCE_TIME periodTime,
+ HSEMAPHORE hSemaphore,
+ DWORD_PTR *pdwAdviseCookie)
+{
+ HRESULT hr;
+ KSEVENT Property;
+ ULONG BytesReturned;
+ PKSEVENT_TIME_INTERVAL Event;
+
+ OutputDebugStringW(L"CKsProxy::AdvisePeriodic\n");
+
+ //
+ //FIXME locks
+ //
+
+ if (!pdwAdviseCookie)
+ return E_POINTER;
+
+ if (!m_hClock)
+ {
+ // create clock
+ hr = CreateClockInstance();
+ if (FAILED(hr))
+ return hr;
+ }
+
+ // allocate event entry
+ Event = (PKSEVENT_TIME_INTERVAL)CoTaskMemAlloc(sizeof(KSEVENT_TIME_INTERVAL));
+ if (Event)
+ {
+ // setup request
+ Property.Set = KSEVENTSETID_Clock;
+ Property.Id = KSEVENT_CLOCK_INTERVAL_MARK;
+ Property.Flags = KSEVENT_TYPE_ENABLE;
+
+ Event->EventData.NotificationType = KSEVENTF_SEMAPHORE_HANDLE;
+ Event->EventData.SemaphoreHandle.Semaphore = (HANDLE)hSemaphore;
+ Event->EventData.SemaphoreHandle.Reserved = 0;
+ Event->EventData.SemaphoreHandle.Adjustment = 1;
+ Event->TimeBase = startTime;
+ Event->Interval = periodTime;
+
+ // perform request
+ hr = KsSynchronousDeviceControl(m_hClock, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSEVENT), (PVOID)Event, sizeof(KSEVENT_TIME_INTERVAL), &BytesReturned);
+ if (SUCCEEDED(hr))
+ {
+ // store event handle
+ *pdwAdviseCookie = (DWORD_PTR)Event;
+ }
+ else
+ {
+ // failed to enable event
+ CoTaskMemFree(Event);
+ }
+ }
+ else
+ {
+ hr = E_OUTOFMEMORY;
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Unadvise(
+ DWORD_PTR dwAdviseCookie)
+{
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ OutputDebugStringW(L"CKsProxy::Unadvise\n");
+
+ if (m_hClock)
+ {
+ //lets disable the event
+ hr = KsSynchronousDeviceControl(m_hClock, IOCTL_KS_DISABLE_EVENT, (PVOID)dwAdviseCookie, sizeof(KSEVENTDATA), 0, 0, &BytesReturned);
+ if (SUCCEEDED(hr))
+ {
+ // lets free event data
+ CoTaskMemFree((LPVOID)dwAdviseCookie);
+ }
+ }
+ else
+ {
+ // no clock available
+ hr = E_FAIL;
+ }
+
+ return hr;
+}
+
+//-------------------------------------------------------------------
+// IMediaSeeking interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetCapabilities(
+ DWORD *pCapabilities)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned, Index;
+ HRESULT hr = S_OK;
+ DWORD TempCaps;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_CAPABILITIES;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ OutputDebugStringW(L"CKsProxy::GetCapabilities\n");
+
+ if (!pCapabilities)
+ return E_POINTER;
+
+
+ *pCapabilities = (KS_SEEKING_CanSeekAbsolute | KS_SEEKING_CanSeekForwards | KS_SEEKING_CanSeekBackwards | KS_SEEKING_CanGetCurrentPos |
+ KS_SEEKING_CanGetStopPos | KS_SEEKING_CanGetDuration | KS_SEEKING_CanPlayBackwards);
+
+ KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pCapabilities, sizeof(KS_SEEKING_CAPABILITIES), &BytesReturned);
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (FAILED(hr))
+ {
+ *pCapabilities = 0;
+ return hr;
+ }
+
+ TempCaps = 0;
+ // set time format
+ hr = pSeek->GetCapabilities(&TempCaps);
+ if (SUCCEEDED(hr))
+ {
+ // and with supported flags
+ *pCapabilities = (*pCapabilities & TempCaps);
+ }
+ // release IMediaSeeking interface
+ pSeek->Release();
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::CheckCapabilities(
+ DWORD *pCapabilities)
+{
+ DWORD Capabilities;
+ HRESULT hr;
+
+ OutputDebugStringW(L"CKsProxy::CheckCapabilities\n");
+
+ if (!pCapabilities)
+ return E_POINTER;
+
+ if (!*pCapabilities)
+ return E_FAIL;
+
+ hr = GetCapabilities(&Capabilities);
+ if (SUCCEEDED(hr))
+ {
+ if ((Capabilities | *pCapabilities) == Capabilities)
+ {
+ // all present
+ return S_OK;
+ }
+
+ Capabilities = (Capabilities & *pCapabilities);
+ if (Capabilities)
+ {
+ // not all present
+ *pCapabilities = Capabilities;
+ return S_FALSE;
+ }
+ // no capabilities are present
+ return E_FAIL;
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetMediaSeekingFormats(
+ PKSMULTIPLE_ITEM *FormatList)
+{
+ KSPROPERTY Property;
+ HRESULT hr;
+ ULONG BytesReturned;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_FORMATS;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ // query for format size list
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &BytesReturned);
+
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_MORE_DATA))
+ {
+ // allocate format list
+ *FormatList = (PKSMULTIPLE_ITEM)CoTaskMemAlloc(BytesReturned);
+ if (!*FormatList)
+ {
+ // not enough memory
+ return E_OUTOFMEMORY;
+ }
+
+ // get format list
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)*FormatList, BytesReturned, &BytesReturned);
+ if (FAILED(hr))
+ {
+ // failed to query format list
+ CoTaskMemFree(FormatList);
+ }
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::IsFormatSupported(
+ const GUID *pFormat)
+{
+ PKSMULTIPLE_ITEM FormatList;
+ LPGUID pGuid;
+ ULONG Index;
+ HRESULT hr = S_FALSE;
+
+ WCHAR Buffer[100];
+ LPOLESTR pstr;
+ StringFromCLSID(*pFormat, &pstr);
+ swprintf(Buffer, L"CKsProxy::IsFormatSupported %s\n",pstr);
+ OutputDebugStringW(Buffer);
+
+ if (!pFormat)
+ return E_POINTER;
+
+ // get media formats
+ hr = GetMediaSeekingFormats(&FormatList);
+ if (SUCCEEDED(hr))
+ {
+ swprintf(Buffer, L"CKsProxy::IsFormatSupported NumFormat %lu\n",FormatList->Count);
+ OutputDebugStringW(Buffer);
+
+ //iterate through format list
+ pGuid = (LPGUID)(FormatList + 1);
+ for(Index = 0; Index < FormatList->Count; Index++)
+ {
+ if (IsEqualGUID(*pGuid, *pFormat))
+ {
+ CoTaskMemFree(FormatList);
+ return S_OK;
+ }
+ pGuid++;
+ }
+ // free format list
+ CoTaskMemFree(FormatList);
+ }
+
+ // check if all plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (FAILED(hr))
+ {
+ // plugin does not support interface
+ hr = S_FALSE;
+ OutputDebugStringW(L"CKsProxy::IsFormatSupported plugin does not support IMediaSeeking interface\n");
+ break;
+ }
+
+ // query if it is supported
+ hr = pSeek->IsFormatSupported(pFormat);
+ // release interface
+ pSeek->Release();
+
+ if (FAILED(hr) || hr == S_FALSE)
+ break;
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::QueryPreferredFormat(
+ GUID *pFormat)
+{
+ PKSMULTIPLE_ITEM FormatList;
+ HRESULT hr;
+ ULONG Index;
+
+ OutputDebugStringW(L"CKsProxy::QueryPreferredFormat\n");
+
+ if (!pFormat)
+ return E_POINTER;
+
+ hr = GetMediaSeekingFormats(&FormatList);
+ if (SUCCEEDED(hr))
+ {
+ if (FormatList->Count)
+ {
+ CopyMemory(pFormat, (FormatList + 1), sizeof(GUID));
+ CoTaskMemFree(FormatList);
+ return S_OK;
+ }
+ CoTaskMemFree(FormatList);
+ }
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // get preferred time format
+ hr = pSeek->QueryPreferredFormat(pFormat);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (hr != S_FALSE)
+ return hr;
+ }
+ }
+ hr = S_FALSE;
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetTimeFormat(
+ GUID *pFormat)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned, Index;
+ HRESULT hr;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ OutputDebugStringW(L"CKsProxy::GetTimeFormat\n");
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pFormat, sizeof(GUID), &BytesReturned);
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ hr = E_NOTIMPL;
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // set time format
+ hr = pSeek->GetTimeFormat(pFormat);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (hr != S_FALSE)
+ break;
+ }
+ }
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::IsUsingTimeFormat(
+ const GUID *pFormat)
+{
+ GUID Format;
+
+ OutputDebugStringW(L"CKsProxy::IsUsingTimeFormat\n");
+
+ if (FAILED(QueryPreferredFormat(&Format)))
+ return S_FALSE;
+
+ if (IsEqualGUID(Format, *pFormat))
+ return S_OK;
+ else
+ return S_FALSE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::SetTimeFormat(
+ const GUID *pFormat)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned, Index;
+ HRESULT hr;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_TIMEFORMAT;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ OutputDebugStringW(L"CKsProxy::SetTimeFormat\n");
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pFormat, sizeof(GUID), &BytesReturned);
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ hr = E_NOTIMPL;
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (FAILED(hr))
+ {
+ //not supported
+ break;
+ }
+ // set time format
+ hr = pSeek->SetTimeFormat(pFormat);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (FAILED(hr))
+ break;
+ }
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetDuration(
+ LONGLONG *pDuration)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned, Index;
+ HRESULT hr;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_DURATION;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ OutputDebugStringW(L"CKsProxy::GetDuration\n");
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pDuration, sizeof(LONGLONG), &BytesReturned);
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ hr = E_NOTIMPL;
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // get duration
+ hr = pSeek->GetStopPosition(pDuration);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (hr != S_FALSE) // plugin implements it
+ break;
+ }
+ }
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetStopPosition(
+ LONGLONG *pStop)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned, Index;
+ HRESULT hr;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_STOPPOSITION;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ OutputDebugStringW(L"CKsProxy::GetStopPosition\n");
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pStop, sizeof(LONGLONG), &BytesReturned);
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ hr = E_NOTIMPL;
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // get stop position
+ hr = pSeek->GetStopPosition(pStop);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (hr != S_FALSE) // plugin implements it
+ break;
+ }
+ }
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetCurrentPosition(
+ LONGLONG *pCurrent)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned, Index;
+ HRESULT hr;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_POSITION;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ OutputDebugStringW(L"CKsProxy::GetCurrentPosition\n");
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pCurrent, sizeof(LONGLONG), &BytesReturned);
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ hr = E_NOTIMPL;
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // get current position
+ hr = pSeek->GetCurrentPosition(pCurrent);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (hr != S_FALSE) // plugin implements it
+ break;
+ }
+ }
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::ConvertTimeFormat(
+ LONGLONG *pTarget,
+ const GUID *pTargetFormat,
+ LONGLONG Source,
+ const GUID *pSourceFormat)
+{
+ KSP_TIMEFORMAT Property;
+ ULONG BytesReturned, Index;
+ GUID SourceFormat, TargetFormat;
+ HRESULT hr;
+
+ Property.Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Property.Id = KSPROPERTY_MEDIASEEKING_CONVERTTIMEFORMAT;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+
+ OutputDebugStringW(L"CKsProxy::ConvertTimeFormat\n");
+
+ if (!pTargetFormat)
+ {
+ // get current format
+ hr = GetTimeFormat(&TargetFormat);
+ if (FAILED(hr))
+ return hr;
+
+ pTargetFormat = &TargetFormat;
+ }
+
+ if (!pSourceFormat)
+ {
+ // get current format
+ hr = GetTimeFormat(&SourceFormat);
+ if (FAILED(hr))
+ return hr;
+
+ pSourceFormat = &SourceFormat;
+ }
+
+ Property.SourceFormat = *pSourceFormat;
+ Property.TargetFormat = *pTargetFormat;
+ Property.Time = Source;
+
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_TIMEFORMAT), (PVOID)pTarget, sizeof(LONGLONG), &BytesReturned);
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ //default error
+ hr = E_NOTIMPL;
+
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // convert time format
+ hr = pSeek->ConvertTimeFormat(pTarget, pTargetFormat, Source, pSourceFormat);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (hr != S_FALSE) // plugin implements it
+ break;
+ }
+ }
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::SetPositions(
+ LONGLONG *pCurrent,
+ DWORD dwCurrentFlags,
+ LONGLONG *pStop,
+ DWORD dwStopFlags)
+{
+ KSPROPERTY Property;
+ KSPROPERTY_POSITIONS Positions;
+ ULONG BytesReturned, Index;
+ HRESULT hr;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_POSITIONS;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ Positions.Current = *pCurrent;
+ Positions.CurrentFlags = (KS_SEEKING_FLAGS)dwCurrentFlags;
+ Positions.Stop = *pStop;
+ Positions.StopFlags = (KS_SEEKING_FLAGS)dwStopFlags;
+
+ OutputDebugStringW(L"CKsProxy::SetPositions\n");
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Positions, sizeof(KSPROPERTY_POSITIONS), &BytesReturned);
+ if (SUCCEEDED(hr))
+ {
+ if (dwCurrentFlags & AM_SEEKING_ReturnTime)
+ {
+ // retrieve current position
+ hr = GetCurrentPosition(pCurrent);
+ }
+
+ if (SUCCEEDED(hr))
+ {
+ if (dwStopFlags & AM_SEEKING_ReturnTime)
+ {
+ // retrieve current position
+ hr = GetStopPosition(pStop);
+ }
+ }
+ return hr;
+ }
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ hr = E_NOTIMPL;
+
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // set positions
+ hr = pSeek->SetPositions(pCurrent, dwCurrentFlags, pStop, dwStopFlags);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (FAILED(hr))
+ break;
+ }
+ }
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetPositions(
+ LONGLONG *pCurrent,
+ LONGLONG *pStop)
+{
+ HRESULT hr;
+
+ OutputDebugStringW(L"CKsProxy::GetPositions\n");
+
+ hr = GetCurrentPosition(pCurrent);
+ if (SUCCEEDED(hr))
+ hr = GetStopPosition(pStop);
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetAvailable(
+ LONGLONG *pEarliest,
+ LONGLONG *pLatest)
+{
+ KSPROPERTY Property;
+ KSPROPERTY_MEDIAAVAILABLE Media;
+ ULONG BytesReturned, Index;
+ HRESULT hr;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_AVAILABLE;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ OutputDebugStringW(L"CKsProxy::GetAvailable\n");
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&Media, sizeof(KSPROPERTY_MEDIAAVAILABLE), &BytesReturned);
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ // check if plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ hr = E_NOTIMPL;
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // delegate call
+ hr = pSeek->GetAvailable(pEarliest, pLatest);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (hr != S_FALSE) // plugin implements it
+ break;
+ }
+ }
+ }
+ else if (SUCCEEDED(hr))
+ {
+ *pEarliest = Media.Earliest;
+ *pLatest = Media.Latest;
+ }
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::SetRate(
+ double dRate)
+{
+ OutputDebugStringW(L"CKsProxy::SetRate\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetRate(
+ double *pdRate)
+{
+ OutputDebugStringW(L"CKsProxy::GetRate\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetPreroll(
+ LONGLONG *pllPreroll)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned, Index;
+ HRESULT hr;
+
+ Property.Set = KSPROPSETID_MediaSeeking;
+ Property.Id = KSPROPERTY_MEDIASEEKING_PREROLL;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ OutputDebugStringW(L"CKsProxy::GetPreroll\n");
+
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pllPreroll, sizeof(LONGLONG), &BytesReturned);
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND) || hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND))
+ {
+ // check if all plugins support it
+ for(Index = 0; Index < m_Plugins.size(); Index++)
+ {
+ // get plugin
+ IUnknown * Plugin = m_Plugins[Index];
+
+ if (!Plugin)
+ continue;
+
+ // query for IMediaSeeking interface
+ IMediaSeeking *pSeek = NULL;
+ hr = Plugin->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);
+ if (SUCCEEDED(hr))
+ {
+ // get preroll
+ hr = pSeek->GetPreroll(pllPreroll);
+ // release IMediaSeeking interface
+ pSeek->Release();
+
+ if (hr != S_FALSE) // plugin implements it
+ break;
+ }
+ }
+ hr = E_NOTIMPL;
+ }
+ return hr;
+}
+
+//-------------------------------------------------------------------
+// IAMFilterMiscFlags interface
+//
+
+ULONG
+STDMETHODCALLTYPE
+CKsProxy::GetMiscFlags()
+{
+ ULONG Index;
+ ULONG Flags = 0;
+ HRESULT hr;
+ PIN_DIRECTION PinDirection;
+ KSPIN_COMMUNICATION Communication;
+ WCHAR Buffer[100];
+
+ for(Index = 0; Index < m_Pins.size(); Index++)
+ {
+ // get current pin
+ IPin * pin = m_Pins[Index];
+ // query direction
+ hr = pin->QueryDirection(&PinDirection);
+ if (SUCCEEDED(hr))
+ {
+ if (PinDirection == PINDIR_INPUT)
+ {
+ if (SUCCEEDED(GetPinCommunication(Index, //FIXME verify PinId
+ &Communication)))
+ {
+ if (Communication != KSPIN_COMMUNICATION_NONE && Communication != KSPIN_COMMUNICATION_BRIDGE)
+ {
+ Flags |= AM_FILTER_MISC_FLAGS_IS_SOURCE;
+ }
+ }
+ }
+ }
+ }
+
+ swprintf(Buffer, L"CKsProxy::GetMiscFlags stub Flags %x\n", Flags);
+ OutputDebugStringW(Buffer);
+ return Flags;
+}
+
+//-------------------------------------------------------------------
+// IKsControl
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsProperty(
+ PKSPROPERTY Property,
+ ULONG PropertyLength,
+ LPVOID PropertyData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_hDevice != 0);
+ OutputDebugStringW(L"CKsProxy::KsProperty\n");
+ return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)Property, PropertyLength, (PVOID)PropertyData, DataLength, BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsMethod(
+ PKSMETHOD Method,
+ ULONG MethodLength,
+ LPVOID MethodData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_hDevice != 0);
+ OutputDebugStringW(L"CKsProxy::KsMethod\n");
+ return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_METHOD, (PVOID)Method, MethodLength, (PVOID)MethodData, DataLength, BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsEvent(
+ PKSEVENT Event,
+ ULONG EventLength,
+ LPVOID EventData,
+ ULONG DataLength,
+ ULONG* BytesReturned)
+{
+ assert(m_hDevice != 0);
+ OutputDebugStringW(L"CKsProxy::KsEvent\n");
+ if (EventLength)
+ return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_ENABLE_EVENT, (PVOID)Event, EventLength, (PVOID)EventData, DataLength, BytesReturned);
+ else
+ return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_DISABLE_EVENT, (PVOID)Event, EventLength, NULL, 0, BytesReturned);
+}
+
+
+//-------------------------------------------------------------------
+// IKsPropertySet
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Set(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ LPVOID pInstanceData,
+ DWORD cbInstanceData,
+ LPVOID pPropData,
+ DWORD cbPropData)
+{
+ ULONG BytesReturned;
+
+ OutputDebugStringW(L"CKsProxy::Set\n");
+
+ if (cbInstanceData)
+ {
+ PKSPROPERTY Property = (PKSPROPERTY)CoTaskMemAlloc(sizeof(KSPROPERTY) + cbInstanceData);
+ if (!Property)
+ return E_OUTOFMEMORY;
+
+ Property->Set = guidPropSet;
+ Property->Id = dwPropID;
+ Property->Flags = KSPROPERTY_TYPE_SET;
+
+ CopyMemory((Property+1), pInstanceData, cbInstanceData);
+
+ HRESULT hr = KsProperty(Property, sizeof(KSPROPERTY) + cbInstanceData, pPropData, cbPropData, &BytesReturned);
+ CoTaskMemFree(Property);
+ return hr;
+ }
+ else
+ {
+ KSPROPERTY Property;
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ HRESULT hr = KsProperty(&Property, sizeof(KSPROPERTY), pPropData, cbPropData, &BytesReturned);
+ return hr;
+ }
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Get(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ LPVOID pInstanceData,
+ DWORD cbInstanceData,
+ LPVOID pPropData,
+ DWORD cbPropData,
+ DWORD *pcbReturned)
+{
+ ULONG BytesReturned;
+
+ OutputDebugStringW(L"CKsProxy::Get\n");
+
+ if (cbInstanceData)
+ {
+ PKSPROPERTY Property = (PKSPROPERTY)CoTaskMemAlloc(sizeof(KSPROPERTY) + cbInstanceData);
+ if (!Property)
+ return E_OUTOFMEMORY;
+
+ Property->Set = guidPropSet;
+ Property->Id = dwPropID;
+ Property->Flags = KSPROPERTY_TYPE_GET;
+
+ CopyMemory((Property+1), pInstanceData, cbInstanceData);
+
+ HRESULT hr = KsProperty(Property, sizeof(KSPROPERTY) + cbInstanceData, pPropData, cbPropData, &BytesReturned);
+ CoTaskMemFree(Property);
+ return hr;
+ }
+ else
+ {
+ KSPROPERTY Property;
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ HRESULT hr = KsProperty(&Property, sizeof(KSPROPERTY), pPropData, cbPropData, &BytesReturned);
+ return hr;
+ }
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::QuerySupported(
+ REFGUID guidPropSet,
+ DWORD dwPropID,
+ DWORD *pTypeSupport)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+
+ OutputDebugStringW(L"CKsProxy::QuerySupported\n");
+
+ Property.Set = guidPropSet;
+ Property.Id = dwPropID;
+ Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
+
+ return KsProperty(&Property, sizeof(KSPROPERTY), pTypeSupport, sizeof(DWORD), &BytesReturned);
+}
+
+
+//-------------------------------------------------------------------
+// IKsTopology interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::CreateNodeInstance(
+ ULONG NodeId,
+ ULONG Flags,
+ ACCESS_MASK DesiredAccess,
+ IUnknown* UnkOuter,
+ REFGUID InterfaceId,
+ LPVOID* Interface)
+{
+ HRESULT hr;
+
+ OutputDebugStringW(L"CKsProxy::CreateNodeInstance\n");
+
+ *Interface = NULL;
+
+ if (IsEqualIID(IID_IUnknown, InterfaceId) || !UnkOuter)
+ {
+ hr = CKsNode_Constructor(UnkOuter, m_hDevice, NodeId, DesiredAccess, InterfaceId, Interface);
+ }
+ else
+ {
+ // interface not supported
+ hr = E_NOINTERFACE;
+ }
+
+ return hr;
+}
+
+//-------------------------------------------------------------------
+// IKsAggregateControl interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsAddAggregate(
+ IN REFGUID AggregateClass)
+{
+ OutputDebugStringW(L"CKsProxy::KsAddAggregate NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::KsRemoveAggregate(
+ REFGUID AggregateClass)
+{
+ OutputDebugStringW(L"CKsProxy::KsRemoveAggregate NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+//-------------------------------------------------------------------
+// IPersistStream interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::IsDirty()
+{
+ OutputDebugStringW(L"CKsProxy::IsDirty Notimplemented\n");
+ DebugBreak();
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Load(
+ IStream *pStm)
+{
+ HRESULT hr;
+ WCHAR Buffer[1000];
+ AM_MEDIA_TYPE MediaType;
+ ULONG BytesReturned;
+ LONG Length;
+
+ ULONG PinId;
+ LPOLESTR pMajor, pSub, pFormat;
+
+ OutputDebugStringW(L"CKsProxy::Load\n");
+
+#if 0
+ ULONG Version = ReadInt(pStm, hr);
+ if (Version != 1)
+ return E_FAIL;
+#endif
+
+ hr = pStm->Read(&Length, sizeof(ULONG), &BytesReturned);
+ swprintf(Buffer, L"Length hr %x hr length %lu\n", hr, Length);
+ OutputDebugStringW(Buffer);
+
+ do
+ {
+ hr = pStm->Read(&PinId, sizeof(ULONG), &BytesReturned);
+ swprintf(Buffer, L"Read: hr %08x PinId %lx BytesReturned %lu\n", hr, PinId, BytesReturned);
+ OutputDebugStringW(Buffer);
+
+ if (FAILED(hr) || !BytesReturned)
+ break;
+
+ Length -= BytesReturned;
+
+ hr = pStm->Read(&MediaType, sizeof(AM_MEDIA_TYPE), &BytesReturned);
+ if (FAILED(hr) || BytesReturned != sizeof(AM_MEDIA_TYPE))
+ {
+ swprintf(Buffer, L"Read failed with %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ break;
+ }
+
+
+ StringFromIID(MediaType.majortype, &pMajor);
+ StringFromIID(MediaType.subtype , &pSub);
+ StringFromIID(MediaType.formattype, &pFormat);
+
+ swprintf(Buffer, L"BytesReturned %lu majortype %s subtype %s bFixedSizeSamples %u bTemporalCompression %u lSampleSize %u formattype %s, pUnk %p cbFormat %u pbFormat %p\n", BytesReturned, pMajor, pSub, MediaType.bFixedSizeSamples, MediaType.bTemporalCompression, MediaType.lSampleSize, pFormat, MediaType.pUnk, MediaType.cbFormat, MediaType.pbFormat);
+ OutputDebugStringW(Buffer);
+
+ Length -= BytesReturned;
+
+
+ if (MediaType.cbFormat)
+ {
+ MediaType.pbFormat = (BYTE*)CoTaskMemAlloc(MediaType.cbFormat);
+ if (!MediaType.pbFormat)
+ return E_OUTOFMEMORY;
+
+ hr = pStm->Read(&MediaType.pbFormat, sizeof(MediaType.cbFormat), &BytesReturned);
+ if (FAILED(hr))
+ {
+ swprintf(Buffer, L"ReadFormat failed with %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ break;
+ }
+ Length -= BytesReturned;
+ }
+
+ }while(Length > 0);
+
+ DebugBreak();
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Save(
+ IStream *pStm,
+ BOOL fClearDirty)
+{
+ OutputDebugStringW(L"CKsProxy::Save Notimplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetSizeMax(
+ ULARGE_INTEGER *pcbSize)
+{
+ OutputDebugStringW(L"CKsProxy::GetSizeMax Notimplemented\n");
+ DebugBreak();
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IAMDeviceRemoval interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::DeviceInfo(CLSID *pclsidInterfaceClass, LPWSTR *pwszSymbolicLink)
+{
+
+ OutputDebugStringW(L"CKsProxy::DeviceInfo\n");
+
+ if (!m_DevicePath)
+ {
+ // object not initialized
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND);
+ }
+
+ // copy device interface guid
+ CopyMemory(pclsidInterfaceClass, &m_DeviceInterfaceGUID, sizeof(GUID));
+
+ if (pwszSymbolicLink)
+ {
+ *pwszSymbolicLink = (LPWSTR)CoTaskMemAlloc((wcslen(m_DevicePath)+1) * sizeof(WCHAR));
+ if (!*pwszSymbolicLink)
+ return E_OUTOFMEMORY;
+
+ wcscpy(*pwszSymbolicLink, m_DevicePath);
+ }
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Reassociate(void)
+{
+ OutputDebugStringW(L"CKsProxy::Reassociate\n");
+
+ if (!m_DevicePath || m_hDevice)
+ {
+ // file path not available
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND);
+ }
+
+ m_hDevice = CreateFileW(m_DevicePath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
+ if (!m_hDevice)
+ {
+ // failed to open device
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ // success
+ return NOERROR;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Disassociate(void)
+{
+ OutputDebugStringW(L"CKsProxy::Disassociate\n");
+
+ if (!m_hDevice)
+ return E_HANDLE;
+
+ CloseHandle(m_hDevice);
+ m_hDevice = NULL;
+ return NOERROR;
+}
+
+//-------------------------------------------------------------------
+// IKsClock interface
+//
+
+HANDLE
+STDMETHODCALLTYPE
+CKsProxy::KsGetClockHandle()
+{
+ OutputDebugStringW(L"CKsProxy::KsGetClockHandle\n");
+ return m_hClock;
+}
+
+
+//-------------------------------------------------------------------
+// IKsObject interface
+//
+
+HANDLE
+STDMETHODCALLTYPE
+CKsProxy::KsGetObjectHandle()
+{
+ OutputDebugStringW(L"CKsProxy::KsGetObjectHandle\n");
+ return m_hDevice;
+}
+
+//-------------------------------------------------------------------
+// IPersistPropertyBag interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::InitNew( void)
+{
+ OutputDebugStringW(L"CKsProxy::InitNew\n");
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetSupportedSets(
+ LPGUID * pOutGuid,
+ PULONG NumGuids)
+{
+ KSPROPERTY Property;
+ LPGUID pGuid;
+ ULONG NumProperty = 0;
+ ULONG NumMethods = 0;
+ ULONG NumEvents = 0;
+ ULONG Length;
+ ULONG BytesReturned;
+ HRESULT hr;
+
+ Property.Set = GUID_NULL;
+ Property.Id = 0;
+ Property.Flags = KSPROPERTY_TYPE_SETSUPPORT;
+
+ KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumProperty);
+ KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumMethods);
+ KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), NULL, 0, &NumEvents);
+
+ Length = NumProperty + NumMethods + NumEvents;
+
+ // allocate guid buffer
+ pGuid = (LPGUID)CoTaskMemAlloc(Length);
+ if (!pGuid)
+ {
+ // failed
+ return E_OUTOFMEMORY;
+ }
+
+ NumProperty /= sizeof(GUID);
+ NumMethods /= sizeof(GUID);
+ NumEvents /= sizeof(GUID);
+
+ // get all properties
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)pGuid, Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+
+ // get all methods
+ if (Length)
+ {
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_METHOD, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty], Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+ }
+
+ // get all events
+ if (Length)
+ {
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_ENABLE_EVENT, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&pGuid[NumProperty+NumMethods], Length, &BytesReturned);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(pGuid);
+ return E_FAIL;
+ }
+ Length -= BytesReturned;
+ }
+
+#ifdef KSPROXY_TRACE
+ WCHAR Buffer[200];
+ swprintf(Buffer, L"NumProperty %lu NumMethods %lu NumEvents %lu\n", NumProperty, NumMethods, NumEvents);
+ OutputDebugStringW(Buffer);
+#endif
+
+ *pOutGuid = pGuid;
+ *NumGuids = NumProperty+NumEvents+NumMethods;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::LoadProxyPlugins(
+ LPGUID pGuids,
+ ULONG NumGuids)
+{
+ ULONG Index;
+ LPOLESTR pStr;
+ HKEY hKey, hSubKey;
+ HRESULT hr;
+ IUnknown * pUnknown;
+
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\Control\\MediaInterfaces", 0, KEY_READ, &hKey) != ERROR_SUCCESS)
+ {
+ OutputDebugStringW(L"CKsProxy::LoadProxyPlugins failed to open MediaInterfaces key\n");
+ return E_FAIL;
+ }
+
+ // enumerate all sets
+ for(Index = 0; Index < NumGuids; Index++)
+ {
+ // convert to string
+ hr = StringFromCLSID(pGuids[Index], &pStr);
+ if (FAILED(hr))
+ return E_FAIL;
+
+ // now try open class key
+ if (RegOpenKeyExW(hKey, pStr, 0, KEY_READ, &hSubKey) != ERROR_SUCCESS)
+ {
+ // no plugin for that set exists
+ CoTaskMemFree(pStr);
+ continue;
+ }
+
+ // try load plugin
+ hr = CoCreateInstance(pGuids[Index], (IBaseFilter*)this, CLSCTX_INPROC_SERVER, IID_IUnknown, (void**)&pUnknown);
+ if (SUCCEEDED(hr))
+ {
+ // store plugin
+ m_Plugins.push_back(pUnknown);
+ }
+ // close key
+ RegCloseKey(hSubKey);
+ }
+
+ // close media interfaces key
+ RegCloseKey(hKey);
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetNumberOfPins(
+ PULONG NumPins)
+{
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+
+ // setup request
+ Property.Set = KSPROPSETID_Pin;
+ Property.Id = KSPROPERTY_PIN_CTYPES;
+ Property.Flags = KSPROPERTY_TYPE_GET;
+
+ return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)NumPins, sizeof(ULONG), &BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetPinInstanceCount(
+ ULONG PinId,
+ PKSPIN_CINSTANCES Instances)
+{
+ KSP_PIN Property;
+ ULONG BytesReturned;
+
+ // setup request
+ Property.Property.Set = KSPROPSETID_Pin;
+ Property.Property.Id = KSPROPERTY_PIN_CINSTANCES;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.PinId = PinId;
+ Property.Reserved = 0;
+
+ return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_PIN), (PVOID)Instances, sizeof(KSPIN_CINSTANCES), &BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetPinCommunication(
+ ULONG PinId,
+ KSPIN_COMMUNICATION * Communication)
+{
+ KSP_PIN Property;
+ ULONG BytesReturned;
+
+ // setup request
+ Property.Property.Set = KSPROPSETID_Pin;
+ Property.Property.Id = KSPROPERTY_PIN_COMMUNICATION;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.PinId = PinId;
+ Property.Reserved = 0;
+
+ return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_PIN), (PVOID)Communication, sizeof(KSPIN_COMMUNICATION), &BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetPinDataflow(
+ ULONG PinId,
+ KSPIN_DATAFLOW * DataFlow)
+{
+ KSP_PIN Property;
+ ULONG BytesReturned;
+
+ // setup request
+ Property.Property.Set = KSPROPSETID_Pin;
+ Property.Property.Id = KSPROPERTY_PIN_DATAFLOW;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.PinId = PinId;
+ Property.Reserved = 0;
+
+ return KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_PIN), (PVOID)DataFlow, sizeof(KSPIN_DATAFLOW), &BytesReturned);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetPinName(
+ ULONG PinId,
+ KSPIN_DATAFLOW DataFlow,
+ ULONG PinCount,
+ LPWSTR * OutPinName)
+{
+ KSP_PIN Property;
+ LPWSTR PinName;
+ ULONG BytesReturned;
+ HRESULT hr;
+ WCHAR Buffer[100];
+
+ // setup request
+ Property.Property.Set = KSPROPSETID_Pin;
+ Property.Property.Id = KSPROPERTY_PIN_NAME;
+ Property.Property.Flags = KSPROPERTY_TYPE_GET;
+ Property.PinId = PinId;
+ Property.Reserved = 0;
+
+ // #1 try get it from pin directly
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_PIN), NULL, 0, &BytesReturned);
+
+ if (hr == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_MORE_DATA))
+ {
+ // allocate pin name
+ PinName = (LPWSTR)CoTaskMemAlloc(BytesReturned);
+ if (!PinName)
+ return E_OUTOFMEMORY;
+
+ // retry with allocated buffer
+ hr = KsSynchronousDeviceControl(m_hDevice, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSP_PIN), PinName, BytesReturned, &BytesReturned);
+ if (SUCCEEDED(hr))
+ {
+ *OutPinName = PinName;
+ return hr;
+ }
+
+ //free buffer
+ CoTaskMemFree(PinName);
+ }
+
+ //
+ // TODO: retrieve pin name from topology node
+ //
+
+ if (DataFlow == KSPIN_DATAFLOW_IN)
+ {
+ swprintf(Buffer, L"Input%lu", PinCount);
+ }
+ else
+ {
+ swprintf(Buffer, L"Output%lu", PinCount);
+ }
+
+ // allocate pin name
+ PinName = (LPWSTR)CoTaskMemAlloc((wcslen(Buffer)+1) * sizeof(WCHAR));
+ if (!PinName)
+ return E_OUTOFMEMORY;
+
+ // copy pin name
+ wcscpy(PinName, Buffer);
+
+ // store result
+ *OutPinName = PinName;
+ // done
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::CreatePins()
+{
+ ULONG NumPins, Index;
+ KSPIN_CINSTANCES Instances;
+ KSPIN_DATAFLOW DataFlow;
+ KSPIN_COMMUNICATION Communication;
+ HRESULT hr;
+ WCHAR Buffer[100];
+ LPWSTR PinName;
+ IPin * pPin;
+ ULONG InputPin = 0;
+ ULONG OutputPin = 0;
+
+ // get number of pins
+ hr = GetNumberOfPins(&NumPins);
+ if (FAILED(hr))
+ return hr;
+
+ for(Index = 0; Index < NumPins; Index++)
+ {
+ // query current instance count
+ hr = GetPinInstanceCount(Index, &Instances);
+ if (FAILED(hr))
+ continue;
+
+ // query pin communication;
+ hr = GetPinCommunication(Index, &Communication);
+ if (FAILED(hr))
+ continue;
+
+ if (Instances.CurrentCount == Instances.PossibleCount)
+ {
+ // already maximum reached for this pin
+ continue;
+ }
+
+ // get direction of pin
+ hr = GetPinDataflow(Index, &DataFlow);
+ if (FAILED(hr))
+ continue;
+
+ if (DataFlow == KSPIN_DATAFLOW_IN)
+ hr = GetPinName(Index, DataFlow, InputPin, &PinName);
+ else
+ hr = GetPinName(Index, DataFlow, OutputPin, &PinName);
+
+ if (FAILED(hr))
+ continue;
+
+ // construct the pins
+ if (DataFlow == KSPIN_DATAFLOW_IN)
+ {
+ hr = CInputPin_Constructor((IBaseFilter*)this, PinName, m_hDevice, Index, Communication, IID_IPin, (void**)&pPin);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(PinName);
+ continue;
+ }
+ InputPin++;
+ }
+ else
+ {
+ hr = COutputPin_Constructor((IBaseFilter*)this, PinName, Index, Communication, IID_IPin, (void**)&pPin);
+ if (FAILED(hr))
+ {
+ CoTaskMemFree(PinName);
+ continue;
+ }
+ OutputPin++;
+ }
+
+ // store pins
+ m_Pins.push_back(pPin);
+
+ swprintf(Buffer, L"Index %lu DataFlow %lu Name %s\n", Index, DataFlow, PinName);
+ OutputDebugStringW(Buffer);
+ }
+
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Load(IPropertyBag *pPropBag, IErrorLog *pErrorLog)
+{
+ HRESULT hr;
+ WCHAR Buffer[100];
+ VARIANT varName;
+ LPGUID pGuid;
+ ULONG NumGuids = 0;
+ HDEVINFO hList;
+ SP_DEVICE_INTERFACE_DATA DeviceInterfaceData;
+
+ OutputDebugStringW(L"CKsProxy::Load\n");
+
+ // read device path
+ varName.vt = VT_BSTR;
+ hr = pPropBag->Read(L"DevicePath", &varName, pErrorLog);
+
+ if (FAILED(hr))
+ {
+ swprintf(Buffer, L"CKsProxy::Load Read %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ OutputDebugStringW(L"DevicePath: ");
+ OutputDebugStringW(varName.bstrVal);
+ OutputDebugStringW(L"\n");
+
+ // create device list
+ hList = SetupDiCreateDeviceInfoListExW(NULL, NULL, NULL, NULL);
+ if (hList == INVALID_HANDLE_VALUE)
+ {
+ // failed to create device list
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ DeviceInterfaceData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
+ if (!SetupDiOpenDeviceInterfaceW(hList, (PCWSTR)varName.bstrVal, 0, &DeviceInterfaceData))
+ {
+ // failed to open device interface
+ SetupDiDestroyDeviceInfoList(hList);
+ }
+
+ // FIXME handle device interface links(aliases)
+ CopyMemory(&m_DeviceInterfaceGUID, &DeviceInterfaceData.InterfaceClassGuid, sizeof(GUID));
+
+ // close device info list
+ SetupDiDestroyDeviceInfoList(hList);
+
+ // open device
+ m_hDevice = CreateFileW(varName.bstrVal, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);
+
+ if (m_hDevice == INVALID_HANDLE_VALUE)
+ {
+ // failed to open device
+ swprintf(Buffer, L"CKsProxy:: failed to open device with %lx\n", GetLastError());
+ OutputDebugStringW(Buffer);
+
+ return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, GetLastError());
+ }
+
+ // store device path
+ m_DevicePath = varName.bstrVal;
+
+ // get all supported sets
+ hr = GetSupportedSets(&pGuid, &NumGuids);
+ if (FAILED(hr))
+ {
+ CloseHandle(m_hDevice);
+ m_hDevice = NULL;
+ return hr;
+ }
+
+ // load all proxy plugins
+ hr = LoadProxyPlugins(pGuid, NumGuids);
+ if (FAILED(hr))
+ {
+ CloseHandle(m_hDevice);
+ m_hDevice = NULL;
+ return hr;
+ }
+
+ // free sets
+ CoTaskMemFree(pGuid);
+
+ // now create the input / output pins
+ hr = CreatePins();
+
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Save(IPropertyBag *pPropBag, BOOL fClearDirty, BOOL fSaveAllProperties)
+{
+ OutputDebugStringW(L"CKsProxy::Save\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IBaseFilter interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetClassID(
+ CLSID *pClassID)
+{
+ OutputDebugStringW(L"CKsProxy::GetClassID\n");
+ CopyMemory(pClassID, &CLSID_Proxy, sizeof(GUID));
+
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Stop()
+{
+ OutputDebugStringW(L"CKsProxy::Stop : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Pause()
+{
+ HRESULT hr = S_OK;
+
+ OutputDebugStringW(L"CKsProxy::Pause\n");
+
+ if (m_FilterState == State_Stopped)
+ {
+ hr = SetPinState(KSSTATE_PAUSE);
+ if (FAILED(hr))
+ return hr;
+
+ }
+
+ m_FilterState = State_Paused;
+ return hr;
+
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Run(
+ REFERENCE_TIME tStart)
+{
+ HRESULT hr;
+
+ OutputDebugStringW(L"CKsProxy::Run\n");
+
+ if (m_FilterState == State_Stopped)
+ {
+ // setting filter state to pause
+ hr = Pause();
+ if (FAILED(hr))
+ return hr;
+
+ assert(m_FilterState == State_Paused);
+ }
+
+ hr = SetPinState(KSSTATE_RUN);
+ if (FAILED(hr))
+ return hr;
+
+ m_FilterState = State_Running;
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::SetPinState(
+ KSSTATE State)
+{
+ HRESULT hr = S_OK;
+ ULONG Index;
+ IKsObject *pObject;
+ ULONG BytesReturned;
+ KSPROPERTY Property;
+ PIN_INFO PinInfo;
+
+ Property.Set = KSPROPSETID_Connection;
+ Property.Id = KSPROPERTY_CONNECTION_STATE;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ // set all pins to running state
+ for(Index = 0; Index < m_Pins.size(); Index++)
+ {
+ IPin * Pin = m_Pins[Index];
+ if (!Pin)
+ continue;
+
+ //check if the pin is connected
+ IPin * TempPin;
+ hr = Pin->ConnectedTo(&TempPin);
+ if (FAILED(hr))
+ {
+ // skip unconnected pins
+ continue;
+ }
+
+ // release connected pin
+ TempPin->Release();
+
+ // query for the pin info
+ hr = Pin->QueryPinInfo(&PinInfo);
+
+ if (SUCCEEDED(hr))
+ {
+ if (PinInfo.pFilter)
+ PinInfo.pFilter->Release();
+
+ if (PinInfo.dir == PINDIR_OUTPUT)
+ {
+ hr = COutputPin_SetState(Pin, State);
+ if (SUCCEEDED(hr))
+ continue;
+ }
+ }
+
+ //query IKsObject interface
+ hr = Pin->QueryInterface(IID_IKsObject, (void**)&pObject);
+
+ // get pin handle
+ HANDLE hPin = pObject->KsGetObjectHandle();
+
+ // sanity check
+ assert(hPin && hPin != INVALID_HANDLE_VALUE);
+
+ // now set state
+ hr = KsSynchronousDeviceControl(hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&State, sizeof(KSSTATE), &BytesReturned);
+
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CKsProxy::SetPinState Index %u State %u hr %lx\n", Index, State, hr);
+ OutputDebugStringW(Buffer);
+
+ if (FAILED(hr))
+ return hr;
+ }
+ return hr;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetState(
+ DWORD dwMilliSecsTimeout,
+ FILTER_STATE *State)
+{
+ *State = m_FilterState;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::SetSyncSource(
+ IReferenceClock *pClock)
+{
+ HRESULT hr;
+ IKsClock *pKsClock;
+ HANDLE hClock, hPin;
+ ULONG Index;
+ IPin * pin;
+ IKsObject * pObject;
+ KSPROPERTY Property;
+ ULONG BytesReturned;
+ PIN_DIRECTION PinDir;
+
+// Plug In Distributor: IKsClock
+ OutputDebugStringW(L"CKsProxy::SetSyncSource\n");
+
+ // FIXME
+ // need locks
+
+ if (pClock)
+ {
+ hr = pClock->QueryInterface(IID_IKsClock, (void**)&pKsClock);
+ if (FAILED(hr))
+ {
+ hr = m_ReferenceClock->QueryInterface(IID_IKsClock, (void**)&pKsClock);
+ if (FAILED(hr))
+ return hr;
+ }
+
+ // get clock handle
+ hClock = pKsClock->KsGetClockHandle();
+
+ // release IKsClock interface
+ pKsClock->Release();
+ m_hClock = hClock;
+ }
+ else
+ {
+ // no clock handle
+ m_hClock = NULL;
+ }
+
+
+ // distribute clock to all pins
+ for(Index = 0; Index < m_Pins.size(); Index++)
+ {
+ // get current pin
+ pin = m_Pins[Index];
+ if (!pin)
+ continue;
+
+ // get IKsObject interface
+ hr = pin->QueryInterface(IID_IKsObject, (void **)&pObject);
+ if (SUCCEEDED(hr))
+ {
+ // get pin handle
+ hPin = pObject->KsGetObjectHandle();
+ if (hPin != INVALID_HANDLE_VALUE && hPin)
+ {
+ // set clock
+ Property.Set = KSPROPSETID_Stream;
+ Property.Id = KSPROPERTY_STREAM_MASTERCLOCK;
+ Property.Flags = KSPROPERTY_TYPE_SET;
+
+ // set master clock
+ hr = KsSynchronousDeviceControl(hPin, IOCTL_KS_PROPERTY, (PVOID)&Property, sizeof(KSPROPERTY), (PVOID)&m_hClock, sizeof(HANDLE), &BytesReturned);
+
+ if (FAILED(hr))
+ {
+ if (hr != MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_SET_NOT_FOUND) &&
+ hr != MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, ERROR_NOT_FOUND))
+ {
+ // failed to set master clock
+ pObject->Release();
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CKsProxy::SetSyncSource KSPROPERTY_STREAM_MASTERCLOCK failed with %lx\n", hr);
+ OutputDebugStringW(Buffer);
+ return hr;
+ }
+ }
+ }
+ // release IKsObject
+ pObject->Release();
+ }
+
+ // now get the direction
+ hr = pin->QueryDirection(&PinDir);
+ if (SUCCEEDED(hr))
+ {
+ if (PinDir == PINDIR_OUTPUT)
+ {
+ // notify pin via
+ //CBaseStreamControl::SetSyncSource(pClock)
+ }
+ }
+ }
+
+ if (pClock)
+ {
+ pClock->AddRef();
+ }
+
+ if (m_ReferenceClock)
+ {
+ m_ReferenceClock->Release();
+ }
+
+ m_ReferenceClock = pClock;
+ OutputDebugStringW(L"CKsProxy::SetSyncSource done\n");
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::GetSyncSource(
+ IReferenceClock **pClock)
+{
+ OutputDebugStringW(L"CKsProxy::GetSyncSource\n");
+
+ if (!pClock)
+ return E_POINTER;
+
+ if (m_ReferenceClock)
+ m_ReferenceClock->AddRef();
+
+ *pClock = m_ReferenceClock;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::EnumPins(
+ IEnumPins **ppEnum)
+{
+ OutputDebugStringW(L"CKsProxy::EnumPins\n");
+ return CEnumPins_fnConstructor(m_Pins, IID_IEnumPins, (void**)ppEnum);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::FindPin(
+ LPCWSTR Id, IPin **ppPin)
+{
+ ULONG PinId;
+
+ OutputDebugStringW(L"CKsProxy::FindPin\n");
+
+ if (!ppPin)
+ return E_POINTER;
+
+ // convert to pin
+ int ret = swscanf(Id, L"%u", &PinId);
+
+ if (!ret || ret == EOF)
+ {
+ // invalid id
+ return VFW_E_NOT_FOUND;
+ }
+
+ if (PinId >= m_Pins.size() || m_Pins[PinId] == NULL)
+ {
+ // invalid id
+ return VFW_E_NOT_FOUND;
+ }
+
+ // found pin
+ *ppPin = m_Pins[PinId];
+ m_Pins[PinId]->AddRef();
+
+ return S_OK;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::QueryFilterInfo(
+ FILTER_INFO *pInfo)
+{
+ if (!pInfo)
+ return E_POINTER;
+
+ OutputDebugStringW(L"CKsProxy::QueryFilterInfo\n");
+
+ pInfo->achName[0] = L'\0';
+ pInfo->pGraph = m_pGraph;
+
+ if (m_pGraph)
+ m_pGraph->AddRef();
+
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::JoinFilterGraph(
+ IFilterGraph *pGraph,
+ LPCWSTR pName)
+{
+ OutputDebugStringW(L"CKsProxy::JoinFilterGraph\n");
+
+ if (pGraph)
+ {
+ // joining filter graph
+ m_pGraph = pGraph;
+ }
+ else
+ {
+ // leaving graph
+ m_pGraph = 0;
+ }
+
+ return S_OK;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::QueryVendorInfo(
+ LPWSTR *pVendorInfo)
+{
+ OutputDebugStringW(L"CKsProxy::QueryVendorInfo\n");
+ return StringFromCLSID(CLSID_Proxy, pVendorInfo);
+}
+
+//-------------------------------------------------------------------
+// IAMovieSetup interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Register()
+{
+ OutputDebugStringW(L"CKsProxy::Register : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CKsProxy::Unregister()
+{
+ OutputDebugStringW(L"CKsProxy::Unregister : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CKsProxy_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ WCHAR Buffer[100];
+ LPOLESTR pstr;
+ StringFromCLSID(riid, &pstr);
+ swprintf(Buffer, L"CKsProxy_Constructor pUnkOuter %p riid %s\n", pUnkOuter, pstr);
+ OutputDebugStringW(Buffer);
+
+ CKsProxy * handler = new CKsProxy();
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return S_OK;
+}
diff --git a/reactos/dll/directx/ksproxy/qualityforward.cpp b/reactos/dll/directx/ksproxy/qualityforward.cpp
new file mode 100644
index 00000000000..88459d8275d
--- /dev/null
+++ b/reactos/dll/directx/ksproxy/qualityforward.cpp
@@ -0,0 +1,132 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS WDM Streaming ActiveMovie Proxy
+ * FILE: dll/directx/ksproxy/clockforward.cpp
+ * PURPOSE: IKsClockForwarder interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+#ifndef _MSC_VER
+const GUID KSCATEGORY_QUALITY = {0x97EBAACB, 0x95BD, 0x11D0, {0xA3, 0xEA, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}};
+#endif
+
+#define IID_IKsQualityForwarder KSCATEGORY_QUALITY
+
+class CKsQualityForwarder : public IKsQualityForwarder
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IKsObject interface
+ HANDLE STDMETHODCALLTYPE KsGetObjectHandle();
+
+ // IKsQualityForwarder
+ VOID STDMETHODCALLTYPE KsFlushClient(IN IKsPin *Pin);
+
+ CKsQualityForwarder(HANDLE handle) : m_Ref(0), m_Handle(handle){}
+ virtual ~CKsQualityForwarder(){ if (m_Handle) CloseHandle(m_Handle);}
+
+protected:
+ LONG m_Ref;
+ HANDLE m_Handle;
+
+
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CKsQualityForwarder::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown) ||
+ IsEqualGUID(refiid, IID_IKsQualityForwarder))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IKsObject interface
+//
+
+HANDLE
+STDMETHODCALLTYPE
+CKsQualityForwarder::KsGetObjectHandle()
+{
+ return m_Handle;
+}
+
+//-------------------------------------------------------------------
+// IKsQualityForwarder interface
+//
+VOID
+STDMETHODCALLTYPE
+CKsQualityForwarder::KsFlushClient(
+ IN IKsPin *Pin)
+{
+ OutputDebugString("UNIMPLEMENTED\n");
+}
+
+HRESULT
+WINAPI
+CKsQualityForwarder_Constructor(
+ IUnknown * pUnkOuter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ HRESULT hr;
+ HANDLE handle;
+
+ OutputDebugStringW(L"CKsQualityForwarder_Constructor\n");
+
+ // open default clock
+ hr = KsOpenDefaultDevice(KSCATEGORY_QUALITY, GENERIC_READ | GENERIC_WRITE, &handle);
+
+ if (hr != NOERROR)
+ {
+ OutputDebugString("CKsClockForwarder_Constructor failed to open device\n");
+ return hr;
+ }
+
+ CKsQualityForwarder * quality = new CKsQualityForwarder(handle);
+
+ if (!quality)
+ {
+ // free clock handle
+ CloseHandle(handle);
+ return E_OUTOFMEMORY;
+ }
+
+ if (FAILED(quality->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete quality;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/ksuser/ksuser.c b/reactos/dll/directx/ksuser/ksuser.c
index 8d565231c70..8f62abf950d 100644
--- a/reactos/dll/directx/ksuser/ksuser.c
+++ b/reactos/dll/directx/ksuser/ksuser.c
@@ -92,7 +92,7 @@ KsiCreateObjectType( HANDLE hHandle,
*
*--*/
KSDDKAPI
-NTSTATUS
+DWORD
NTAPI
KsCreateAllocator(HANDLE ConnectionHandle,
PKSALLOCATOR_FRAMING AllocatorFraming,
@@ -130,7 +130,7 @@ KsCreateAllocator(HANDLE ConnectionHandle,
*
*--*/
KSDDKAPI
-NTSTATUS
+DWORD
NTAPI
KsCreateClock(HANDLE ConnectionHandle,
PKSCLOCK_CREATE ClockCreate,
@@ -225,7 +225,7 @@ KsCreatePin(HANDLE FilterHandle,
*
*--*/
KSDDKAPI
-NTSTATUS
+DWORD
NTAPI
KsCreateTopologyNode(HANDLE ParentHandle,
PKSNODE_CREATE NodeCreate,
diff --git a/reactos/dll/directx/ksuser/ksuser.h b/reactos/dll/directx/ksuser/ksuser.h
index 1d60b17c611..de44aab6d8b 100644
--- a/reactos/dll/directx/ksuser/ksuser.h
+++ b/reactos/dll/directx/ksuser/ksuser.h
@@ -1,5 +1,4 @@
-#ifndef KSUSER_H__
-#define KSUSER_H__
+#pragma once
#define _KSDDK_
@@ -15,5 +14,3 @@
#define ROUND_UP(n, align) \
ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
-
-#endif
diff --git a/reactos/dll/directx/msdmo/dmoreg.c b/reactos/dll/directx/msdmo/dmoreg.c
index ce4ee04f824..a3dc9304687 100644
--- a/reactos/dll/directx/msdmo/dmoreg.c
+++ b/reactos/dll/directx/msdmo/dmoreg.c
@@ -787,11 +787,11 @@ HRESULT read_types(HKEY root, LPCWSTR key, ULONG *supplied, ULONG requested, DMO
* DMOGetTypes (MSDMO.@)
*/
HRESULT WINAPI DMOGetTypes(REFCLSID clsidDMO,
- unsigned long ulInputTypesRequested,
- unsigned long* pulInputTypesSupplied,
+ ULONG ulInputTypesRequested,
+ ULONG* pulInputTypesSupplied,
DMO_PARTIAL_MEDIATYPE* pInputTypes,
- unsigned long ulOutputTypesRequested,
- unsigned long* pulOutputTypesSupplied,
+ ULONG ulOutputTypesRequested,
+ ULONG* pulOutputTypesSupplied,
DMO_PARTIAL_MEDIATYPE* pOutputTypes)
{
HKEY root,hkey;
@@ -815,7 +815,7 @@ HRESULT WINAPI DMOGetTypes(REFCLSID clsidDMO,
if (ulInputTypesRequested > 0)
{
- ret = read_types(hkey, szDMOInputType, (ULONG*)pulInputTypesSupplied, ulInputTypesRequested, pInputTypes );
+ ret = read_types(hkey, szDMOInputType, pulInputTypesSupplied, ulInputTypesRequested, pInputTypes );
}
else
*pulInputTypesSupplied = 0;
@@ -823,7 +823,7 @@ HRESULT WINAPI DMOGetTypes(REFCLSID clsidDMO,
if (ulOutputTypesRequested > 0)
{
HRESULT ret2;
- ret2 = read_types(hkey, szDMOOutputType, (ULONG*)pulOutputTypesSupplied, ulOutputTypesRequested, pOutputTypes );
+ ret2 = read_types(hkey, szDMOOutputType, pulOutputTypesSupplied, ulOutputTypesRequested, pOutputTypes );
if (ret == S_OK)
ret = ret2;
diff --git a/reactos/dll/directx/msdvbnp/classfactory.cpp b/reactos/dll/directx/msdvbnp/classfactory.cpp
new file mode 100644
index 00000000000..89b61c486fe
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/classfactory.cpp
@@ -0,0 +1,105 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/msdvbnp/classfactory.cpp
+ * PURPOSE: IClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+const GUID IID_IClassFactory = {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+
+class CClassFactory : public IClassFactory
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject);
+ HRESULT WINAPI LockServer(BOOL fLock);
+
+ CClassFactory(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, IID *riidInst) : m_Ref(1), m_lpfnCI(lpfnCI), m_IID(riidInst)
+ {};
+
+ virtual ~CClassFactory(){};
+
+protected:
+ LONG m_Ref;
+ LPFNCREATEINSTANCE m_lpfnCI;
+ IID * m_IID;
+};
+
+HRESULT
+WINAPI
+CClassFactory::QueryInterface(
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ *ppvObj = NULL;
+ if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))
+ {
+ *ppvObj = PVOID(this);
+ InterlockedIncrement(&m_Ref);
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::CreateInstance(
+ LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID *ppvObject)
+{
+ *ppvObject = NULL;
+
+ if ( m_IID == NULL || IsEqualCLSID(riid, *m_IID) || IsEqualCLSID(riid, IID_IUnknown))
+ {
+ return m_lpfnCI(pUnkOuter, riid, ppvObject);
+ }
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::LockServer(
+ BOOL fLock)
+{
+ return E_NOTIMPL;
+}
+
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst)
+{
+ CClassFactory* factory = new CClassFactory(lpfnCI, pcRefDll, riidInst);
+
+ if (!factory)
+ return NULL;
+
+ if (pcRefDll)
+ InterlockedIncrement(pcRefDll);
+
+ return (LPCLASSFACTORY)factory;
+}
diff --git a/reactos/dll/directx/msdvbnp/enum_mediatypes.cpp b/reactos/dll/directx/msdvbnp/enum_mediatypes.cpp
new file mode 100644
index 00000000000..6cd887f358c
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/enum_mediatypes.cpp
@@ -0,0 +1,189 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Network Provider for MPEG2 based networks
+ * FILE: dll/directx/msdvbnp/enum_mediatypes.cpp
+ * PURPOSE: IEnumMediaTypes interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CEnumMediaTypes : public IEnumMediaTypes
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT STDMETHODCALLTYPE Next(ULONG cMediaTypes, AM_MEDIA_TYPE **ppMediaTypes, ULONG *pcFetched);
+ HRESULT STDMETHODCALLTYPE Skip(ULONG cMediaTypes);
+ HRESULT STDMETHODCALLTYPE Reset();
+ HRESULT STDMETHODCALLTYPE Clone(IEnumMediaTypes **ppEnum);
+
+
+ CEnumMediaTypes(ULONG MediaTypeCount, AM_MEDIA_TYPE * MediaTypes) : m_Ref(0), m_MediaTypeCount(MediaTypeCount), m_MediaTypes(MediaTypes), m_Index(0){};
+ virtual ~CEnumMediaTypes(){};
+
+protected:
+ LONG m_Ref;
+ ULONG m_MediaTypeCount;
+ AM_MEDIA_TYPE * m_MediaTypes;
+ ULONG m_Index;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IEnumMediaTypes))
+ {
+ *Output = (IEnumMediaTypes*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CEnumMediaTypes::QueryInterface: NoInterface for %s\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IEnumMediaTypes
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::Next(
+ ULONG cMediaTypes,
+ AM_MEDIA_TYPE **ppMediaTypes,
+ ULONG *pcFetched)
+{
+ ULONG i = 0;
+ AM_MEDIA_TYPE * MediaType;
+
+ if (!ppMediaTypes)
+ return E_POINTER;
+
+ if (cMediaTypes > 1 && !pcFetched)
+ return E_INVALIDARG;
+
+ while(i < cMediaTypes)
+ {
+ if (m_Index + i >= m_MediaTypeCount)
+ break;
+
+ MediaType = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
+ if (!MediaType)
+ break;
+
+ CopyMemory(MediaType, &m_MediaTypes[m_Index + i], sizeof(AM_MEDIA_TYPE));
+ ppMediaTypes[i] = MediaType;
+ i++;
+ }
+
+ if (pcFetched)
+ {
+ *pcFetched = i;
+ }
+
+ m_Index += i;
+
+ if (i < cMediaTypes)
+ return S_FALSE;
+ else
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::Skip(
+ ULONG cMediaTypes)
+{
+ if (cMediaTypes + m_Index >= m_MediaTypeCount)
+ {
+ return S_FALSE;
+ }
+
+ m_Index += cMediaTypes;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::Reset()
+{
+ m_Index = 0;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumMediaTypes::Clone(
+ IEnumMediaTypes **ppEnum)
+{
+ OutputDebugStringW(L"CEnumMediaTypes::Clone : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CEnumMediaTypes_fnConstructor(
+ IUnknown *pUnknown,
+ ULONG MediaTypeCount,
+ AM_MEDIA_TYPE * MediaTypes,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CEnumMediaTypes * handler = new CEnumMediaTypes(MediaTypeCount, MediaTypes);
+
+#ifdef MSDVBNP_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CEnumMediaTypes_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!handler)
+ {
+ CoTaskMemFree(MediaTypes);
+ return E_OUTOFMEMORY;
+ }
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
+
diff --git a/reactos/dll/directx/msdvbnp/enumpins.cpp b/reactos/dll/directx/msdvbnp/enumpins.cpp
new file mode 100644
index 00000000000..567705907b7
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/enumpins.cpp
@@ -0,0 +1,177 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Network Provider for MPEG2 based networks
+ * FILE: dll/directx/msdvbnp/enumpins.cpp
+ * PURPOSE: IEnumPins interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CEnumPins : public IEnumPins
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+
+ HRESULT STDMETHODCALLTYPE Next(ULONG cPins, IPin **ppPins, ULONG *pcFetched);
+ HRESULT STDMETHODCALLTYPE Skip(ULONG cPins);
+ HRESULT STDMETHODCALLTYPE Reset();
+ HRESULT STDMETHODCALLTYPE Clone(IEnumPins **ppEnum);
+
+ CEnumPins(ULONG NumPins, IPin ** pins) : m_Ref(0), m_NumPins(NumPins), m_Pins(pins), m_Index(0){};
+ virtual ~CEnumPins(){};
+
+protected:
+ LONG m_Ref;
+ ULONG m_NumPins;
+ IPin ** m_Pins;
+ ULONG m_Index;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IEnumPins))
+ {
+ *Output = (IEnumPins*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CEnumPins::QueryInterface: NoInterface for %s\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::Next(
+ ULONG cPins,
+ IPin **ppPins,
+ ULONG *pcFetched)
+{
+ ULONG i = 0;
+
+ if (!ppPins)
+ return E_POINTER;
+
+ if (cPins > 1 && !pcFetched)
+ return E_INVALIDARG;
+
+ while(i < cPins)
+ {
+ if (m_Index + i >= m_NumPins)
+ break;
+
+ ppPins[i] = m_Pins[m_Index + i];
+ m_Pins[m_Index + i]->AddRef();
+
+ i++;
+ }
+
+ if (pcFetched)
+ {
+ *pcFetched = i;
+ }
+
+ m_Index += i;
+
+ if (i < cPins)
+ return S_FALSE;
+ else
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::Skip(
+ ULONG cPins)
+{
+ if (cPins + m_Index >= m_NumPins)
+ {
+ return S_FALSE;
+ }
+
+ m_Index += cPins;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::Reset()
+{
+ m_Index = 0;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumPins::Clone(
+ IEnumPins **ppEnum)
+{
+ OutputDebugStringW(L"CEnumPins::Clone : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CEnumPins_fnConstructor(
+ IUnknown *pUnknown,
+ ULONG NumPins,
+ IPin ** pins,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CEnumPins * handler = new CEnumPins(NumPins, pins);
+
+#ifdef MSDVBNP_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CEnumPins_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
\ No newline at end of file
diff --git a/reactos/dll/directx/msdvbnp/msdvbnp.cpp b/reactos/dll/directx/msdvbnp/msdvbnp.cpp
new file mode 100644
index 00000000000..037a67ef717
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/msdvbnp.cpp
@@ -0,0 +1,108 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Network Provider for MPEG2 based networks
+ * FILE: dll/directx/msdvbnp/msdvbnp.cpp
+ * PURPOSE: COM Initialization
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
+
+static INTERFACE_TABLE InterfaceTable[] =
+{
+ {&CLSID_DVBTNetworkProvider, CNetworkProvider_fnConstructor},
+ {NULL, NULL}
+};
+
+extern "C"
+BOOL
+WINAPI
+DllMain(
+ HINSTANCE hInstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ CoInitialize(NULL);
+
+#ifdef MSDVBNP_TRACE
+ OutputDebugStringW(L"MSDVBNP::DllMain()\n");
+#endif
+
+ DisableThreadLibraryCalls(hInstDLL);
+ break;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllUnregisterServer(void)
+{
+ return S_OK;
+}
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllRegisterServer(void)
+{
+ return S_OK;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllGetClassObject(
+ REFCLSID rclsid,
+ REFIID riid,
+ LPVOID *ppv)
+{
+ UINT i;
+ HRESULT hres = E_OUTOFMEMORY;
+ IClassFactory * pcf = NULL;
+
+ if (!ppv)
+ return E_INVALIDARG;
+
+ *ppv = NULL;
+
+ for (i = 0; InterfaceTable[i].riid; i++)
+ {
+ if (IsEqualIID(*InterfaceTable[i].riid, rclsid))
+ {
+ pcf = CClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL);
+ break;
+ }
+ }
+
+ if (!pcf)
+ {
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
+ hres = pcf->QueryInterface(riid, ppv);
+ pcf->Release();
+
+ return hres;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllCanUnloadNow(void)
+{
+ return S_OK;
+}
diff --git a/reactos/dll/directx/msdvbnp/msdvbnp.rbuild b/reactos/dll/directx/msdvbnp/msdvbnp.rbuild
new file mode 100644
index 00000000000..6213d7d8f37
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/msdvbnp.rbuild
@@ -0,0 +1,31 @@
+
+
+
+
+
+ .
+ ntdll
+ kernel32
+ advapi32
+ ole32
+ advapi32
+ msvcrt
+ strmiids
+
+ -fno-exceptions
+ -fno-rtti
+
+
+ /GR-
+
+
+ classfactory.cpp
+ enum_mediatypes.cpp
+ enumpins.cpp
+ msdvbnp.cpp
+ msdvbnp.rc
+ networkprovider.cpp
+ pin.cpp
+ scanningtuner.cpp
+
+
diff --git a/reactos/dll/directx/msdvbnp/msdvbnp.rc b/reactos/dll/directx/msdvbnp/msdvbnp.rc
new file mode 100644
index 00000000000..7df396e8fdf
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/msdvbnp.rc
@@ -0,0 +1,12 @@
+#include
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Network Provider for MPEG2 based networks\0"
+#define REACTOS_STR_INTERNAL_NAME "MSDvBNP.ax\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "MSDvBNP.ax\0"
+#define REACTOS_STR_PRODUCT_VERSION "6.5.2600.3264\0"
+#define REACTOS_STR_FILE_VERSION "6.5.2600.3264\0"
+
+#include
diff --git a/reactos/dll/directx/msdvbnp/msdvbnp.spec b/reactos/dll/directx/msdvbnp/msdvbnp.spec
new file mode 100644
index 00000000000..5baed04ed66
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/msdvbnp.spec
@@ -0,0 +1,4 @@
+@ stdcall DllCanUnloadNow()
+@ stdcall DllGetClassObject(ptr ptr ptr)
+@ stdcall DllRegisterServer()
+@ stdcall DllUnregisterServer()
diff --git a/reactos/dll/directx/msdvbnp/networkprovider.cpp b/reactos/dll/directx/msdvbnp/networkprovider.cpp
new file mode 100644
index 00000000000..c69c2336e48
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/networkprovider.cpp
@@ -0,0 +1,378 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Network Provider for MPEG2 based networks
+ * FILE: dll/directx/msdvbnp/networkprovider.cpp
+ * PURPOSE: IBDA_NetworkProvider interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CNetworkProvider : public IBaseFilter,
+ public IAMovieSetup,
+ public IBDA_NetworkProvider
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IBaseFilter methods
+ HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID);
+ HRESULT STDMETHODCALLTYPE Stop( void);
+ HRESULT STDMETHODCALLTYPE Pause( void);
+ HRESULT STDMETHODCALLTYPE Run(REFERENCE_TIME tStart);
+ HRESULT STDMETHODCALLTYPE GetState(DWORD dwMilliSecsTimeout, FILTER_STATE *State);
+ HRESULT STDMETHODCALLTYPE SetSyncSource(IReferenceClock *pClock);
+ HRESULT STDMETHODCALLTYPE GetSyncSource(IReferenceClock **pClock);
+ HRESULT STDMETHODCALLTYPE EnumPins(IEnumPins **ppEnum);
+ HRESULT STDMETHODCALLTYPE FindPin(LPCWSTR Id, IPin **ppPin);
+ HRESULT STDMETHODCALLTYPE QueryFilterInfo(FILTER_INFO *pInfo);
+ HRESULT STDMETHODCALLTYPE JoinFilterGraph(IFilterGraph *pGraph, LPCWSTR pName);
+ HRESULT STDMETHODCALLTYPE QueryVendorInfo(LPWSTR *pVendorInfo);
+
+ //IAMovieSetup methods
+ HRESULT STDMETHODCALLTYPE Register( void);
+ HRESULT STDMETHODCALLTYPE Unregister( void);
+
+ //IBDA_NetworkProvider methods
+ HRESULT STDMETHODCALLTYPE PutSignalSource(ULONG ulSignalSource);
+ HRESULT STDMETHODCALLTYPE GetSignalSource(ULONG *pulSignalSource);
+ HRESULT STDMETHODCALLTYPE GetNetworkType(GUID *pguidNetworkType);
+ HRESULT STDMETHODCALLTYPE PutTuningSpace(REFGUID guidTuningSpace);
+ HRESULT STDMETHODCALLTYPE GetTuningSpace(GUID *pguidTuingSpace);
+ HRESULT STDMETHODCALLTYPE RegisterDeviceFilter(IUnknown *pUnkFilterControl, ULONG *ppvRegisitrationContext);
+ HRESULT STDMETHODCALLTYPE UnRegisterDeviceFilter(ULONG pvRegistrationContext);
+
+ CNetworkProvider() : m_Ref(0), m_pGraph(0), m_ReferenceClock(0), m_FilterState(State_Stopped) {m_Pins[0] = 0;};
+ virtual ~CNetworkProvider(){};
+
+protected:
+ LONG m_Ref;
+ IFilterGraph *m_pGraph;
+ IReferenceClock * m_ReferenceClock;
+ FILTER_STATE m_FilterState;
+ IPin * m_Pins[1];
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ *Output = NULL;
+
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IBaseFilter))
+ {
+ *Output = (IBaseFilter*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_ITuner) ||
+ IsEqualGUID(refiid, IID_IScanningTuner))
+ {
+ // construct scanning tuner
+ return CScanningTunner_fnConstructor(NULL, refiid, Output);
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CNetworkProvider::QueryInterface: NoInterface for %s !!!\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IBaseFilter interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::GetClassID(
+ CLSID *pClassID)
+{
+ OutputDebugStringW(L"CNetworkProvider::GetClassID : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::Stop()
+{
+ OutputDebugStringW(L"CNetworkProvider::Stop : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::Pause()
+{
+ OutputDebugStringW(L"CNetworkProvider::Pause : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::Run(
+ REFERENCE_TIME tStart)
+{
+ OutputDebugStringW(L"CNetworkProvider::Run : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::GetState(
+ DWORD dwMilliSecsTimeout,
+ FILTER_STATE *State)
+{
+ *State = m_FilterState;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::SetSyncSource(
+ IReferenceClock *pClock)
+{
+ if (pClock)
+ {
+ pClock->AddRef();
+
+ }
+
+ if (m_ReferenceClock)
+ {
+ m_ReferenceClock->Release();
+ }
+
+ m_ReferenceClock = pClock;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::GetSyncSource(
+ IReferenceClock **pClock)
+{
+ if (!pClock)
+ return E_POINTER;
+
+ if (m_ReferenceClock)
+ m_ReferenceClock->AddRef();
+
+ *pClock = m_ReferenceClock;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::EnumPins(
+ IEnumPins **ppEnum)
+{
+ if (m_Pins[0] == 0)
+ {
+ HRESULT hr = CPin_fnConstructor(NULL, (IBaseFilter*)this, IID_IUnknown, (void**)&m_Pins[0]);
+ if (FAILED(hr))
+ return hr;
+ }
+
+ return CEnumPins_fnConstructor(NULL, 1, m_Pins, IID_IEnumPins, (void**)ppEnum);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::FindPin(
+ LPCWSTR Id, IPin **ppPin)
+{
+ OutputDebugStringW(L"CNetworkProvider::FindPin : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::QueryFilterInfo(
+ FILTER_INFO *pInfo)
+{
+ if (!pInfo)
+ return E_POINTER;
+
+ pInfo->achName[0] = L'\0';
+ pInfo->pGraph = m_pGraph;
+
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::JoinFilterGraph(
+ IFilterGraph *pGraph,
+ LPCWSTR pName)
+{
+ if (pGraph)
+ {
+ // joining filter graph
+ m_pGraph = pGraph;
+ }
+ else
+ {
+ // leaving graph
+ m_pGraph = 0;
+ }
+
+ OutputDebugStringW(L"CNetworkProvider::JoinFilterGraph\n");
+ return S_OK;
+}
+
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::QueryVendorInfo(
+ LPWSTR *pVendorInfo)
+{
+ OutputDebugStringW(L"CNetworkProvider::QueryVendorInfo : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IAMovieSetup interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::Register()
+{
+ OutputDebugStringW(L"CNetworkProvider::Register : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::Unregister()
+{
+ OutputDebugStringW(L"CNetworkProvider::Unregister : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IBDA_NetworkProvider interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::PutSignalSource(
+ ULONG ulSignalSource)
+{
+ OutputDebugStringW(L"CNetworkProvider::PutSignalSource : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::GetSignalSource(
+ ULONG *pulSignalSource)
+{
+ OutputDebugStringW(L"CNetworkProvider::GetSignalSource : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::GetNetworkType(
+ GUID *pguidNetworkType)
+{
+ OutputDebugStringW(L"CNetworkProvider::GetNetworkType : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::PutTuningSpace(
+ REFGUID guidTuningSpace)
+{
+ OutputDebugStringW(L"CNetworkProvider::PutTuningSpace : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::GetTuningSpace(
+ GUID *pguidTuingSpace)
+{
+ OutputDebugStringW(L"CNetworkProvider::GetTuningSpace : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::RegisterDeviceFilter(
+ IUnknown *pUnkFilterControl,
+ ULONG *ppvRegisitrationContext)
+{
+ OutputDebugStringW(L"CNetworkProvider::RegisterDeviceFilter : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CNetworkProvider::UnRegisterDeviceFilter(ULONG pvRegistrationContext)
+{
+ OutputDebugStringW(L"CNetworkProvider::UnRegisterDeviceFilter : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CNetworkProvider_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CNetworkProvider * handler = new CNetworkProvider();
+
+#ifdef MSDVBNP_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CNetworkProvider_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/msdvbnp/pin.cpp b/reactos/dll/directx/msdvbnp/pin.cpp
new file mode 100644
index 00000000000..9662f809133
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/pin.cpp
@@ -0,0 +1,262 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Network Provider for MPEG2 based networks
+ * FILE: dll/directx/msdvbnp/pin.cpp
+ * PURPOSE: IPin interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID KSDATAFORMAT_TYPE_BDA_ANTENNA = {0x71985f41, 0x1ca1, 0x11d3, {0x9c, 0xc8, 0x0, 0xc0, 0x4f, 0x79, 0x71, 0xe0}};
+const GUID GUID_NULL = {0x00000000L, 0x0000, 0x0000, {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
+
+class CPin : public IPin
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ //IPin methods
+ HRESULT STDMETHODCALLTYPE Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE Disconnect();
+ HRESULT STDMETHODCALLTYPE ConnectedTo(IPin **pPin);
+ HRESULT STDMETHODCALLTYPE ConnectionMediaType(AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE QueryPinInfo(PIN_INFO *pInfo);
+ HRESULT STDMETHODCALLTYPE QueryDirection(PIN_DIRECTION *pPinDir);
+ HRESULT STDMETHODCALLTYPE QueryId(LPWSTR *Id);
+ HRESULT STDMETHODCALLTYPE QueryAccept(const AM_MEDIA_TYPE *pmt);
+ HRESULT STDMETHODCALLTYPE EnumMediaTypes(IEnumMediaTypes **ppEnum);
+ HRESULT STDMETHODCALLTYPE QueryInternalConnections(IPin **apPin, ULONG *nPin);
+ HRESULT STDMETHODCALLTYPE EndOfStream();
+ HRESULT STDMETHODCALLTYPE BeginFlush();
+ HRESULT STDMETHODCALLTYPE EndFlush();
+ HRESULT STDMETHODCALLTYPE NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate);
+
+ CPin(IBaseFilter * ParentFilter) : m_Ref(0), m_ParentFilter(ParentFilter){};
+ virtual ~CPin(){};
+
+ static LPCWSTR PIN_ID;
+
+protected:
+ LONG m_Ref;
+ IBaseFilter * m_ParentFilter;
+};
+
+
+LPCWSTR CPin::PIN_ID = L"Antenna Out";
+
+HRESULT
+STDMETHODCALLTYPE
+CPin::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_IPin))
+ {
+ *Output = (IPin*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CPin::QueryInterface: NoInterface for %s\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IPin interface
+//
+HRESULT
+STDMETHODCALLTYPE
+CPin::Connect(IPin *pReceivePin, const AM_MEDIA_TYPE *pmt)
+{
+ OutputDebugStringW(L"CPin::Connect called\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CPin::ReceiveConnection(IPin *pConnector, const AM_MEDIA_TYPE *pmt)
+{
+ OutputDebugStringW(L"CPin::ReceiveConnection called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::Disconnect( void)
+{
+ OutputDebugStringW(L"CPin::Disconnect called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::ConnectedTo(IPin **pPin)
+{
+ OutputDebugStringW(L"CPin::ConnectedTo called\n");
+ return VFW_E_NOT_CONNECTED;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::ConnectionMediaType(AM_MEDIA_TYPE *pmt)
+{
+ OutputDebugStringW(L"CPin::ConnectionMediaType called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::QueryPinInfo(PIN_INFO *pInfo)
+{
+ wcscpy(pInfo->achName, PIN_ID);
+ pInfo->dir = PINDIR_OUTPUT;
+ pInfo->pFilter = m_ParentFilter;
+ m_ParentFilter->AddRef();
+
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::QueryDirection(PIN_DIRECTION *pPinDir)
+{
+ if (pPinDir)
+ {
+ *pPinDir = PINDIR_OUTPUT;
+ return S_OK;
+ }
+
+ return E_POINTER;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::QueryId(LPWSTR *Id)
+{
+ *Id = (LPWSTR)CoTaskMemAlloc(sizeof(PIN_ID));
+ if (!*Id)
+ return E_OUTOFMEMORY;
+
+ wcscpy(*Id, PIN_ID);
+ return S_OK;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::QueryAccept(const AM_MEDIA_TYPE *pmt)
+{
+ OutputDebugStringW(L"CPin::QueryAccept called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::EnumMediaTypes(IEnumMediaTypes **ppEnum)
+{
+ AM_MEDIA_TYPE *MediaType = (AM_MEDIA_TYPE*)CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
+
+ if (!MediaType)
+ {
+ return E_OUTOFMEMORY;
+ }
+
+ MediaType->majortype = KSDATAFORMAT_TYPE_BDA_ANTENNA;
+ MediaType->subtype = MEDIASUBTYPE_None;
+ MediaType->formattype = FORMAT_None;
+ MediaType->bFixedSizeSamples = true;
+ MediaType->bTemporalCompression = false;
+ MediaType->lSampleSize = sizeof(CHAR);
+ MediaType->pUnk = NULL;
+ MediaType->cbFormat = 0;
+ MediaType->pbFormat = NULL;
+
+ return CEnumMediaTypes_fnConstructor(NULL, 1, MediaType, IID_IEnumMediaTypes, (void**)ppEnum);
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::QueryInternalConnections(IPin **apPin, ULONG *nPin)
+{
+ OutputDebugStringW(L"CPin::QueryInternalConnections called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::EndOfStream( void)
+{
+ OutputDebugStringW(L"CPin::EndOfStream called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::BeginFlush( void)
+{
+ OutputDebugStringW(L"CPin::BeginFlush called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::EndFlush( void)
+{
+ OutputDebugStringW(L"CPin::EndFlush called\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CPin::NewSegment(REFERENCE_TIME tStart, REFERENCE_TIME tStop, double dRate)
+{
+ OutputDebugStringW(L"CPin::NewSegment called\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CPin_fnConstructor(
+ IUnknown *pUnknown,
+ IBaseFilter * ParentFilter,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CPin * handler = new CPin(ParentFilter);
+
+#ifdef MSDVBNP_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CPin_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
\ No newline at end of file
diff --git a/reactos/dll/directx/msdvbnp/precomp.h b/reactos/dll/directx/msdvbnp/precomp.h
new file mode 100644
index 00000000000..d20b9ac9d81
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/precomp.h
@@ -0,0 +1,82 @@
+#ifndef PRECOMP_H__
+#define PRECOMP_H__
+
+#define MSDVBNP_TRACE
+#define BUILDING_KS
+#define _KSDDK_
+#include
+//#include
+#include
+#define __STREAMS__
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject);
+
+typedef struct
+{
+ const GUID* riid;
+ LPFNCREATEINSTANCE lpfnCI;
+} INTERFACE_TABLE;
+
+/* classfactory.cpp */
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst);
+
+/* networkprovider.cpp */
+HRESULT
+WINAPI
+CNetworkProvider_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* scanningtunner.cpp */
+HRESULT
+WINAPI
+CScanningTunner_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* enumpins.cpp */
+HRESULT
+WINAPI
+CEnumPins_fnConstructor(
+ IUnknown *pUnknown,
+ ULONG NumPins,
+ IPin ** pins,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* pin.cpp */
+HRESULT
+WINAPI
+CPin_fnConstructor(
+ IUnknown *pUnknown,
+ IBaseFilter * ParentFilter,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* enum_mediatypes.cpp */
+HRESULT
+WINAPI
+CEnumMediaTypes_fnConstructor(
+ IUnknown *pUnknown,
+ ULONG MediaTypeCount,
+ AM_MEDIA_TYPE * MediaTypes,
+ REFIID riid,
+ LPVOID * ppv);
+
+#endif
diff --git a/reactos/dll/directx/msdvbnp/scanningtuner.cpp b/reactos/dll/directx/msdvbnp/scanningtuner.cpp
new file mode 100644
index 00000000000..0c9b7782d2b
--- /dev/null
+++ b/reactos/dll/directx/msdvbnp/scanningtuner.cpp
@@ -0,0 +1,264 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Network Provider for MPEG2 based networks
+ * FILE: dll/directx/msdvbnp/networkprovider.cpp
+ * PURPOSE: IScanningTunner interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CScanningTunner : public IScanningTuner
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ //ITuner methods
+ HRESULT STDMETHODCALLTYPE get_TuningSpace(ITuningSpace **TuningSpace);
+ HRESULT STDMETHODCALLTYPE put_TuningSpace(ITuningSpace *TuningSpace);
+ HRESULT STDMETHODCALLTYPE EnumTuningSpaces(IEnumTuningSpaces **ppEnum);
+ HRESULT STDMETHODCALLTYPE get_TuneRequest(ITuneRequest **TuneRequest);
+ HRESULT STDMETHODCALLTYPE put_TuneRequest(ITuneRequest *TuneRequest);
+ HRESULT STDMETHODCALLTYPE Validate(ITuneRequest *TuneRequest);
+ HRESULT STDMETHODCALLTYPE get_PreferredComponentTypes(IComponentTypes **ComponentTypes);
+ HRESULT STDMETHODCALLTYPE put_PreferredComponentTypes(IComponentTypes *ComponentTypes);
+ HRESULT STDMETHODCALLTYPE get_SignalStrength(long *Strength);
+ HRESULT STDMETHODCALLTYPE TriggerSignalEvents(long Interval);
+
+ //IScanningTuner methods
+ HRESULT STDMETHODCALLTYPE SeekUp();
+ HRESULT STDMETHODCALLTYPE SeekDown();
+ HRESULT STDMETHODCALLTYPE ScanUp(long MillisecondsPause);
+ HRESULT STDMETHODCALLTYPE ScanDown(long MillisecondsPause);
+ HRESULT STDMETHODCALLTYPE AutoProgram();
+
+ CScanningTunner() : m_Ref(0), m_TuningSpace(0){};
+ virtual ~CScanningTunner(){};
+
+protected:
+ LONG m_Ref;
+ ITuningSpace * m_TuningSpace;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+ if (IsEqualGUID(refiid, IID_ITuner))
+ {
+ *Output = (ITuner*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IScanningTuner))
+ {
+ *Output = (IScanningTuner*)(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CScanningTunner::QueryInterface: NoInterface for %s\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+//ITuner
+//
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::get_TuningSpace(
+ ITuningSpace **TuningSpace)
+{
+ OutputDebugStringW(L"CScanningTunner::get_TuningSpace\n");
+
+ *TuningSpace = m_TuningSpace;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::put_TuningSpace(
+ ITuningSpace *TuningSpace)
+{
+ OutputDebugStringW(L"CScanningTunner::put_TuningSpace\n");
+ m_TuningSpace = TuningSpace;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::EnumTuningSpaces(
+ IEnumTuningSpaces **ppEnum)
+{
+ OutputDebugStringW(L"CScanningTunner::EnumTuningSpaces : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::get_TuneRequest(
+ ITuneRequest **TuneRequest)
+{
+ OutputDebugStringW(L"CScanningTunner::get_TuneRequest : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::put_TuneRequest(
+ ITuneRequest *TuneRequest)
+{
+ OutputDebugStringW(L"CScanningTunner::put_TuneRequest : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::Validate(
+ ITuneRequest *TuneRequest)
+{
+ OutputDebugStringW(L"CScanningTunner::Validate : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::get_PreferredComponentTypes(
+ IComponentTypes **ComponentTypes)
+{
+ OutputDebugStringW(L"CScanningTunner::get_PreferredComponentTypes : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::put_PreferredComponentTypes(
+ IComponentTypes *ComponentTypes)
+{
+ OutputDebugStringW(L"CScanningTunner::put_PreferredComponentTypes : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::get_SignalStrength(
+ long *Strength)
+{
+ OutputDebugStringW(L"CScanningTunner::get_SignalStrength : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::TriggerSignalEvents(
+ long Interval)
+{
+ OutputDebugStringW(L"CScanningTunner::TriggerSignalEvents : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+//IScanningTuner
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::SeekUp()
+{
+ OutputDebugStringW(L"CScanningTunner::SeekUp : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::SeekDown()
+{
+ OutputDebugStringW(L"CScanningTunner::SeekDown : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::ScanUp(
+ long MillisecondsPause)
+{
+ OutputDebugStringW(L"CScanningTunner::ScanUp : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::ScanDown(
+ long MillisecondsPause)
+{
+ OutputDebugStringW(L"CScanningTunner::ScanDown : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CScanningTunner::AutoProgram()
+{
+ OutputDebugStringW(L"CScanningTunner::AutoProgram : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CScanningTunner_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ CScanningTunner * handler = new CScanningTunner();
+
+#ifdef MSDVBNP_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CScanningTunner_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!handler)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(handler->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete handler;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
\ No newline at end of file
diff --git a/reactos/dll/directx/msvidctl/classfactory.cpp b/reactos/dll/directx/msvidctl/classfactory.cpp
new file mode 100644
index 00000000000..8af2a69546f
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/classfactory.cpp
@@ -0,0 +1,106 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/msvidctl/classfactory.cpp
+ * PURPOSE: ClassFactory interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID IID_IUnknown = {0x00000000, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+const GUID IID_IClassFactory = {0x00000001, 0x0000, 0x0000, {0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}};
+
+class CClassFactory : public IClassFactory
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ HRESULT WINAPI CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject);
+ HRESULT WINAPI LockServer(BOOL fLock);
+
+ CClassFactory(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, IID *riidInst) : m_Ref(1), m_lpfnCI(lpfnCI), m_IID(riidInst)
+ {};
+
+ virtual ~CClassFactory(){};
+
+protected:
+ LONG m_Ref;
+ LPFNCREATEINSTANCE m_lpfnCI;
+ IID * m_IID;
+};
+
+HRESULT
+WINAPI
+CClassFactory::QueryInterface(
+ REFIID riid,
+ LPVOID *ppvObj)
+{
+ *ppvObj = NULL;
+ if(IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, IID_IClassFactory))
+ {
+ *ppvObj = PVOID(this);
+ InterlockedIncrement(&m_Ref);
+ return S_OK;
+ }
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::CreateInstance(
+ LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID *ppvObject)
+{
+ *ppvObject = NULL;
+
+ if ( m_IID == NULL || IsEqualCLSID(riid, *m_IID) || IsEqualCLSID(riid, IID_IUnknown))
+ {
+ return m_lpfnCI(pUnkOuter, riid, ppvObject);
+ }
+
+ return E_NOINTERFACE;
+}
+
+HRESULT
+WINAPI
+CClassFactory::LockServer(
+ BOOL fLock)
+{
+ return E_NOTIMPL;
+}
+
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst)
+{
+ CClassFactory* factory = new CClassFactory(lpfnCI, pcRefDll, riidInst);
+
+ if (!factory)
+ return NULL;
+
+ if (pcRefDll)
+ InterlockedIncrement(pcRefDll);
+
+ return (LPCLASSFACTORY)factory;
+}
+
diff --git a/reactos/dll/directx/msvidctl/enumtuningspaces.cpp b/reactos/dll/directx/msvidctl/enumtuningspaces.cpp
new file mode 100644
index 00000000000..22d3e31bd47
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/enumtuningspaces.cpp
@@ -0,0 +1,142 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/msvidctl/tuningspace.cpp
+ * PURPOSE: ITuningSpace interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CEnumTuningSpaces : public IEnumTuningSpaces
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ //delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IEnumTuningSpaces methods
+ HRESULT STDMETHODCALLTYPE Next(ULONG celt, ITuningSpace **rgelt, ULONG *pceltFetched);
+ HRESULT STDMETHODCALLTYPE Skip(ULONG celt);
+ HRESULT STDMETHODCALLTYPE Reset();
+ HRESULT STDMETHODCALLTYPE Clone(IEnumTuningSpaces **ppEnum);
+
+ CEnumTuningSpaces() : m_Ref(0){};
+
+ virtual ~CEnumTuningSpaces(){};
+
+protected:
+ LONG m_Ref;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumTuningSpaces::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IEnumTuningSpaces))
+ {
+ *Output = (IEnumTuningSpaces*)this;
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CEnumTuningSpaces::QueryInterface: NoInterface for %s\n", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IEnumTuningSpaces
+//
+HRESULT
+STDMETHODCALLTYPE
+CEnumTuningSpaces::Next(ULONG celt, ITuningSpace **rgelt, ULONG *pceltFetched)
+{
+ OutputDebugStringW(L"CEnumTuningSpaces::Next : stub\n");
+ return CTuningSpace_fnConstructor(NULL, IID_ITuningSpace, (void**)rgelt);
+
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumTuningSpaces::Skip(ULONG celt)
+{
+ OutputDebugStringW(L"CEnumTuningSpaces::Skip : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumTuningSpaces::Reset()
+{
+ OutputDebugStringW(L"CEnumTuningSpaces::Reset : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CEnumTuningSpaces::Clone(IEnumTuningSpaces **ppEnum)
+{
+ OutputDebugStringW(L"CEnumTuningSpaces::Clone : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CEnumTuningSpaces_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // construct device control
+ CEnumTuningSpaces * tuningspaces = new CEnumTuningSpaces();
+
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CEnumTuningSpaces_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!tuningspaces)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(tuningspaces->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete tuningspaces;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
+
diff --git a/reactos/dll/directx/msvidctl/msvidctl.cpp b/reactos/dll/directx/msvidctl/msvidctl.cpp
new file mode 100644
index 00000000000..b086e59d580
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/msvidctl.cpp
@@ -0,0 +1,106 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS DVB
+ * FILE: dll/directx/msvidctl/msvidctl.cpp
+ * PURPOSE: ReactOS DVB Initialization
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+
+#include "precomp.h"
+
+static INTERFACE_TABLE InterfaceTable[] =
+{
+ {&CLSID_SystemTuningSpaces, CTuningSpaceContainer_fnConstructor},
+ {NULL, NULL}
+};
+
+extern "C"
+BOOL
+WINAPI
+DllMain(
+ HINSTANCE hInstDLL,
+ DWORD fdwReason,
+ LPVOID lpvReserved)
+{
+ switch (fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ CoInitialize(NULL);
+
+#ifdef MSDVBNP_TRACE
+ OutputDebugStringW(L"MSVIDCTL::DllMain()\n");
+#endif
+
+ DisableThreadLibraryCalls(hInstDLL);
+ break;
+ default:
+ break;
+ }
+
+ return TRUE;
+}
+
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllUnregisterServer(void)
+{
+ return S_OK;
+}
+
+extern "C"
+KSDDKAPI
+HRESULT
+WINAPI
+DllRegisterServer(void)
+{
+ return S_OK;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllGetClassObject(
+ REFCLSID rclsid,
+ REFIID riid,
+ LPVOID *ppv)
+{
+ UINT i;
+ HRESULT hres = E_OUTOFMEMORY;
+ IClassFactory * pcf = NULL;
+
+ if (!ppv)
+ return E_INVALIDARG;
+
+ *ppv = NULL;
+
+ for (i = 0; InterfaceTable[i].riid; i++)
+ {
+ if (IsEqualIID(*InterfaceTable[i].riid, rclsid))
+ {
+ pcf = CClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL);
+ break;
+ }
+ }
+
+ if (!pcf)
+ {
+ return CLASS_E_CLASSNOTAVAILABLE;
+ }
+
+ hres = pcf->QueryInterface(riid, ppv);
+ pcf->Release();
+
+ return hres;
+}
+
+KSDDKAPI
+HRESULT
+WINAPI
+DllCanUnloadNow(void)
+{
+ return S_OK;
+}
diff --git a/reactos/dll/directx/msvidctl/msvidctl.rbuild b/reactos/dll/directx/msvidctl/msvidctl.rbuild
new file mode 100644
index 00000000000..a3da3fcbe09
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/msvidctl.rbuild
@@ -0,0 +1,30 @@
+
+
+
+
+
+ .
+ ntdll
+ kernel32
+ advapi32
+ ole32
+ advapi32
+ msvcrt
+ strmiids
+
+ -fno-exceptions
+ -fno-rtti
+
+
+ /GR-
+
+
+ classfactory.cpp
+ enumtuningspaces.cpp
+ msvidctl.cpp
+ msvidctl.rc
+ tunerequest.cpp
+ tuningspace.cpp
+ tuningspace_container.cpp
+
+
diff --git a/reactos/dll/directx/msvidctl/msvidctl.rc b/reactos/dll/directx/msvidctl/msvidctl.rc
new file mode 100644
index 00000000000..43187901fe4
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/msvidctl.rc
@@ -0,0 +1,12 @@
+#include
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "ReactOS ActiveX Control for Streaming Video\0"
+#define REACTOS_STR_INTERNAL_NAME "MSVidCtl\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "MSVidCtl\0"
+#define REACTOS_STR_PRODUCT_VERSION "6.05.2600.3264\0"
+#define REACTOS_STR_FILE_VERSION "6.05.2600.3264\0"
+
+#include
diff --git a/reactos/dll/directx/msvidctl/msvidctl.spec b/reactos/dll/directx/msvidctl/msvidctl.spec
new file mode 100644
index 00000000000..5baed04ed66
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/msvidctl.spec
@@ -0,0 +1,4 @@
+@ stdcall DllCanUnloadNow()
+@ stdcall DllGetClassObject(ptr ptr ptr)
+@ stdcall DllRegisterServer()
+@ stdcall DllUnregisterServer()
diff --git a/reactos/dll/directx/msvidctl/precomp.h b/reactos/dll/directx/msvidctl/precomp.h
new file mode 100644
index 00000000000..a5b86272e2d
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/precomp.h
@@ -0,0 +1,72 @@
+#ifndef PRECOMP_H__
+#define PRECOMP_H__
+
+#define MSVIDCTL_TRACE
+#define BUILDING_KS
+#define _KSDDK_
+#include
+//#include
+#include
+#define __STREAMS__
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject);
+
+typedef struct
+{
+ const GUID* riid;
+ LPFNCREATEINSTANCE lpfnCI;
+} INTERFACE_TABLE;
+
+/* classfactory.cpp */
+IClassFactory *
+CClassFactory_fnConstructor(
+ LPFNCREATEINSTANCE lpfnCI,
+ PLONG pcRefDll,
+ IID * riidInst);
+
+/* tuningspace_container.cpp */
+HRESULT
+WINAPI
+CTuningSpaceContainer_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* tuningspace.cpp */
+HRESULT
+WINAPI
+CTuningSpace_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* tunerequest.cpp */
+HRESULT
+WINAPI
+CTuneRequest_fnConstructor(
+ IUnknown *pUnknown,
+ ITuningSpace * TuningSpace,
+ REFIID riid,
+ LPVOID * ppv);
+
+/* enumtuningspaces.cpp */
+HRESULT
+WINAPI
+CEnumTuningSpaces_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv);
+
+
+
+#endif
diff --git a/reactos/dll/directx/msvidctl/tunerequest.cpp b/reactos/dll/directx/msvidctl/tunerequest.cpp
new file mode 100644
index 00000000000..3bee7cfc194
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/tunerequest.cpp
@@ -0,0 +1,331 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/msvidctl/tuningspace.cpp
+ * PURPOSE: ITuningRequest interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+class CTuneRequest : public IDVBTuneRequest
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ OutputDebugStringW(L"CTuneRequest::Release : delete\n");
+
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CTuneRequest::Release : m_TuningSpace %p delete\n", m_TuningSpace);
+ OutputDebugStringW(Buffer);
+
+
+ m_TuningSpace->Release();
+ //delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ //IDispatch methods
+ HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
+ HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
+ HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
+ HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
+
+ //ITuneRequest methods
+ HRESULT STDMETHODCALLTYPE get_TuningSpace(ITuningSpace **TuningSpace);
+ HRESULT STDMETHODCALLTYPE get_Components(IComponents **Components);
+ HRESULT STDMETHODCALLTYPE Clone(ITuneRequest **NewTuneRequest);
+ HRESULT STDMETHODCALLTYPE get_Locator(ILocator **Locator);
+ HRESULT STDMETHODCALLTYPE put_Locator(ILocator *Locator);
+
+ //IDVBTuneRequest methods
+ HRESULT STDMETHODCALLTYPE get_ONID(long *ONID);
+ HRESULT STDMETHODCALLTYPE put_ONID(long ONID);
+ HRESULT STDMETHODCALLTYPE get_TSID(long *TSID);
+ HRESULT STDMETHODCALLTYPE put_TSID(long TSID);
+ HRESULT STDMETHODCALLTYPE get_SID(long *SID);
+ HRESULT STDMETHODCALLTYPE put_SID(long SID);
+
+ CTuneRequest(ITuningSpace * TuningSpace) : m_Ref(0), m_ONID(-1), m_TSID(-1), m_SID(-1), m_Locator(0), m_TuningSpace(TuningSpace)
+ {
+ m_TuningSpace->AddRef();
+ };
+
+ CTuneRequest(ITuningSpace * TuningSpace, LONG ONID, LONG TSID, LONG SID, ILocator * Locator) : m_Ref(1), m_ONID(ONID), m_TSID(TSID), m_SID(SID), m_Locator(Locator), m_TuningSpace(TuningSpace)
+ {
+ if (m_Locator)
+ m_Locator->AddRef();
+
+ m_TuningSpace->AddRef();
+ };
+
+ virtual ~CTuneRequest(){};
+
+protected:
+ LONG m_Ref;
+ LONG m_ONID;
+ LONG m_TSID;
+ LONG m_SID;
+ ILocator * m_Locator;
+ ITuningSpace * m_TuningSpace;
+};
+
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_ITuneRequest))
+ {
+ *Output = (ITuneRequest*)this;
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IDVBTuneRequest))
+ {
+ *Output = (IDVBTuneRequest*)this;
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CTuneRequest::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IDispatch methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::GetTypeInfoCount(UINT *pctinfo)
+{
+ OutputDebugStringW(L"CTuneRequest::GetTypeInfoCount : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
+{
+ OutputDebugStringW(L"CTuneRequest::GetTypeInfo : NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ OutputDebugStringW(L"CTuneRequest::GetIDsOfNames : NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ OutputDebugStringW(L"CTuneRequest::Invoke : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// ITuneRequest interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::get_TuningSpace(ITuningSpace **TuningSpace)
+{
+#ifdef MSVIDCTL_TRACE
+ OutputDebugStringW(L"CTuneRequest::get_TuningSpace\n");
+#endif
+
+ *TuningSpace = m_TuningSpace;
+ m_TuningSpace->AddRef();
+
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::get_Components(IComponents **Components)
+{
+ OutputDebugStringW(L"CTuneRequest::get_Components : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::Clone(ITuneRequest **NewTuneRequest)
+{
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CTuneRequest::Clone %p\n", NewTuneRequest);
+ OutputDebugStringW(Buffer);
+#endif
+
+ *NewTuneRequest = new CTuneRequest(m_TuningSpace, m_ONID, m_TSID, m_SID, m_Locator);
+
+ if (!*NewTuneRequest)
+ return E_OUTOFMEMORY;
+
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::get_Locator(ILocator **Locator)
+{
+ OutputDebugStringW(L"CTuneRequest::get_Locator : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::put_Locator(ILocator *Locator)
+{
+ OutputDebugStringW(L"CTuneRequest::put_Locator : stub\n");
+ m_Locator = Locator;
+
+ return S_OK;
+}
+
+//-------------------------------------------------------------------
+// IDVBTuneRequest interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::get_ONID(long *ONID)
+{
+#ifdef MSVIDCTL_TRACE
+ OutputDebugStringW(L"CTuneRequest::get_ONID\n");
+#endif
+
+ *ONID = m_ONID;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::put_ONID(long ONID)
+{
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CTuneRequest::put_ONID : %lu\n", ONID);
+ OutputDebugStringW(Buffer);
+#endif
+
+ m_ONID = ONID;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::get_TSID(long *TSID)
+{
+#ifdef MSVIDCTL_TRACE
+ OutputDebugStringW(L"CTuneRequest::get_TSID\n");
+#endif
+
+ *TSID = m_TSID;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::put_TSID(long TSID)
+{
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CTuneRequest::put_TSID : %lu\n", TSID);
+ OutputDebugStringW(Buffer);
+#endif
+
+ m_TSID = TSID;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::get_SID(long *SID)
+{
+#ifdef MSVIDCTL_TRACE
+ OutputDebugStringW(L"CTuneRequest::get_SID\n");
+#endif
+
+ *SID = m_SID;
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuneRequest::put_SID(long SID)
+{
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CTuneRequest::put_SID : %lu\n", SID);
+ OutputDebugStringW(Buffer);
+#endif
+
+ m_SID = SID;
+ return S_OK;
+}
+
+HRESULT
+WINAPI
+CTuneRequest_fnConstructor(
+ IUnknown *pUnknown,
+ ITuningSpace * TuningSpace,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // construct device control
+ CTuneRequest * request = new CTuneRequest(TuningSpace);
+
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CTuneRequest_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!request)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(request->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete request;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
diff --git a/reactos/dll/directx/msvidctl/tuningspace.cpp b/reactos/dll/directx/msvidctl/tuningspace.cpp
new file mode 100644
index 00000000000..035542e595d
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/tuningspace.cpp
@@ -0,0 +1,365 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/msvidctl/tuningspace.cpp
+ * PURPOSE: ITuningSpace interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#include "precomp.h"
+
+const GUID CLSID_DVBTNetworkProvider = {0x216c62df, 0x6d7f, 0x4e9a, {0x85, 0x71, 0x5, 0xf1, 0x4e, 0xdb, 0x76, 0x6a}};
+
+class CTuningSpace : public IDVBTuningSpace
+{
+public:
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CTuningSpace::Release : %p Ref %lu\n", this, m_Ref);
+ OutputDebugStringW(Buffer);
+
+ if (!m_Ref)
+ {
+ //delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IDispatch methods
+ HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
+ HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
+ HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
+ HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
+
+
+ //ITuningSpace methods
+ HRESULT STDMETHODCALLTYPE get_UniqueName(BSTR *Name);
+ HRESULT STDMETHODCALLTYPE put_UniqueName(BSTR Name);
+ HRESULT STDMETHODCALLTYPE get_FriendlyName(BSTR *Name);
+ HRESULT STDMETHODCALLTYPE put_FriendlyName(BSTR Name);
+ HRESULT STDMETHODCALLTYPE get_CLSID(BSTR *SpaceCLSID);
+ HRESULT STDMETHODCALLTYPE get_NetworkType(BSTR *NetworkTypeGuid);
+ HRESULT STDMETHODCALLTYPE put_NetworkType(BSTR NetworkTypeGuid);
+ HRESULT STDMETHODCALLTYPE get__NetworkType(GUID *NetworkTypeGuid);
+ HRESULT STDMETHODCALLTYPE put__NetworkType(REFCLSID NetworkTypeGuid);
+ HRESULT STDMETHODCALLTYPE CreateTuneRequest(ITuneRequest **TuneRequest);
+ HRESULT STDMETHODCALLTYPE EnumCategoryGUIDs(IEnumGUID **ppEnum);
+ HRESULT STDMETHODCALLTYPE EnumDeviceMonikers(IEnumMoniker **ppEnum);
+ HRESULT STDMETHODCALLTYPE get_DefaultPreferredComponentTypes(IComponentTypes **ComponentTypes);
+ HRESULT STDMETHODCALLTYPE put_DefaultPreferredComponentTypes(IComponentTypes *NewComponentTypes);
+ HRESULT STDMETHODCALLTYPE get_FrequencyMapping(BSTR *pMapping);
+ HRESULT STDMETHODCALLTYPE put_FrequencyMapping(BSTR Mapping);
+ HRESULT STDMETHODCALLTYPE get_DefaultLocator(ILocator **LocatorVal);
+ HRESULT STDMETHODCALLTYPE put_DefaultLocator(ILocator *LocatorVal);
+ HRESULT STDMETHODCALLTYPE Clone(ITuningSpace **NewTS);
+ // IDVBTuningSpace
+ HRESULT STDMETHODCALLTYPE get_SystemType(DVBSystemType *SysType);
+ HRESULT STDMETHODCALLTYPE put_SystemType(DVBSystemType SysType);
+
+ CTuningSpace() : m_Ref(0){};
+
+ virtual ~CTuningSpace(){};
+
+protected:
+ LONG m_Ref;
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_ITuningSpace))
+ {
+ *Output = (ITuningSpace*)this;
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_IDVBTuningSpace))
+ {
+ *Output = (IDVBTuningSpace*)this;
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CTuningSpace::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IDispatch methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::GetTypeInfoCount(UINT *pctinfo)
+{
+ OutputDebugStringW(L"CTuningSpace::GetTypeInfoCount : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
+{
+ OutputDebugStringW(L"CTuningSpace::GetTypeInfo : NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ OutputDebugStringW(L"CTuningSpace::GetIDsOfNames : NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ OutputDebugStringW(L"CTuningSpace::Invoke : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+//-------------------------------------------------------------------
+// ITuningSpace interface
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get_UniqueName(BSTR *Name)
+{
+ OutputDebugStringW(L"CTuningSpace::get_UniqueName : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::put_UniqueName(BSTR Name)
+{
+ OutputDebugStringW(L"CTuningSpace::put_UniqueName : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get_FriendlyName(BSTR *Name)
+{
+ OutputDebugStringW(L"CTuningSpace::get_FriendlyName : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::put_FriendlyName(BSTR Name)
+{
+ OutputDebugStringW(L"CTuningSpace::put_FriendlyName : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get_CLSID(BSTR *SpaceCLSID)
+{
+ OutputDebugStringW(L"CTuningSpace::get_CLSID : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get_NetworkType(BSTR *NetworkTypeGuid)
+{
+ OutputDebugStringW(L"CTuningSpace::get_NetworkType : stub\n");
+ return StringFromCLSID(CLSID_DVBTNetworkProvider, (LPOLESTR*)NetworkTypeGuid);
+
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::put_NetworkType(BSTR NetworkTypeGuid)
+{
+ OutputDebugStringW(L"CTuningSpace::put_NetworkType : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get__NetworkType(GUID *NetworkTypeGuid)
+{
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CTuningSpace::get__NetworkType : %p stub\n", NetworkTypeGuid);
+ OutputDebugStringW(Buffer);
+#endif
+
+ CopyMemory(NetworkTypeGuid, &CLSID_DVBTNetworkProvider, sizeof(GUID));
+ OutputDebugStringW(L"CTuningSpace::get__NetworkType : done\n");
+ return S_OK;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::put__NetworkType(REFCLSID NetworkTypeGuid)
+{
+ OutputDebugStringW(L"CTuningSpace::put__NetworkType : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::CreateTuneRequest(ITuneRequest **TuneRequest)
+{
+ OutputDebugStringW(L"CTuningSpace::CreateTuneRequest : stub\n");
+ return CTuneRequest_fnConstructor(NULL, (ITuningSpace*)this, IID_ITuneRequest, (void**)TuneRequest);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::EnumCategoryGUIDs(IEnumGUID **ppEnum)
+{
+ OutputDebugStringW(L"CTuningSpace::EnumCategoryGUIDs : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::EnumDeviceMonikers(IEnumMoniker **ppEnum)
+{
+ OutputDebugStringW(L"CTuningSpace::EnumDeviceMonikers : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get_DefaultPreferredComponentTypes(IComponentTypes **ComponentTypes)
+{
+ OutputDebugStringW(L"CTuningSpace::get_DefaultPreferredComponentTypes : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::put_DefaultPreferredComponentTypes(IComponentTypes *NewComponentTypes)
+{
+ OutputDebugStringW(L"CTuningSpace::put_DefaultPreferredComponentTypes : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get_FrequencyMapping(BSTR *pMapping)
+{
+ OutputDebugStringW(L"CTuningSpace::get_FrequencyMapping : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::put_FrequencyMapping(BSTR Mapping)
+{
+ OutputDebugStringW(L"CTuningSpace::put_FrequencyMapping : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get_DefaultLocator(ILocator **LocatorVal)
+{
+ OutputDebugStringW(L"CTuningSpace::get_DefaultLocator : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::put_DefaultLocator(ILocator *LocatorVal)
+{
+ OutputDebugStringW(L"CTuningSpace::put_DefaultLocator : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::Clone(ITuningSpace **NewTS)
+{
+ OutputDebugStringW(L"CTuningSpace::Clone : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// IDVBTuningSpace
+//
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::get_SystemType(DVBSystemType *SysType)
+{
+ OutputDebugStringW(L"CTuningSpace::get_SystemType : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpace::put_SystemType(DVBSystemType SysType)
+{
+ OutputDebugStringW(L"CTuningSpace::put_SystemType : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+WINAPI
+CTuningSpace_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // construct device control
+ CTuningSpace * space = new CTuningSpace();
+
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CTuningSpace_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!space)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(space->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete space;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
+
+
diff --git a/reactos/dll/directx/msvidctl/tuningspace_container.cpp b/reactos/dll/directx/msvidctl/tuningspace_container.cpp
new file mode 100644
index 00000000000..e25fdc7a600
--- /dev/null
+++ b/reactos/dll/directx/msvidctl/tuningspace_container.cpp
@@ -0,0 +1,272 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS BDA Proxy
+ * FILE: dll/directx/msvidctl/tuningspace_container.cpp
+ * PURPOSE: ITuningSpaceContainer interface
+ *
+ * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
+ */
+#define _FORCENAMELESSUNION
+#include "precomp.h"
+
+
+class CTuningSpaceContainer : public ITuningSpaceContainer
+{
+public:
+
+ STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
+
+ STDMETHODIMP_(ULONG) AddRef()
+ {
+ InterlockedIncrement(&m_Ref);
+ return m_Ref;
+ }
+ STDMETHODIMP_(ULONG) Release()
+ {
+ InterlockedDecrement(&m_Ref);
+ if (!m_Ref)
+ {
+ OutputDebugStringW(L"CTuningSpaceContainer::Release : delete\n");
+ //delete this;
+ return 0;
+ }
+ return m_Ref;
+ }
+
+ // IDispatch methods
+ HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
+ HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
+ HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
+ HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
+
+ //ITuningSpaceContainer methods
+ HRESULT STDMETHODCALLTYPE get_Count(long *Count);
+ HRESULT STDMETHODCALLTYPE get__NewEnum(IEnumVARIANT **NewEnum);
+ HRESULT STDMETHODCALLTYPE get_Item(VARIANT varIndex, ITuningSpace **TuningSpace);
+ HRESULT STDMETHODCALLTYPE put_Item(VARIANT varIndex, ITuningSpace *TuningSpace);
+ HRESULT STDMETHODCALLTYPE TuningSpacesForCLSID(BSTR SpaceCLSID, ITuningSpaces **NewColl);
+ HRESULT STDMETHODCALLTYPE _TuningSpacesForCLSID(REFCLSID SpaceCLSID, ITuningSpaces **NewColl);
+ HRESULT STDMETHODCALLTYPE TuningSpacesForName(BSTR Name, ITuningSpaces **NewColl);
+ HRESULT STDMETHODCALLTYPE FindID(ITuningSpace *TuningSpace, long *ID);
+ HRESULT STDMETHODCALLTYPE Add(ITuningSpace *TuningSpace, VARIANT *NewIndex);
+ HRESULT STDMETHODCALLTYPE get_EnumTuningSpaces(IEnumTuningSpaces **ppEnum);
+ HRESULT STDMETHODCALLTYPE Remove(VARIANT Index);
+ HRESULT STDMETHODCALLTYPE get_MaxCount(long *MaxCount);
+ HRESULT STDMETHODCALLTYPE put_MaxCount(long MaxCount);
+
+ CTuningSpaceContainer() : m_Ref(0){};
+
+ virtual ~CTuningSpaceContainer(){};
+
+protected:
+ LONG m_Ref;
+
+};
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::QueryInterface(
+ IN REFIID refiid,
+ OUT PVOID* Output)
+{
+ if (IsEqualGUID(refiid, IID_IUnknown))
+ {
+ *Output = PVOID(this);
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ if (IsEqualGUID(refiid, IID_ITuningSpaceContainer))
+ {
+ *Output = (ITuningSpaceContainer*)this;
+ reinterpret_cast(*Output)->AddRef();
+ return NOERROR;
+ }
+
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(refiid, &lpstr);
+ swprintf(Buffer, L"CTuningSpaceContainer::QueryInterface: NoInterface for %s", lpstr);
+ OutputDebugStringW(Buffer);
+ CoTaskMemFree(lpstr);
+
+
+ return E_NOINTERFACE;
+}
+
+//-------------------------------------------------------------------
+// IDispatch methods
+//
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::GetTypeInfoCount(UINT *pctinfo)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::GetTypeInfoCount : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::GetTypeInfo : NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::GetIDsOfNames : NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::Invoke : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+//-------------------------------------------------------------------
+// ITuningSpaceContainer methods
+//
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::get_Count(long *Count)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::get_Count : NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::get__NewEnum(IEnumVARIANT **NewEnum)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::get__NewEnum : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::get_Item(VARIANT varIndex, ITuningSpace **TuningSpace)
+{
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[100];
+ swprintf(Buffer, L"CTuningSpaceContainer::get_Item : type %x value %s stub\n", varIndex.vt, varIndex.bstrVal);
+ OutputDebugStringW(Buffer);
+#endif
+
+ return CTuningSpace_fnConstructor(NULL, IID_ITuningSpace, (void**)TuningSpace);
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::put_Item(VARIANT varIndex, ITuningSpace *TuningSpace)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::put_Item : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::TuningSpacesForCLSID(BSTR SpaceCLSID, ITuningSpaces **NewColl)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::TuningSpacesForCLSID : NotImplemented\n");
+ return E_NOTIMPL;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::_TuningSpacesForCLSID(REFCLSID SpaceCLSID, ITuningSpaces **NewColl)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::_TuningSpacesForCLSID : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::TuningSpacesForName(BSTR Name, ITuningSpaces **NewColl)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::TuningSpacesForName : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::FindID(ITuningSpace *TuningSpace, long *ID)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::FindID : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::Add(ITuningSpace *TuningSpace, VARIANT *NewIndex)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::Add : stub\n");
+ TuningSpace->AddRef();
+ NewIndex->vt = VT_BSTR;
+ InterlockedIncrement(&m_Ref);
+ return TuningSpace->get_FriendlyName(&NewIndex->bstrVal);;
+}
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::get_EnumTuningSpaces(IEnumTuningSpaces **ppEnum)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::get_EnumTuningSpaces : stub\n");
+ return CEnumTuningSpaces_fnConstructor(NULL, IID_IEnumTuningSpaces, (void**)ppEnum);
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::Remove(VARIANT Index)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::Remove: NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::get_MaxCount(long *MaxCount)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::get_MaxCount : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+HRESULT
+STDMETHODCALLTYPE
+CTuningSpaceContainer::put_MaxCount(long MaxCount)
+{
+ OutputDebugStringW(L"CTuningSpaceContainer::put_MaxCount : NotImplemented\n");
+ return E_NOTIMPL;
+}
+
+
+HRESULT
+WINAPI
+CTuningSpaceContainer_fnConstructor(
+ IUnknown *pUnknown,
+ REFIID riid,
+ LPVOID * ppv)
+{
+ // construct device control
+ CTuningSpaceContainer * provider = new CTuningSpaceContainer();
+
+#ifdef MSVIDCTL_TRACE
+ WCHAR Buffer[MAX_PATH];
+ LPOLESTR lpstr;
+ StringFromCLSID(riid, &lpstr);
+ swprintf(Buffer, L"CTuningSpaceContainer_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
+ OutputDebugStringW(Buffer);
+#endif
+
+ if (!provider)
+ return E_OUTOFMEMORY;
+
+ if (FAILED(provider->QueryInterface(riid, ppv)))
+ {
+ /* not supported */
+ delete provider;
+ return E_NOINTERFACE;
+ }
+
+ return NOERROR;
+}
\ No newline at end of file
diff --git a/reactos/dll/directx/qedit/main.c b/reactos/dll/directx/qedit/main.c
index df00137647b..ede377fb579 100644
--- a/reactos/dll/directx/qedit/main.c
+++ b/reactos/dll/directx/qedit/main.c
@@ -53,6 +53,7 @@ struct object_creation_info
static const struct object_creation_info object_creation[] =
{
{ &CLSID_MediaDet, MediaDet_create },
+ { &CLSID_SampleGrabber, SampleGrabber_create },
};
static HRESULT WINAPI
diff --git a/reactos/dll/directx/qedit/mediadet.c b/reactos/dll/directx/qedit/mediadet.c
index 2cf37f96a88..3a13f717bf6 100644
--- a/reactos/dll/directx/qedit/mediadet.c
+++ b/reactos/dll/directx/qedit/mediadet.c
@@ -112,7 +112,7 @@ static HRESULT WINAPI MediaDet_put_Filter(IMediaDet* iface, IUnknown *newVal)
return E_NOTIMPL;
}
-static HRESULT WINAPI MediaDet_get_OutputStreams(IMediaDet* iface, long *pVal)
+static HRESULT WINAPI MediaDet_get_OutputStreams(IMediaDet* iface, LONG *pVal)
{
MediaDetImpl *This = (MediaDetImpl *)iface;
IEnumPins *pins;
@@ -156,7 +156,7 @@ static HRESULT WINAPI MediaDet_get_OutputStreams(IMediaDet* iface, long *pVal)
return S_OK;
}
-static HRESULT WINAPI MediaDet_get_CurrentStream(IMediaDet* iface, long *pVal)
+static HRESULT WINAPI MediaDet_get_CurrentStream(IMediaDet* iface, LONG *pVal)
{
MediaDetImpl *This = (MediaDetImpl *)iface;
TRACE("(%p)\n", This);
@@ -209,16 +209,16 @@ static HRESULT SetCurPin(MediaDetImpl *This, long strm)
return S_OK;
}
-static HRESULT WINAPI MediaDet_put_CurrentStream(IMediaDet* iface, long newVal)
+static HRESULT WINAPI MediaDet_put_CurrentStream(IMediaDet* iface, LONG newVal)
{
MediaDetImpl *This = (MediaDetImpl *)iface;
HRESULT hr;
- TRACE("(%p)->(%ld)\n", This, newVal);
+ TRACE("(%p)->(%d)\n", This, newVal);
if (This->num_streams == -1)
{
- long n;
+ LONG n;
hr = MediaDet_get_OutputStreams(iface, &n);
if (FAILED(hr))
return hr;
@@ -310,7 +310,11 @@ static HRESULT GetFilterInfo(IMoniker *pMoniker, GUID *pclsid, VARIANT *pvar)
hr = IPropertyBag_Read(pPropBagCat, wszClsidName, pvar, NULL);
if (SUCCEEDED(hr))
+ {
hr = CLSIDFromString(V_UNION(pvar, bstrVal), pclsid);
+ VariantClear(pvar);
+ V_VT(pvar) = VT_BSTR;
+ }
if (SUCCEEDED(hr))
hr = IPropertyBag_Read(pPropBagCat, wszFriendlyName, pvar, NULL);
@@ -387,10 +391,14 @@ static HRESULT GetSplitter(MediaDetImpl *This)
hr = CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER,
&IID_IBaseFilter, (void **) &splitter);
if (FAILED(hr))
+ {
+ VariantClear(&var);
return hr;
+ }
hr = IGraphBuilder_AddFilter(This->graph, splitter,
V_UNION(&var, bstrVal));
+ VariantClear(&var);
if (FAILED(hr))
{
IBaseFilter_Release(splitter);
@@ -461,21 +469,21 @@ static HRESULT WINAPI MediaDet_put_Filename(IMediaDet* iface, BSTR newVal)
static HRESULT WINAPI MediaDet_GetBitmapBits(IMediaDet* iface,
double StreamTime,
- long *pBufferSize, char *pBuffer,
- long Width, long Height)
+ LONG *pBufferSize, char *pBuffer,
+ LONG Width, LONG Height)
{
MediaDetImpl *This = (MediaDetImpl *)iface;
- FIXME("(%p)->(%f %p %p %ld %ld): not implemented!\n", This, StreamTime, pBufferSize, pBuffer,
+ FIXME("(%p)->(%f %p %p %d %d): not implemented!\n", This, StreamTime, pBufferSize, pBuffer,
Width, Height);
return E_NOTIMPL;
}
static HRESULT WINAPI MediaDet_WriteBitmapBits(IMediaDet* iface,
- double StreamTime, long Width,
- long Height, BSTR Filename)
+ double StreamTime, LONG Width,
+ LONG Height, BSTR Filename)
{
MediaDetImpl *This = (MediaDetImpl *)iface;
- FIXME("(%p)->(%f %ld %ld %p): not implemented!\n", This, StreamTime, Width, Height, Filename);
+ FIXME("(%p)->(%f %d %d %p): not implemented!\n", This, StreamTime, Width, Height, Filename);
return E_NOTIMPL;
}
diff --git a/reactos/dll/directx/qedit/qedit.rbuild b/reactos/dll/directx/qedit/qedit.rbuild
index 78f7a556612..f3285f4ef48 100644
--- a/reactos/dll/directx/qedit/qedit.rbuild
+++ b/reactos/dll/directx/qedit/qedit.rbuild
@@ -8,6 +8,7 @@
main.c
mediadet.c
regsvr.c
+ samplegrabber.c
wine
strmiids
uuid
diff --git a/reactos/dll/directx/qedit/qedit_private.h b/reactos/dll/directx/qedit/qedit_private.h
index 87bcab012fe..cf4747f5f17 100644
--- a/reactos/dll/directx/qedit/qedit_private.h
+++ b/reactos/dll/directx/qedit/qedit_private.h
@@ -37,5 +37,6 @@
#include "qedit.h"
HRESULT MediaDet_create(IUnknown *pUnkOuter, LPVOID *ppObj);
+HRESULT SampleGrabber_create(IUnknown *pUnkOuter, LPVOID *ppObj);
#endif /* __QEDIT_PRIVATE_INCLUDED__ */
diff --git a/reactos/dll/directx/qedit/regsvr.c b/reactos/dll/directx/qedit/regsvr.c
index 9ff18528523..d70c8222ee8 100644
--- a/reactos/dll/directx/qedit/regsvr.c
+++ b/reactos/dll/directx/qedit/regsvr.c
@@ -294,6 +294,12 @@ static struct regsvr_coclass const coclass_list[] = {
"qedit.dll",
"Both"
},
+ { &CLSID_SampleGrabber,
+ "Sample Grabber",
+ NULL,
+ "qedit.dll",
+ "Both"
+ },
{ NULL } /* list terminator */
};
diff --git a/reactos/dll/directx/qedit/samplegrabber.c b/reactos/dll/directx/qedit/samplegrabber.c
new file mode 100644
index 00000000000..1875c51c49e
--- /dev/null
+++ b/reactos/dll/directx/qedit/samplegrabber.c
@@ -0,0 +1,1475 @@
+/* DirectShow Sample Grabber object (QEDIT.DLL)
+ *
+ * Copyright 2009 Paul Chitescu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include
+#include
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "ole2.h"
+
+#include "qedit_private.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(qedit);
+
+static WCHAR const vendor_name[] = { 'W', 'i', 'n', 'e', 0 };
+static WCHAR const pin_in_name[] = { 'I', 'n', 0 };
+static WCHAR const pin_out_name[] = { 'O', 'u', 't', 0 };
+
+IEnumPins *pinsenum_create(IBaseFilter *filter, IPin **pins, ULONG pinCount);
+IEnumMediaTypes *mediaenum_create(const AM_MEDIA_TYPE *mtype);
+
+/* Fixed pins enumerator, holds filter referenced */
+typedef struct _PE_Impl {
+ IEnumPins pe;
+ IBaseFilter *filter;
+ LONG refCount;
+ ULONG numPins;
+ ULONG index;
+ IPin *pins[0];
+} PE_Impl;
+
+
+/* IEnumPins interface implementation */
+
+/* IUnknown */
+static ULONG WINAPI
+Fixed_IEnumPins_AddRef(IEnumPins *iface)
+{
+ PE_Impl *This = (PE_Impl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->refCount);
+ TRACE("(%p) new ref = %u\n", This, refCount);
+ return refCount;
+}
+
+/* IUnknown */
+static ULONG WINAPI
+Fixed_IEnumPins_Release(IEnumPins *iface)
+{
+ PE_Impl *This = (PE_Impl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->refCount);
+ TRACE("(%p) new ref = %u\n", This, refCount);
+ if (refCount == 0)
+ {
+ IBaseFilter_Release(This->filter);
+ CoTaskMemFree(This);
+ return 0;
+ }
+ return refCount;
+}
+
+/* IUnknown */
+static HRESULT WINAPI
+Fixed_IEnumPins_QueryInterface(IEnumPins *iface, REFIID riid, void **ppvObject)
+{
+ PE_Impl *This = (PE_Impl *)iface;
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
+
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IEnumPins)) {
+ Fixed_IEnumPins_AddRef(iface);
+ *ppvObject = &(This->pins);
+ return S_OK;
+ }
+ *ppvObject = NULL;
+ WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppvObject);
+ return E_NOINTERFACE;
+}
+
+/* IEnumPins */
+static HRESULT WINAPI
+Fixed_IEnumPins_Next(IEnumPins *iface, ULONG nPins, IPin **pins, ULONG *fetched)
+{
+ PE_Impl *This = (PE_Impl *)iface;
+ ULONG count = 0;
+ TRACE("(%p)->(%u, %p, %p) index = %u\n", This, nPins, pins, fetched, This->index);
+ if (!nPins)
+ return E_INVALIDARG;
+ if (!pins || ((nPins != 1) && !fetched))
+ return E_POINTER;
+ while ((count < nPins) && (This->index < This->numPins)) {
+ IPin *pin = This->pins[This->index++];
+ IPin_AddRef(pin);
+ pins[count++] = pin;
+ }
+ if (fetched)
+ *fetched = count;
+ return (count == nPins) ? S_OK : S_FALSE;
+}
+
+/* IEnumPins */
+static HRESULT WINAPI
+Fixed_IEnumPins_Skip(IEnumPins *iface, ULONG nPins)
+{
+ PE_Impl *This = (PE_Impl *)iface;
+ TRACE("(%p)->(%u) index = %u\n", This, nPins, This->index);
+ nPins += This->index;
+ if (nPins >= This->numPins) {
+ This->index = This->numPins;
+ return S_FALSE;
+ }
+ This->index = nPins;
+ return S_OK;
+}
+
+/* IEnumPins */
+static HRESULT WINAPI
+Fixed_IEnumPins_Reset(IEnumPins *iface)
+{
+ PE_Impl *This = (PE_Impl *)iface;
+ TRACE("(%p)->() index = %u\n", This, This->index);
+ This->index = 0;
+ return S_OK;
+}
+
+/* IEnumPins */
+static HRESULT WINAPI
+Fixed_IEnumPins_Clone(IEnumPins *iface, IEnumPins **pins)
+{
+ PE_Impl *This = (PE_Impl *)iface;
+ TRACE("(%p)->(%p) index = %u\n", This, pins, This->index);
+ if (!pins)
+ return E_POINTER;
+ *pins = pinsenum_create(This->filter, This->pins, This->numPins);
+ if (!*pins)
+ return E_OUTOFMEMORY;
+ ((PE_Impl *)*pins)->index = This->index;
+ return S_OK;
+}
+
+
+/* Virtual tables and constructor */
+
+static const IEnumPinsVtbl IEnumPins_VTable =
+{
+ Fixed_IEnumPins_QueryInterface,
+ Fixed_IEnumPins_AddRef,
+ Fixed_IEnumPins_Release,
+ Fixed_IEnumPins_Next,
+ Fixed_IEnumPins_Skip,
+ Fixed_IEnumPins_Reset,
+ Fixed_IEnumPins_Clone,
+};
+
+IEnumPins *pinsenum_create(IBaseFilter *filter, IPin **pins, ULONG pinCount)
+{
+ ULONG len = sizeof(PE_Impl) + (pinCount * sizeof(IPin *));
+ PE_Impl *obj = CoTaskMemAlloc(len);
+ if (obj) {
+ ULONG i;
+ ZeroMemory(obj, len);
+ obj->pe.lpVtbl = &IEnumPins_VTable;
+ obj->refCount = 1;
+ obj->filter = filter;
+ obj->numPins = pinCount;
+ obj->index = 0;
+ for (i=0; ipins[i] = pins[i];
+ IBaseFilter_AddRef(filter);
+ }
+ return &obj->pe;
+}
+
+
+/* Single media type enumerator */
+typedef struct _ME_Impl {
+ IEnumMediaTypes me;
+ LONG refCount;
+ BOOL past;
+ AM_MEDIA_TYPE mtype;
+} ME_Impl;
+
+
+/* IEnumMediaTypes interface implementation */
+
+/* IUnknown */
+static ULONG WINAPI
+Single_IEnumMediaTypes_AddRef(IEnumMediaTypes *iface)
+{
+ ME_Impl *This = (ME_Impl *)iface;
+ ULONG refCount = InterlockedIncrement(&This->refCount);
+ TRACE("(%p) new ref = %u\n", This, refCount);
+ return refCount;
+}
+
+/* IUnknown */
+static ULONG WINAPI
+Single_IEnumMediaTypes_Release(IEnumMediaTypes *iface)
+{
+ ME_Impl *This = (ME_Impl *)iface;
+ ULONG refCount = InterlockedDecrement(&This->refCount);
+ TRACE("(%p) new ref = %u\n", This, refCount);
+ if (refCount == 0)
+ {
+ if (This->mtype.pbFormat)
+ CoTaskMemFree(This->mtype.pbFormat);
+ CoTaskMemFree(This);
+ return 0;
+ }
+ return refCount;
+}
+
+/* IUnknown */
+static HRESULT WINAPI
+Single_IEnumMediaTypes_QueryInterface(IEnumMediaTypes *iface, REFIID riid, void **ppvObject)
+{
+ ME_Impl *This = (ME_Impl *)iface;
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
+
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IEnumMediaTypes)) {
+ Single_IEnumMediaTypes_AddRef(iface);
+ *ppvObject = &(This->me);
+ return S_OK;
+ }
+ *ppvObject = NULL;
+ WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppvObject);
+ return E_NOINTERFACE;
+}
+
+/* IEnumMediaTypes */
+static HRESULT WINAPI
+Single_IEnumMediaTypes_Next(IEnumMediaTypes *iface, ULONG nTypes, AM_MEDIA_TYPE **types, ULONG *fetched)
+{
+ ME_Impl *This = (ME_Impl *)iface;
+ ULONG count = 0;
+ TRACE("(%p)->(%u, %p, %p)\n", This, nTypes, types, fetched);
+ if (!nTypes)
+ return E_INVALIDARG;
+ if (!types || ((nTypes != 1) && !fetched))
+ return E_POINTER;
+ if (!This->past && !IsEqualGUID(&This->mtype.majortype,&GUID_NULL)) {
+ AM_MEDIA_TYPE *mtype = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE));
+ *mtype = This->mtype;
+ if (mtype->cbFormat) {
+ mtype->pbFormat = CoTaskMemAlloc(mtype->cbFormat);
+ CopyMemory(mtype->pbFormat, This->mtype.pbFormat, mtype->cbFormat);
+ }
+ *types = mtype;
+ This->past = TRUE;
+ count = 1;
+ }
+ if (fetched)
+ *fetched = count;
+ return (count == nTypes) ? S_OK : S_FALSE;
+}
+
+/* IEnumMediaTypes */
+static HRESULT WINAPI
+Single_IEnumMediaTypes_Skip(IEnumMediaTypes *iface, ULONG nTypes)
+{
+ ME_Impl *This = (ME_Impl *)iface;
+ TRACE("(%p)->(%u)\n", This, nTypes);
+ if (nTypes)
+ This->past = TRUE;
+ return This->past ? S_FALSE : S_OK;
+}
+
+/* IEnumMediaTypes */
+static HRESULT WINAPI
+Single_IEnumMediaTypes_Reset(IEnumMediaTypes *iface)
+{
+ ME_Impl *This = (ME_Impl *)iface;
+ TRACE("(%p)->()\n", This);
+ This->past = FALSE;
+ return S_OK;
+}
+
+/* IEnumMediaTypes */
+static HRESULT WINAPI
+Single_IEnumMediaTypes_Clone(IEnumMediaTypes *iface, IEnumMediaTypes **me)
+{
+ ME_Impl *This = (ME_Impl *)iface;
+ TRACE("(%p)->(%p)\n", This, me);
+ if (!me)
+ return E_POINTER;
+ *me = mediaenum_create(&This->mtype);
+ if (!*me)
+ return E_OUTOFMEMORY;
+ ((ME_Impl *)*me)->past = This->past;
+ return S_OK;
+}
+
+
+/* Virtual tables and constructor */
+
+static const IEnumMediaTypesVtbl IEnumMediaTypes_VTable =
+{
+ Single_IEnumMediaTypes_QueryInterface,
+ Single_IEnumMediaTypes_AddRef,
+ Single_IEnumMediaTypes_Release,
+ Single_IEnumMediaTypes_Next,
+ Single_IEnumMediaTypes_Skip,
+ Single_IEnumMediaTypes_Reset,
+ Single_IEnumMediaTypes_Clone,
+};
+
+IEnumMediaTypes *mediaenum_create(const AM_MEDIA_TYPE *mtype)
+{
+ ME_Impl *obj = CoTaskMemAlloc(sizeof(ME_Impl));
+ if (obj) {
+ ZeroMemory(obj, sizeof(ME_Impl));
+ obj->me.lpVtbl = &IEnumMediaTypes_VTable;
+ obj->refCount = 1;
+ obj->past = FALSE;
+ if (mtype) {
+ obj->mtype = *mtype;
+ obj->mtype.pUnk = NULL;
+ if (mtype->cbFormat) {
+ obj->mtype.pbFormat = CoTaskMemAlloc(mtype->cbFormat);
+ CopyMemory(obj->mtype.pbFormat, mtype->pbFormat, mtype->cbFormat);
+ }
+ else
+ obj->mtype.pbFormat = NULL;
+ }
+ else
+ obj->mtype.majortype = GUID_NULL;
+ }
+ return &obj->me;
+}
+
+
+/* Sample Grabber pin implementation */
+typedef struct _SG_Pin {
+ const IPinVtbl* lpVtbl;
+ PIN_DIRECTION dir;
+ WCHAR const *name;
+ struct _SG_Impl *sg;
+ IPin *pair;
+} SG_Pin;
+
+/* Sample Grabber filter implementation */
+typedef struct _SG_Impl {
+ const IBaseFilterVtbl* IBaseFilter_Vtbl;
+ const ISampleGrabberVtbl* ISampleGrabber_Vtbl;
+ const IMemInputPinVtbl* IMemInputPin_Vtbl;
+ /* TODO: IMediaPosition, IMediaSeeking, IQualityControl */
+ LONG refCount;
+ CRITICAL_SECTION critSect;
+ FILTER_INFO info;
+ FILTER_STATE state;
+ AM_MEDIA_TYPE mtype;
+ SG_Pin pin_in;
+ SG_Pin pin_out;
+ IMemAllocator *allocator;
+ IReferenceClock *refClock;
+ IMemInputPin *memOutput;
+ ISampleGrabberCB *grabberIface;
+ LONG grabberMethod;
+ LONG oneShot;
+ LONG bufferLen;
+ void* bufferData;
+} SG_Impl;
+
+enum {
+ OneShot_None,
+ OneShot_Wait,
+ OneShot_Past,
+};
+
+/* Get the SampleGrabber implementation This pointer from various interface pointers */
+static inline SG_Impl *impl_from_IBaseFilter(IBaseFilter *iface)
+{
+ return (SG_Impl *)((char*)iface - FIELD_OFFSET(SG_Impl, IBaseFilter_Vtbl));
+}
+
+static inline SG_Impl *impl_from_ISampleGrabber(ISampleGrabber *iface)
+{
+ return (SG_Impl *)((char*)iface - FIELD_OFFSET(SG_Impl, ISampleGrabber_Vtbl));
+}
+
+static inline SG_Impl *impl_from_IMemInputPin(IMemInputPin *iface)
+{
+ return (SG_Impl *)((char*)iface - FIELD_OFFSET(SG_Impl, IMemInputPin_Vtbl));
+}
+
+
+/* Cleanup at end of life */
+static void SampleGrabber_cleanup(SG_Impl *This)
+{
+ TRACE("(%p)\n", This);
+ if (This->info.pGraph)
+ WARN("(%p) still joined to filter graph %p\n", This, This->info.pGraph);
+ if (This->allocator)
+ IMemAllocator_Release(This->allocator);
+ if (This->refClock)
+ IReferenceClock_Release(This->refClock);
+ if (This->memOutput)
+ IMemInputPin_Release(This->memOutput);
+ if (This->grabberIface)
+ ISampleGrabberCB_Release(This->grabberIface);
+ if (This->mtype.pbFormat)
+ CoTaskMemFree(This->mtype.pbFormat);
+ if (This->bufferData)
+ CoTaskMemFree(This->bufferData);
+ This->critSect.DebugInfo->Spare[0] = 0;
+ DeleteCriticalSection(&This->critSect);
+}
+
+/* Common helper AddRef called from all interfaces */
+static ULONG SampleGrabber_addref(SG_Impl *This)
+{
+ ULONG refCount = InterlockedIncrement(&This->refCount);
+ TRACE("(%p) new ref = %u\n", This, refCount);
+ return refCount;
+}
+
+/* Common helper Release called from all interfaces */
+static ULONG SampleGrabber_release(SG_Impl *This)
+{
+ ULONG refCount = InterlockedDecrement(&This->refCount);
+ TRACE("(%p) new ref = %u\n", This, refCount);
+ if (refCount == 0)
+ {
+ SampleGrabber_cleanup(This);
+ CoTaskMemFree(This);
+ return 0;
+ }
+ return refCount;
+}
+
+/* Common helper QueryInterface called from all interfaces */
+static HRESULT SampleGrabber_query(SG_Impl *This, REFIID riid, void **ppvObject)
+{
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
+
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IPersist) ||
+ IsEqualIID(riid, &IID_IMediaFilter) ||
+ IsEqualIID(riid, &IID_IBaseFilter)) {
+ SampleGrabber_addref(This);
+ *ppvObject = &(This->IBaseFilter_Vtbl);
+ return S_OK;
+ }
+ else if (IsEqualIID(riid, &IID_ISampleGrabber)) {
+ SampleGrabber_addref(This);
+ *ppvObject = &(This->ISampleGrabber_Vtbl);
+ return S_OK;
+ }
+ else if (IsEqualIID(riid, &IID_IMemInputPin)) {
+ SampleGrabber_addref(This);
+ *ppvObject = &(This->IMemInputPin_Vtbl);
+ return S_OK;
+ }
+ else if (IsEqualIID(riid, &IID_IMediaPosition))
+ FIXME("IMediaPosition not implemented\n");
+ else if (IsEqualIID(riid, &IID_IMediaSeeking))
+ FIXME("IMediaSeeking not implemented\n");
+ else if (IsEqualIID(riid, &IID_IQualityControl))
+ FIXME("IQualityControl not implemented\n");
+ *ppvObject = NULL;
+ WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppvObject);
+ return E_NOINTERFACE;
+}
+
+/* Helper that buffers data and/or calls installed sample callbacks */
+static void SampleGrabber_callback(SG_Impl *This, IMediaSample *sample)
+{
+ double time = 0.0;
+ REFERENCE_TIME tStart, tEnd;
+ if (This->bufferLen >= 0) {
+ BYTE *data = 0;
+ long size = IMediaSample_GetActualDataLength(sample);
+ if (size >= 0 && SUCCEEDED(IMediaSample_GetPointer(sample, &data))) {
+ if (!data)
+ size = 0;
+ EnterCriticalSection(&This->critSect);
+ if (This->bufferLen != size) {
+ if (This->bufferData)
+ CoTaskMemFree(This->bufferData);
+ This->bufferData = size ? CoTaskMemAlloc(size) : NULL;
+ This->bufferLen = size;
+ }
+ if (size)
+ CopyMemory(This->bufferData, data, size);
+ LeaveCriticalSection(&This->critSect);
+ }
+ }
+ if (!This->grabberIface)
+ return;
+ if (SUCCEEDED(IMediaSample_GetTime(sample, &tStart, &tEnd)))
+ time = 1e-7 * tStart;
+ switch (This->grabberMethod) {
+ case 0:
+ {
+ ULONG ref = IMediaSample_AddRef(sample);
+ ISampleGrabberCB_SampleCB(This->grabberIface, time, sample);
+ ref = IMediaSample_Release(sample) + 1 - ref;
+ if (ref)
+ {
+ ERR("(%p) Callback referenced sample %p by %u\n", This, sample, ref);
+ /* ugly as hell but some apps are sooo buggy */
+ while (ref--)
+ IMediaSample_Release(sample);
+ }
+ }
+ break;
+ case 1:
+ {
+ BYTE *data = 0;
+ long size = IMediaSample_GetActualDataLength(sample);
+ if (size && SUCCEEDED(IMediaSample_GetPointer(sample, &data)) && data)
+ ISampleGrabberCB_BufferCB(This->grabberIface, time, data, size);
+ }
+ break;
+ case -1:
+ break;
+ default:
+ FIXME("unsupported method %ld\n", (long int)This->grabberMethod);
+ /* do not bother us again */
+ This->grabberMethod = -1;
+ }
+}
+
+
+/* SampleGrabber implementation of IBaseFilter interface */
+
+/* IUnknown */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_QueryInterface(IBaseFilter *iface, REFIID riid, void **ppvObject)
+{
+ return SampleGrabber_query(impl_from_IBaseFilter(iface), riid, ppvObject);
+}
+
+/* IUnknown */
+static ULONG WINAPI
+SampleGrabber_IBaseFilter_AddRef(IBaseFilter *iface)
+{
+ return SampleGrabber_addref(impl_from_IBaseFilter(iface));
+}
+
+/* IUnknown */
+static ULONG WINAPI
+SampleGrabber_IBaseFilter_Release(IBaseFilter *iface)
+{
+ return SampleGrabber_release(impl_from_IBaseFilter(iface));
+}
+
+/* IPersist */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_GetClassID(IBaseFilter *iface, CLSID *pClassID)
+{
+ TRACE("(%p)\n", pClassID);
+ if (!pClassID)
+ return E_POINTER;
+ *pClassID = CLSID_SampleGrabber;
+ return S_OK;
+}
+
+/* IMediaFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_Stop(IBaseFilter *iface)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)\n", This);
+ This->state = State_Stopped;
+ return S_OK;
+}
+
+/* IMediaFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_Pause(IBaseFilter *iface)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)\n", This);
+ This->state = State_Paused;
+ return S_OK;
+}
+
+/* IMediaFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_Run(IBaseFilter *iface, REFERENCE_TIME tStart)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)\n", This);
+ This->state = State_Running;
+ return S_OK;
+}
+
+/* IMediaFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_GetState(IBaseFilter *iface, DWORD msTout, FILTER_STATE *state)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)->(%u, %p)\n", This, msTout, state);
+ if (!state)
+ return E_POINTER;
+ *state = This->state;
+ return S_OK;
+}
+
+/* IMediaFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_SetSyncSource(IBaseFilter *iface, IReferenceClock *clock)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)->(%p)\n", This, clock);
+ if (clock != This->refClock)
+ {
+ if (clock)
+ IReferenceClock_AddRef(clock);
+ if (This->refClock)
+ IReferenceClock_Release(This->refClock);
+ This->refClock = clock;
+ }
+ return S_OK;
+}
+
+/* IMediaFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_GetSyncSource(IBaseFilter *iface, IReferenceClock **clock)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)->(%p)\n", This, clock);
+ if (!clock)
+ return E_POINTER;
+ if (This->refClock)
+ IReferenceClock_AddRef(This->refClock);
+ *clock = This->refClock;
+ return S_OK;
+}
+
+/* IBaseFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_EnumPins(IBaseFilter *iface, IEnumPins **pins)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ IPin *pin[2];
+ TRACE("(%p)->(%p)\n", This, pins);
+ if (!pins)
+ return E_POINTER;
+ pin[0] = (IPin*)&This->pin_in.lpVtbl;
+ pin[1] = (IPin*)&This->pin_out.lpVtbl;
+ *pins = pinsenum_create(iface, pin, 2);
+ return *pins ? S_OK : E_OUTOFMEMORY;
+}
+
+/* IBaseFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_FindPin(IBaseFilter *iface, LPCWSTR id, IPin **pin)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)->(%s, %p)\n", This, debugstr_w(id), pin);
+ if (!id || !pin)
+ return E_POINTER;
+ if (!lstrcmpiW(id,pin_in_name))
+ {
+ SampleGrabber_addref(This);
+ *pin = (IPin*)&(This->pin_in.lpVtbl);
+ return S_OK;
+ }
+ else if (!lstrcmpiW(id,pin_out_name))
+ {
+ SampleGrabber_addref(This);
+ *pin = (IPin*)&(This->pin_out.lpVtbl);
+ return S_OK;
+ }
+ *pin = NULL;
+ return VFW_E_NOT_FOUND;
+}
+
+/* IBaseFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_QueryFilterInfo(IBaseFilter *iface, FILTER_INFO *info)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)->(%p)\n", This, info);
+ if (!info)
+ return E_POINTER;
+ if (This->info.pGraph)
+ IFilterGraph_AddRef(This->info.pGraph);
+ *info = This->info;
+ return S_OK;
+}
+
+/* IBaseFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_JoinFilterGraph(IBaseFilter *iface, IFilterGraph *graph, LPCWSTR name)
+{
+ SG_Impl *This = impl_from_IBaseFilter(iface);
+ TRACE("(%p)->(%p, %s)\n", This, graph, debugstr_w(name));
+ This->info.pGraph = graph;
+ if (name)
+ lstrcpynW(This->info.achName,name,MAX_FILTER_NAME);
+ This->oneShot = OneShot_None;
+ return S_OK;
+}
+
+/* IBaseFilter */
+static HRESULT WINAPI
+SampleGrabber_IBaseFilter_QueryVendorInfo(IBaseFilter *iface, LPWSTR *vendor)
+{
+ TRACE("(%p)\n", vendor);
+ if (!vendor)
+ return E_POINTER;
+ *vendor = CoTaskMemAlloc(sizeof(vendor_name));
+ CopyMemory(*vendor, vendor_name, sizeof(vendor_name));
+ return S_OK;
+}
+
+
+/* SampleGrabber implementation of ISampleGrabber interface */
+
+/* IUnknown */
+static HRESULT WINAPI
+SampleGrabber_ISampleGrabber_QueryInterface(ISampleGrabber *iface, REFIID riid, void **ppvObject)
+{
+ return SampleGrabber_query(impl_from_ISampleGrabber(iface), riid, ppvObject);
+}
+
+/* IUnknown */
+static ULONG WINAPI
+SampleGrabber_ISampleGrabber_AddRef(ISampleGrabber *iface)
+{
+ return SampleGrabber_addref(impl_from_ISampleGrabber(iface));
+}
+
+/* IUnknown */
+static ULONG WINAPI
+SampleGrabber_ISampleGrabber_Release(ISampleGrabber *iface)
+{
+ return SampleGrabber_release(impl_from_ISampleGrabber(iface));
+}
+
+/* ISampleGrabber */
+static HRESULT WINAPI
+SampleGrabber_ISampleGrabber_SetOneShot(ISampleGrabber *iface, BOOL oneShot)
+{
+ SG_Impl *This = impl_from_ISampleGrabber(iface);
+ TRACE("(%p)->(%u)\n", This, oneShot);
+ This->oneShot = oneShot ? OneShot_Wait : OneShot_None;
+ return S_OK;
+}
+
+/* ISampleGrabber */
+static HRESULT WINAPI
+SampleGrabber_ISampleGrabber_SetMediaType(ISampleGrabber *iface, const AM_MEDIA_TYPE *type)
+{
+ SG_Impl *This = impl_from_ISampleGrabber(iface);
+ TRACE("(%p)->(%p)\n", This, type);
+ if (!type)
+ return E_POINTER;
+ TRACE("Media type: %s/%s ssize: %u format: %s (%u bytes)\n",
+ debugstr_guid(&type->majortype), debugstr_guid(&type->subtype),
+ type->lSampleSize,
+ debugstr_guid(&type->formattype), type->cbFormat);
+ if (This->mtype.pbFormat)
+ CoTaskMemFree(This->mtype.pbFormat);
+ This->mtype = *type;
+ This->mtype.pUnk = NULL;
+ if (type->cbFormat) {
+ This->mtype.pbFormat = CoTaskMemAlloc(type->cbFormat);
+ CopyMemory(This->mtype.pbFormat, type->pbFormat, type->cbFormat);
+ }
+ else
+ This->mtype.pbFormat = NULL;
+ return S_OK;
+}
+
+/* ISampleGrabber */
+static HRESULT WINAPI
+SampleGrabber_ISampleGrabber_GetConnectedMediaType(ISampleGrabber *iface, AM_MEDIA_TYPE *type)
+{
+ SG_Impl *This = impl_from_ISampleGrabber(iface);
+ TRACE("(%p)->(%p)\n", This, type);
+ if (!type)
+ return E_POINTER;
+ if (!This->pin_in.pair)
+ return VFW_E_NOT_CONNECTED;
+ *type = This->mtype;
+ if (type->cbFormat) {
+ type->pbFormat = CoTaskMemAlloc(type->cbFormat);
+ CopyMemory(type->pbFormat, This->mtype.pbFormat, type->cbFormat);
+ }
+ return S_OK;
+}
+
+/* ISampleGrabber */
+static HRESULT WINAPI
+SampleGrabber_ISampleGrabber_SetBufferSamples(ISampleGrabber *iface, BOOL bufferEm)
+{
+ SG_Impl *This = impl_from_ISampleGrabber(iface);
+ TRACE("(%p)->(%u)\n", This, bufferEm);
+ EnterCriticalSection(&This->critSect);
+ if (bufferEm) {
+ if (This->bufferLen < 0)
+ This->bufferLen = 0;
+ }
+ else
+ This->bufferLen = -1;
+ LeaveCriticalSection(&This->critSect);
+ return S_OK;
+}
+
+/* ISampleGrabber */
+static HRESULT WINAPI
+SampleGrabber_ISampleGrabber_GetCurrentBuffer(ISampleGrabber *iface, LONG *bufSize, LONG *buffer)
+{
+ SG_Impl *This = impl_from_ISampleGrabber(iface);
+ HRESULT ret = S_OK;
+ TRACE("(%p)->(%p, %p)\n", This, bufSize, buffer);
+ if (!bufSize)
+ return E_POINTER;
+ EnterCriticalSection(&This->critSect);
+ if (!This->pin_in.pair)
+ ret = VFW_E_NOT_CONNECTED;
+ else if (This->bufferLen < 0)
+ ret = E_INVALIDARG;
+ else if (This->bufferLen == 0)
+ ret = VFW_E_WRONG_STATE;
+ else {
+ if (buffer) {
+ if (*bufSize >= This->bufferLen)
+ CopyMemory(buffer, This->bufferData, This->bufferLen);
+ else
+ ret = E_OUTOFMEMORY;
+ }
+ *bufSize = This->bufferLen;
+ }
+ LeaveCriticalSection(&This->critSect);
+ return ret;
+}
+
+/* ISampleGrabber */
+static HRESULT WINAPI
+SampleGrabber_ISampleGrabber_GetCurrentSample(ISampleGrabber *iface, IMediaSample **sample)
+{
+ /* MS doesn't implement it either, noone should call it */
+ WARN("(%p): not implemented\n", sample);
+ return E_NOTIMPL;
+}
+
+/* ISampleGrabber */
+static HRESULT WINAPI
+SampleGrabber_ISampleGrabber_SetCallback(ISampleGrabber *iface, ISampleGrabberCB *cb, LONG whichMethod)
+{
+ SG_Impl *This = impl_from_ISampleGrabber(iface);
+ TRACE("(%p)->(%p, %u)\n", This, cb, whichMethod);
+ if (This->grabberIface)
+ ISampleGrabberCB_Release(This->grabberIface);
+ This->grabberIface = cb;
+ This->grabberMethod = whichMethod;
+ if (cb)
+ ISampleGrabberCB_AddRef(cb);
+ return S_OK;
+}
+
+
+/* SampleGrabber implementation of IMemInputPin interface */
+
+/* IUnknown */
+static HRESULT WINAPI
+SampleGrabber_IMemInputPin_QueryInterface(IMemInputPin *iface, REFIID riid, void **ppvObject)
+{
+ return SampleGrabber_query(impl_from_IMemInputPin(iface), riid, ppvObject);
+}
+
+/* IUnknown */
+static ULONG WINAPI
+SampleGrabber_IMemInputPin_AddRef(IMemInputPin *iface)
+{
+ return SampleGrabber_addref(impl_from_IMemInputPin(iface));
+}
+
+/* IUnknown */
+static ULONG WINAPI
+SampleGrabber_IMemInputPin_Release(IMemInputPin *iface)
+{
+ return SampleGrabber_release(impl_from_IMemInputPin(iface));
+}
+
+/* IMemInputPin */
+static HRESULT WINAPI
+SampleGrabber_IMemInputPin_GetAllocator(IMemInputPin *iface, IMemAllocator **allocator)
+{
+ SG_Impl *This = impl_from_IMemInputPin(iface);
+ TRACE("(%p)->(%p) allocator = %p\n", This, allocator, This->allocator);
+ if (!allocator)
+ return E_POINTER;
+ *allocator = This->allocator;
+ if (!*allocator)
+ return VFW_E_NO_ALLOCATOR;
+ IMemAllocator_AddRef(*allocator);
+ return S_OK;
+}
+
+/* IMemInputPin */
+static HRESULT WINAPI
+SampleGrabber_IMemInputPin_NotifyAllocator(IMemInputPin *iface, IMemAllocator *allocator, BOOL readOnly)
+{
+ SG_Impl *This = impl_from_IMemInputPin(iface);
+ TRACE("(%p)->(%p, %u) allocator = %p\n", This, allocator, readOnly, This->allocator);
+ if (This->allocator == allocator)
+ return S_OK;
+ if (This->allocator)
+ IMemAllocator_Release(This->allocator);
+ This->allocator = allocator;
+ if (allocator)
+ IMemAllocator_AddRef(allocator);
+ return S_OK;
+}
+
+/* IMemInputPin */
+static HRESULT WINAPI
+SampleGrabber_IMemInputPin_GetAllocatorRequirements(IMemInputPin *iface, ALLOCATOR_PROPERTIES *props)
+{
+ SG_Impl *This = impl_from_IMemInputPin(iface);
+ FIXME("(%p)->(%p): semi-stub\n", This, props);
+ if (!props)
+ return E_POINTER;
+ return This->memOutput ? IMemInputPin_GetAllocatorRequirements(This->memOutput, props) : E_NOTIMPL;
+}
+
+/* IMemInputPin */
+static HRESULT WINAPI
+SampleGrabber_IMemInputPin_Receive(IMemInputPin *iface, IMediaSample *sample)
+{
+ SG_Impl *This = impl_from_IMemInputPin(iface);
+ HRESULT hr;
+ TRACE("(%p)->(%p) output = %p, grabber = %p\n", This, sample, This->memOutput, This->grabberIface);
+ if (!sample)
+ return E_POINTER;
+ if ((This->state != State_Running) || (This->oneShot == OneShot_Past))
+ return S_FALSE;
+ SampleGrabber_callback(This, sample);
+ hr = This->memOutput ? IMemInputPin_Receive(This->memOutput, sample) : S_OK;
+ if (This->oneShot == OneShot_Wait) {
+ This->oneShot = OneShot_Past;
+ hr = S_FALSE;
+ if (This->pin_out.pair)
+ IPin_EndOfStream(This->pin_out.pair);
+ }
+ return hr;
+}
+
+/* IMemInputPin */
+static HRESULT WINAPI
+SampleGrabber_IMemInputPin_ReceiveMultiple(IMemInputPin *iface, IMediaSample **samples, LONG nSamples, LONG *nProcessed)
+{
+ SG_Impl *This = impl_from_IMemInputPin(iface);
+ LONG idx;
+ TRACE("(%p)->(%p, %u, %p) output = %p, grabber = %p\n", This, samples, nSamples, nProcessed, This->memOutput, This->grabberIface);
+ if (!samples || !nProcessed)
+ return E_POINTER;
+ if ((This->state != State_Running) || (This->oneShot == OneShot_Past))
+ return S_FALSE;
+ for (idx = 0; idx < nSamples; idx++)
+ SampleGrabber_callback(This, samples[idx]);
+ return This->memOutput ? IMemInputPin_ReceiveMultiple(This->memOutput, samples, nSamples, nProcessed) : S_OK;
+}
+
+/* IMemInputPin */
+static HRESULT WINAPI
+SampleGrabber_IMemInputPin_ReceiveCanBlock(IMemInputPin *iface)
+{
+ SG_Impl *This = impl_from_IMemInputPin(iface);
+ TRACE("(%p)\n", This);
+ return This->memOutput ? IMemInputPin_ReceiveCanBlock(This->memOutput) : S_OK;
+}
+
+
+/* SampleGrabber member pin implementation */
+
+/* IUnknown */
+static ULONG WINAPI
+SampleGrabber_IPin_AddRef(IPin *iface)
+{
+ return SampleGrabber_addref(((SG_Pin *)iface)->sg);
+}
+
+/* IUnknown */
+static ULONG WINAPI
+SampleGrabber_IPin_Release(IPin *iface)
+{
+ return SampleGrabber_release(((SG_Pin *)iface)->sg);
+}
+
+/* IUnknown */
+static HRESULT WINAPI
+SampleGrabber_IPin_QueryInterface(IPin *iface, REFIID riid, void **ppvObject)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppvObject);
+
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IPin)) {
+ SampleGrabber_addref(This->sg);
+ *ppvObject = This;
+ return S_OK;
+ }
+ else if (IsEqualIID(riid, &IID_IMemInputPin)) {
+ SampleGrabber_addref(This->sg);
+ *ppvObject = &(This->sg->IMemInputPin_Vtbl);
+ return S_OK;
+ }
+ *ppvObject = NULL;
+ WARN("(%p, %s,%p): not found\n", This, debugstr_guid(riid), ppvObject);
+ return E_NOINTERFACE;
+}
+
+/* IPin - input pin */
+static HRESULT WINAPI
+SampleGrabber_In_IPin_Connect(IPin *iface, IPin *receiver, const AM_MEDIA_TYPE *mtype)
+{
+ WARN("(%p, %p): unexpected\n", receiver, mtype);
+ return E_UNEXPECTED;
+}
+
+/* IPin - output pin */
+static HRESULT WINAPI
+SampleGrabber_Out_IPin_Connect(IPin *iface, IPin *receiver, const AM_MEDIA_TYPE *type)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ HRESULT hr;
+ TRACE("(%p)->(%p, %p)\n", This, receiver, type);
+ if (!receiver)
+ return E_POINTER;
+ if (This->pair)
+ return VFW_E_ALREADY_CONNECTED;
+ if (This->sg->state != State_Stopped)
+ return VFW_E_NOT_STOPPED;
+ if (type) {
+ TRACE("Media type: %s/%s ssize: %u format: %s (%u bytes)\n",
+ debugstr_guid(&type->majortype), debugstr_guid(&type->subtype),
+ type->lSampleSize,
+ debugstr_guid(&type->formattype), type->cbFormat);
+ if (!IsEqualGUID(&This->sg->mtype.majortype,&GUID_NULL) &&
+ !IsEqualGUID(&This->sg->mtype.majortype,&type->majortype))
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ if (!IsEqualGUID(&This->sg->mtype.subtype,&MEDIASUBTYPE_None) &&
+ !IsEqualGUID(&This->sg->mtype.subtype,&type->subtype))
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ if (!IsEqualGUID(&This->sg->mtype.formattype,&GUID_NULL) &&
+ !IsEqualGUID(&This->sg->mtype.formattype,&FORMAT_None) &&
+ !IsEqualGUID(&This->sg->mtype.formattype,&type->formattype))
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ }
+ else
+ type = &This->sg->mtype;
+ if (!IsEqualGUID(&type->formattype, &FORMAT_None) &&
+ !IsEqualGUID(&type->formattype, &GUID_NULL) &&
+ !type->pbFormat)
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ hr = IPin_ReceiveConnection(receiver,(IPin*)&This->lpVtbl,type);
+ if (FAILED(hr))
+ return hr;
+ This->pair = receiver;
+ if (This->sg->memOutput) {
+ IMemInputPin_Release(This->sg->memOutput);
+ This->sg->memOutput = NULL;
+ }
+ IPin_QueryInterface(receiver,&IID_IMemInputPin,(void **)&(This->sg->memOutput));
+ TRACE("(%p) Accepted IPin %p, IMemInputPin %p\n", This, receiver, This->sg->memOutput);
+ return S_OK;
+}
+
+/* IPin - input pin */
+static HRESULT WINAPI
+SampleGrabber_In_IPin_ReceiveConnection(IPin *iface, IPin *connector, const AM_MEDIA_TYPE *type)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->(%p, %p)\n", This, connector, type);
+ if (!connector)
+ return E_POINTER;
+ if (This->pair)
+ return VFW_E_ALREADY_CONNECTED;
+ if (This->sg->state != State_Stopped)
+ return VFW_E_NOT_STOPPED;
+ if (type) {
+ TRACE("Media type: %s/%s ssize: %u format: %s (%u bytes)\n",
+ debugstr_guid(&type->majortype), debugstr_guid(&type->subtype),
+ type->lSampleSize,
+ debugstr_guid(&type->formattype), type->cbFormat);
+ if (!IsEqualGUID(&type->formattype, &FORMAT_None) &&
+ !IsEqualGUID(&type->formattype, &GUID_NULL) &&
+ !type->pbFormat)
+ return VFW_E_INVALIDMEDIATYPE;
+ if (!IsEqualGUID(&This->sg->mtype.majortype,&GUID_NULL) &&
+ !IsEqualGUID(&This->sg->mtype.majortype,&type->majortype))
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ if (!IsEqualGUID(&This->sg->mtype.subtype,&MEDIASUBTYPE_None) &&
+ !IsEqualGUID(&This->sg->mtype.subtype,&type->subtype))
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ if (!IsEqualGUID(&This->sg->mtype.formattype,&GUID_NULL) &&
+ !IsEqualGUID(&This->sg->mtype.formattype,&FORMAT_None) &&
+ !IsEqualGUID(&This->sg->mtype.formattype,&type->formattype))
+ return VFW_E_TYPE_NOT_ACCEPTED;
+ if (This->sg->mtype.pbFormat)
+ CoTaskMemFree(This->sg->mtype.pbFormat);
+ This->sg->mtype = *type;
+ This->sg->mtype.pUnk = NULL;
+ if (type->cbFormat) {
+ This->sg->mtype.pbFormat = CoTaskMemAlloc(type->cbFormat);
+ CopyMemory(This->sg->mtype.pbFormat, type->pbFormat, type->cbFormat);
+ }
+ else
+ This->sg->mtype.pbFormat = NULL;
+ }
+ This->pair = connector;
+ TRACE("(%p) Accepted IPin %p\n", This, connector);
+ return S_OK;
+}
+
+/* IPin - output pin */
+static HRESULT WINAPI
+SampleGrabber_Out_IPin_ReceiveConnection(IPin *iface, IPin *connector, const AM_MEDIA_TYPE *mtype)
+{
+ WARN("(%p, %p): unexpected\n", connector, mtype);
+ return E_UNEXPECTED;
+}
+
+/* IPin - input pin */
+static HRESULT WINAPI
+SampleGrabber_In_IPin_Disconnect(IPin *iface)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->() pair = %p\n", This, This->pair);
+ if (This->sg->state != State_Stopped)
+ return VFW_E_NOT_STOPPED;
+ if (This->pair) {
+ This->pair = NULL;
+ return S_OK;
+ }
+ return S_FALSE;
+}
+
+/* IPin - output pin */
+static HRESULT WINAPI
+SampleGrabber_Out_IPin_Disconnect(IPin *iface)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->() pair = %p\n", This, This->pair);
+ if (This->sg->state != State_Stopped)
+ return VFW_E_NOT_STOPPED;
+ if (This->pair) {
+ This->pair = NULL;
+ if (This->sg->memOutput) {
+ IMemInputPin_Release(This->sg->memOutput);
+ This->sg->memOutput = NULL;
+ }
+ return S_OK;
+ }
+ return S_FALSE;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_ConnectedTo(IPin *iface, IPin **pin)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->(%p) pair = %p\n", This, pin, This->pair);
+ if (!pin)
+ return E_POINTER;
+ *pin = This->pair;
+ if (*pin) {
+ IPin_AddRef(*pin);
+ return S_OK;
+ }
+ return VFW_E_NOT_CONNECTED;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_ConnectionMediaType(IPin *iface, AM_MEDIA_TYPE *mtype)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->(%p)\n", This, mtype);
+ if (!mtype)
+ return E_POINTER;
+ if (!This->pair)
+ return VFW_E_NOT_CONNECTED;
+ *mtype = This->sg->mtype;
+ if (mtype->cbFormat) {
+ mtype->pbFormat = CoTaskMemAlloc(mtype->cbFormat);
+ CopyMemory(mtype->pbFormat, This->sg->mtype.pbFormat, mtype->cbFormat);
+ }
+ return S_OK;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_QueryPinInfo(IPin *iface, PIN_INFO *info)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->(%p)\n", This, info);
+ if (!info)
+ return E_POINTER;
+ SampleGrabber_addref(This->sg);
+ info->pFilter = (IBaseFilter *)This->sg;
+ info->dir = This->dir;
+ lstrcpynW(info->achName,This->name,MAX_PIN_NAME);
+ return S_OK;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_QueryDirection(IPin *iface, PIN_DIRECTION *dir)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->(%p)\n", This, dir);
+ if (!dir)
+ return E_POINTER;
+ *dir = This->dir;
+ return S_OK;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_QueryId(IPin *iface, LPWSTR *id)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ int len;
+ TRACE("(%p)->(%p)\n", This, id);
+ if (!id)
+ return E_POINTER;
+ len = sizeof(WCHAR)*(1+lstrlenW(This->name));
+ *id = CoTaskMemAlloc(len);
+ CopyMemory(*id, This->name, len);
+ return S_OK;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_QueryAccept(IPin *iface, const AM_MEDIA_TYPE *mtype)
+{
+ TRACE("(%p)\n", mtype);
+ return S_OK;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_EnumMediaTypes(IPin *iface, IEnumMediaTypes **mtypes)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->(%p)\n", This, mtypes);
+ if (!mtypes)
+ return E_POINTER;
+ *mtypes = mediaenum_create(This->sg->pin_in.pair ? &This->sg->mtype : (const AM_MEDIA_TYPE *)NULL);
+ return *mtypes ? S_OK : E_OUTOFMEMORY;
+}
+
+/* IPin - input pin */
+static HRESULT WINAPI
+SampleGrabber_In_IPin_QueryInternalConnections(IPin *iface, IPin **pins, ULONG *nPins)
+{
+ SG_Pin *This = (SG_Pin *)iface;
+ TRACE("(%p)->(%p, %p) size = %u\n", This, pins, nPins, (nPins ? *nPins : 0));
+ if (!nPins)
+ return E_POINTER;
+ if (*nPins) {
+ if (!pins)
+ return E_POINTER;
+ IPin_AddRef((IPin*)&This->sg->pin_out.lpVtbl);
+ *pins = (IPin*)&This->sg->pin_out.lpVtbl;
+ *nPins = 1;
+ return S_OK;
+ }
+ *nPins = 1;
+ return S_FALSE;
+}
+
+/* IPin - output pin */
+static HRESULT WINAPI
+SampleGrabber_Out_IPin_QueryInternalConnections(IPin *iface, IPin **pins, ULONG *nPins)
+{
+ WARN("(%p, %p): unexpected\n", pins, nPins);
+ if (nPins)
+ *nPins = 0;
+ return E_NOTIMPL;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_EndOfStream(IPin *iface)
+{
+ FIXME(": stub\n");
+ return S_OK;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_BeginFlush(IPin *iface)
+{
+ FIXME(": stub\n");
+ return S_OK;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_EndFlush(IPin *iface)
+{
+ FIXME(": stub\n");
+ return S_OK;
+}
+
+/* IPin */
+static HRESULT WINAPI
+SampleGrabber_IPin_NewSegment(IPin *iface, REFERENCE_TIME tStart, REFERENCE_TIME tStop, double rate)
+{
+ FIXME(": stub\n");
+ return S_OK;
+}
+
+
+/* SampleGrabber vtables and constructor */
+
+static const IBaseFilterVtbl IBaseFilter_VTable =
+{
+ SampleGrabber_IBaseFilter_QueryInterface,
+ SampleGrabber_IBaseFilter_AddRef,
+ SampleGrabber_IBaseFilter_Release,
+ SampleGrabber_IBaseFilter_GetClassID,
+ SampleGrabber_IBaseFilter_Stop,
+ SampleGrabber_IBaseFilter_Pause,
+ SampleGrabber_IBaseFilter_Run,
+ SampleGrabber_IBaseFilter_GetState,
+ SampleGrabber_IBaseFilter_SetSyncSource,
+ SampleGrabber_IBaseFilter_GetSyncSource,
+ SampleGrabber_IBaseFilter_EnumPins,
+ SampleGrabber_IBaseFilter_FindPin,
+ SampleGrabber_IBaseFilter_QueryFilterInfo,
+ SampleGrabber_IBaseFilter_JoinFilterGraph,
+ SampleGrabber_IBaseFilter_QueryVendorInfo,
+};
+
+static const ISampleGrabberVtbl ISampleGrabber_VTable =
+{
+ SampleGrabber_ISampleGrabber_QueryInterface,
+ SampleGrabber_ISampleGrabber_AddRef,
+ SampleGrabber_ISampleGrabber_Release,
+ SampleGrabber_ISampleGrabber_SetOneShot,
+ SampleGrabber_ISampleGrabber_SetMediaType,
+ SampleGrabber_ISampleGrabber_GetConnectedMediaType,
+ SampleGrabber_ISampleGrabber_SetBufferSamples,
+ SampleGrabber_ISampleGrabber_GetCurrentBuffer,
+ SampleGrabber_ISampleGrabber_GetCurrentSample,
+ SampleGrabber_ISampleGrabber_SetCallback,
+};
+
+static const IMemInputPinVtbl IMemInputPin_VTable =
+{
+ SampleGrabber_IMemInputPin_QueryInterface,
+ SampleGrabber_IMemInputPin_AddRef,
+ SampleGrabber_IMemInputPin_Release,
+ SampleGrabber_IMemInputPin_GetAllocator,
+ SampleGrabber_IMemInputPin_NotifyAllocator,
+ SampleGrabber_IMemInputPin_GetAllocatorRequirements,
+ SampleGrabber_IMemInputPin_Receive,
+ SampleGrabber_IMemInputPin_ReceiveMultiple,
+ SampleGrabber_IMemInputPin_ReceiveCanBlock,
+};
+
+static const IPinVtbl IPin_In_VTable =
+{
+ SampleGrabber_IPin_QueryInterface,
+ SampleGrabber_IPin_AddRef,
+ SampleGrabber_IPin_Release,
+ SampleGrabber_In_IPin_Connect,
+ SampleGrabber_In_IPin_ReceiveConnection,
+ SampleGrabber_In_IPin_Disconnect,
+ SampleGrabber_IPin_ConnectedTo,
+ SampleGrabber_IPin_ConnectionMediaType,
+ SampleGrabber_IPin_QueryPinInfo,
+ SampleGrabber_IPin_QueryDirection,
+ SampleGrabber_IPin_QueryId,
+ SampleGrabber_IPin_QueryAccept,
+ SampleGrabber_IPin_EnumMediaTypes,
+ SampleGrabber_In_IPin_QueryInternalConnections,
+ SampleGrabber_IPin_EndOfStream,
+ SampleGrabber_IPin_BeginFlush,
+ SampleGrabber_IPin_EndFlush,
+ SampleGrabber_IPin_NewSegment,
+};
+
+static const IPinVtbl IPin_Out_VTable =
+{
+ SampleGrabber_IPin_QueryInterface,
+ SampleGrabber_IPin_AddRef,
+ SampleGrabber_IPin_Release,
+ SampleGrabber_Out_IPin_Connect,
+ SampleGrabber_Out_IPin_ReceiveConnection,
+ SampleGrabber_Out_IPin_Disconnect,
+ SampleGrabber_IPin_ConnectedTo,
+ SampleGrabber_IPin_ConnectionMediaType,
+ SampleGrabber_IPin_QueryPinInfo,
+ SampleGrabber_IPin_QueryDirection,
+ SampleGrabber_IPin_QueryId,
+ SampleGrabber_IPin_QueryAccept,
+ SampleGrabber_IPin_EnumMediaTypes,
+ SampleGrabber_Out_IPin_QueryInternalConnections,
+ SampleGrabber_IPin_EndOfStream,
+ SampleGrabber_IPin_BeginFlush,
+ SampleGrabber_IPin_EndFlush,
+ SampleGrabber_IPin_NewSegment,
+};
+
+HRESULT SampleGrabber_create(IUnknown *pUnkOuter, LPVOID *ppv)
+{
+ SG_Impl* obj = NULL;
+
+ TRACE("(%p,%p)\n", ppv, pUnkOuter);
+
+ if (pUnkOuter)
+ return CLASS_E_NOAGGREGATION;
+
+ obj = CoTaskMemAlloc(sizeof(SG_Impl));
+ if (NULL == obj) {
+ *ppv = NULL;
+ return E_OUTOFMEMORY;
+ }
+ ZeroMemory(obj, sizeof(SG_Impl));
+
+ obj->refCount = 1;
+ obj->IBaseFilter_Vtbl = &IBaseFilter_VTable;
+ obj->ISampleGrabber_Vtbl = &ISampleGrabber_VTable;
+ obj->IMemInputPin_Vtbl = &IMemInputPin_VTable;
+ obj->pin_in.lpVtbl = &IPin_In_VTable;
+ obj->pin_in.dir = PINDIR_INPUT;
+ obj->pin_in.name = pin_in_name;
+ obj->pin_in.sg = obj;
+ obj->pin_in.pair = NULL;
+ obj->pin_out.lpVtbl = &IPin_Out_VTable;
+ obj->pin_out.dir = PINDIR_OUTPUT;
+ obj->pin_out.name = pin_out_name;
+ obj->pin_out.sg = obj;
+ obj->pin_out.pair = NULL;
+ InitializeCriticalSection(&obj->critSect);
+ obj->critSect.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": SG_Impl.critSect");
+ obj->info.achName[0] = 0;
+ obj->info.pGraph = NULL;
+ obj->state = State_Stopped;
+ obj->mtype.majortype = GUID_NULL;
+ obj->mtype.subtype = MEDIASUBTYPE_None;
+ obj->mtype.formattype = FORMAT_None;
+ obj->allocator = NULL;
+ obj->refClock = NULL;
+ obj->memOutput = NULL;
+ obj->grabberIface = NULL;
+ obj->grabberMethod = -1;
+ obj->oneShot = OneShot_None;
+ obj->bufferLen = -1;
+ obj->bufferData = NULL;
+ *ppv = obj;
+
+ return S_OK;
+}
diff --git a/reactos/dll/directx/quartz/dsoundrender.c b/reactos/dll/directx/quartz/dsoundrender.c
index edb170da136..1d87a7f0047 100644
--- a/reactos/dll/directx/quartz/dsoundrender.c
+++ b/reactos/dll/directx/quartz/dsoundrender.c
@@ -32,6 +32,7 @@
#include "evcode.h"
#include "strmif.h"
#include "dsound.h"
+#include "amaudio.h"
#include "wine/unicode.h"
#include "wine/debug.h"
@@ -45,12 +46,14 @@ static const IPinVtbl DSoundRender_InputPin_Vtbl;
static const IBasicAudioVtbl IBasicAudio_Vtbl;
static const IReferenceClockVtbl IReferenceClock_Vtbl;
static const IMediaSeekingVtbl IMediaSeeking_Vtbl;
+static const IAMDirectSoundVtbl IAMDirectSound_Vtbl;
typedef struct DSoundRenderImpl
{
const IBaseFilterVtbl * lpVtbl;
const IBasicAudioVtbl *IBasicAudio_vtbl;
const IReferenceClockVtbl *IReferenceClock_vtbl;
+ const IAMDirectSoundVtbl *IAMDirectSound_vtbl;
LONG refCount;
CRITICAL_SECTION csFilter;
@@ -404,6 +407,7 @@ HRESULT DSoundRender_create(IUnknown * pUnkOuter, LPVOID * ppv)
pDSoundRender->lpVtbl = &DSoundRender_Vtbl;
pDSoundRender->IBasicAudio_vtbl = &IBasicAudio_Vtbl;
pDSoundRender->IReferenceClock_vtbl = &IReferenceClock_Vtbl;
+ pDSoundRender->IAMDirectSound_vtbl = &IAMDirectSound_Vtbl;
pDSoundRender->refCount = 1;
InitializeCriticalSection(&pDSoundRender->csFilter);
pDSoundRender->csFilter.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": DSoundRenderImpl.csFilter");
@@ -473,6 +477,8 @@ static HRESULT WINAPI DSoundRender_QueryInterface(IBaseFilter * iface, REFIID ri
*ppv = &This->IReferenceClock_vtbl;
else if (IsEqualIID(riid, &IID_IMediaSeeking))
*ppv = &This->mediaSeeking.lpVtbl;
+ else if (IsEqualIID(riid, &IID_IAMDirectSound))
+ *ppv = &This->IAMDirectSound_vtbl;
if (*ppv)
{
@@ -1328,3 +1334,121 @@ static const IMediaSeekingVtbl IMediaSeeking_Vtbl =
MediaSeekingImpl_GetRate,
MediaSeekingImpl_GetPreroll
};
+
+/*** IUnknown methods ***/
+static HRESULT WINAPI AMDirectSound_QueryInterface(IAMDirectSound *iface,
+ REFIID riid,
+ LPVOID*ppvObj)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ TRACE("(%p/%p)->(%s (%p), %p)\n", This, iface, debugstr_guid(riid), riid, ppvObj);
+
+ return DSoundRender_QueryInterface((IBaseFilter*)This, riid, ppvObj);
+}
+
+static ULONG WINAPI AMDirectSound_AddRef(IAMDirectSound *iface)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ TRACE("(%p/%p)->()\n", This, iface);
+
+ return DSoundRender_AddRef((IBaseFilter*)This);
+}
+
+static ULONG WINAPI AMDirectSound_Release(IAMDirectSound *iface)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ TRACE("(%p/%p)->()\n", This, iface);
+
+ return DSoundRender_Release((IBaseFilter*)This);
+}
+
+/*** IAMDirectSound methods ***/
+static HRESULT WINAPI AMDirectSound_GetDirectSoundInterface(IAMDirectSound *iface, IDirectSound **ds)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", This, iface, ds);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI AMDirectSound_GetPrimaryBufferInterface(IAMDirectSound *iface, IDirectSoundBuffer **buf)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", This, iface, buf);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI AMDirectSound_GetSecondaryBufferInterface(IAMDirectSound *iface, IDirectSoundBuffer **buf)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", This, iface, buf);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI AMDirectSound_ReleaseDirectSoundInterface(IAMDirectSound *iface, IDirectSound *ds)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", This, iface, ds);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI AMDirectSound_ReleasePrimaryBufferInterface(IAMDirectSound *iface, IDirectSoundBuffer *buf)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", This, iface, buf);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI AMDirectSound_ReleaseSecondaryBufferInterface(IAMDirectSound *iface, IDirectSoundBuffer *buf)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", This, iface, buf);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI AMDirectSound_SetFocusWindow(IAMDirectSound *iface, HWND hwnd, BOOL bgsilent)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ FIXME("(%p/%p)->(%p,%d): stub\n", This, iface, hwnd, bgsilent);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI AMDirectSound_GetFocusWindow(IAMDirectSound *iface, HWND hwnd)
+{
+ ICOM_THIS_MULTI(DSoundRenderImpl, IAMDirectSound_vtbl, iface);
+
+ FIXME("(%p/%p)->(%p): stub\n", This, iface, hwnd);
+
+ return E_NOTIMPL;
+}
+
+static const IAMDirectSoundVtbl IAMDirectSound_Vtbl =
+{
+ AMDirectSound_QueryInterface,
+ AMDirectSound_AddRef,
+ AMDirectSound_Release,
+ AMDirectSound_GetDirectSoundInterface,
+ AMDirectSound_GetPrimaryBufferInterface,
+ AMDirectSound_GetSecondaryBufferInterface,
+ AMDirectSound_ReleaseDirectSoundInterface,
+ AMDirectSound_ReleasePrimaryBufferInterface,
+ AMDirectSound_ReleaseSecondaryBufferInterface,
+ AMDirectSound_SetFocusWindow,
+ AMDirectSound_GetFocusWindow
+};
diff --git a/reactos/dll/directx/quartz/filesource.c b/reactos/dll/directx/quartz/filesource.c
index 5f6350fb99f..cb9282c8bb5 100644
--- a/reactos/dll/directx/quartz/filesource.c
+++ b/reactos/dll/directx/quartz/filesource.c
@@ -395,7 +395,8 @@ static HRESULT WINAPI AsyncReader_QueryInterface(IBaseFilter * iface, REFIID rii
return S_OK;
}
- if (!IsEqualIID(riid, &IID_IPin) && !IsEqualIID(riid, &IID_IMediaSeeking) && !IsEqualIID(riid, &IID_IVideoWindow))
+ if (!IsEqualIID(riid, &IID_IPin) && !IsEqualIID(riid, &IID_IMediaSeeking) &&
+ !IsEqualIID(riid, &IID_IVideoWindow) && !IsEqualIID(riid, &IID_IBasicAudio))
FIXME("No interface for %s!\n", qzdebugstr_guid(riid));
return E_NOINTERFACE;
diff --git a/reactos/dll/directx/quartz/filtermapper.c b/reactos/dll/directx/quartz/filtermapper.c
index 7b8d95430bf..bacb72950d6 100644
--- a/reactos/dll/directx/quartz/filtermapper.c
+++ b/reactos/dll/directx/quartz/filtermapper.c
@@ -479,11 +479,16 @@ static HRESULT WINAPI FilterMapper2_UnregisterFilter(
static HRESULT FM2_WriteFriendlyName(IPropertyBag * pPropBag, LPCWSTR szName)
{
VARIANT var;
+ HRESULT ret;
+ BSTR value;
V_VT(&var) = VT_BSTR;
- V_UNION(&var, bstrVal) = (BSTR)szName;
+ V_UNION(&var, bstrVal) = value = SysAllocString(szName);
- return IPropertyBag_Write(pPropBag, wszFriendlyName, &var);
+ ret = IPropertyBag_Write(pPropBag, wszFriendlyName, &var);
+ SysFreeString(value);
+
+ return ret;
}
static HRESULT FM2_WriteClsid(IPropertyBag * pPropBag, REFCLSID clsid)
diff --git a/reactos/dll/directx/quartz/pin.c b/reactos/dll/directx/quartz/pin.c
index 2e24d520667..ca34d9331c5 100644
--- a/reactos/dll/directx/quartz/pin.c
+++ b/reactos/dll/directx/quartz/pin.c
@@ -765,9 +765,6 @@ HRESULT WINAPI OutputPin_Connect(IPin * iface, IPin * pReceivePin, const AM_MEDI
{
assert(pmtCandidate);
dump_AM_MEDIA_TYPE(pmtCandidate);
- if (!IsEqualGUID(&FORMAT_None, &pmtCandidate->formattype)
- && !IsEqualGUID(&GUID_NULL, &pmtCandidate->formattype))
- assert(pmtCandidate->pbFormat);
if (( !pmt || CompareMediaTypes(pmt, pmtCandidate, TRUE) ) &&
(This->pConnectSpecific(iface, pReceivePin, pmtCandidate) == S_OK))
{
diff --git a/reactos/dll/directx/quartz/quartz.rbuild b/reactos/dll/directx/quartz/quartz.rbuild
index 982a73dd425..b7097f6ff1f 100644
--- a/reactos/dll/directx/quartz/quartz.rbuild
+++ b/reactos/dll/directx/quartz/quartz.rbuild
@@ -60,4 +60,5 @@
quartz_strmif.idl
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/reactos/dll/directx/wine/d3d8/d3d8_main.c b/reactos/dll/directx/wine/d3d8/d3d8_main.c
index 6300371842a..c471049714b 100644
--- a/reactos/dll/directx/wine/d3d8/d3d8_main.c
+++ b/reactos/dll/directx/wine/d3d8/d3d8_main.c
@@ -35,7 +35,7 @@ void WINAPI DebugSetMute(void) {
/* nothing to do */
}
-IDirect3D8* WINAPI Direct3DCreate8(UINT SDKVersion) {
+IDirect3D8* WINAPI DECLSPEC_HOTPATCH Direct3DCreate8(UINT SDKVersion) {
IDirect3D8Impl* object;
TRACE("SDKVersion = %x\n", SDKVersion);
@@ -79,7 +79,12 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
HRESULT WINAPI ValidateVertexShader(DWORD* vertexshader, DWORD* reserved1, DWORD* reserved2, BOOL bool, DWORD* toto)
{
HRESULT ret;
- FIXME("(%p %p %p %d %p): stub\n", vertexshader, reserved1, reserved2, bool, toto);
+ static BOOL warned;
+
+ if (TRACE_ON(d3d8) || !warned) {
+ FIXME("(%p %p %p %d %p): stub\n", vertexshader, reserved1, reserved2, bool, toto);
+ warned = TRUE;
+ }
if (!vertexshader)
return E_FAIL;
@@ -109,7 +114,12 @@ HRESULT WINAPI ValidateVertexShader(DWORD* vertexshader, DWORD* reserved1, DWORD
HRESULT WINAPI ValidatePixelShader(DWORD* pixelshader, DWORD* reserved1, BOOL bool, DWORD* toto)
{
HRESULT ret;
- FIXME("(%p %p %d %p): stub\n", pixelshader, reserved1, bool, toto);
+ static BOOL warned;
+
+ if (TRACE_ON(d3d8) || !warned) {
+ FIXME("(%p %p %d %p): stub\n", pixelshader, reserved1, bool, toto);
+ warned = TRUE;
+ }
if (!pixelshader)
return E_FAIL;
diff --git a/reactos/dll/directx/wine/d3d8/d3d8_private.h b/reactos/dll/directx/wine/d3d8/d3d8_private.h
index 2c5f66f1d5f..4ba399b5d92 100644
--- a/reactos/dll/directx/wine/d3d8/d3d8_private.h
+++ b/reactos/dll/directx/wine/d3d8/d3d8_private.h
@@ -275,18 +275,6 @@ HRESULT surface_init(IDirect3DSurface8Impl *surface, IDirect3DDevice8Impl *devic
UINT width, UINT height, D3DFORMAT format, BOOL lockable, BOOL discard, UINT level,
DWORD usage, D3DPOOL pool, D3DMULTISAMPLE_TYPE multisample_type, DWORD multisample_quality) DECLSPEC_HIDDEN;
-/* ------------------ */
-/* IDirect3DResource8 */
-/* ------------------ */
-
-/*****************************************************************************
- * Predeclare the interface implementation structures
- */
-extern const IDirect3DResource8Vtbl Direct3DResource8_Vtbl DECLSPEC_HIDDEN;
-
-/*****************************************************************************
- * IDirect3DResource8 implementation structure
- */
struct IDirect3DResource8Impl
{
/* IUnknown fields */
diff --git a/reactos/dll/directx/wine/d3d8/device.c b/reactos/dll/directx/wine/d3d8/device.c
index 5365640fd06..11697b2ff26 100644
--- a/reactos/dll/directx/wine/d3d8/device.c
+++ b/reactos/dll/directx/wine/d3d8/device.c
@@ -1047,7 +1047,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_BeginScene(LPDIRECT3DDEVICE8 iface) {
return hr;
}
-static HRESULT WINAPI IDirect3DDevice8Impl_EndScene(LPDIRECT3DDEVICE8 iface) {
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice8Impl_EndScene(LPDIRECT3DDEVICE8 iface) {
IDirect3DDevice8Impl *This = (IDirect3DDevice8Impl *)iface;
HRESULT hr;
diff --git a/reactos/dll/directx/wine/d3d9/d3d9_main.c b/reactos/dll/directx/wine/d3d9/d3d9_main.c
index 339cc61c3be..c405a5747d7 100644
--- a/reactos/dll/directx/wine/d3d9/d3d9_main.c
+++ b/reactos/dll/directx/wine/d3d9/d3d9_main.c
@@ -33,7 +33,7 @@ void WINAPI DebugSetMute(void) {
/* nothing to do */
}
-IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion) {
+IDirect3D9* WINAPI DECLSPEC_HOTPATCH Direct3DCreate9(UINT SDKVersion) {
IDirect3D9Impl* object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3D9Impl));
object->lpVtbl = &Direct3D9_Vtbl;
@@ -53,7 +53,7 @@ IDirect3D9* WINAPI Direct3DCreate9(UINT SDKVersion) {
return (IDirect3D9*) object;
}
-HRESULT WINAPI Direct3DCreate9Ex(UINT SDKVersion, IDirect3D9Ex **direct3d9ex) {
+HRESULT WINAPI DECLSPEC_HOTPATCH Direct3DCreate9Ex(UINT SDKVersion, IDirect3D9Ex **direct3d9ex) {
IDirect3D9 *ret;
IDirect3D9Impl* object;
diff --git a/reactos/dll/directx/wine/d3d9/d3d9_private.h b/reactos/dll/directx/wine/d3d9/d3d9_private.h
index 7736beace67..eb3a032f18b 100644
--- a/reactos/dll/directx/wine/d3d9/d3d9_private.h
+++ b/reactos/dll/directx/wine/d3d9/d3d9_private.h
@@ -187,11 +187,6 @@ HRESULT device_init(IDirect3DDevice9Impl *device, IWineD3D *wined3d, UINT adapte
extern HRESULT WINAPI IDirect3DDevice9Impl_GetSwapChain(IDirect3DDevice9Ex *iface,
UINT iSwapChain, IDirect3DSwapChain9 **pSwapChain) DECLSPEC_HIDDEN;
extern UINT WINAPI IDirect3DDevice9Impl_GetNumberOfSwapChains(IDirect3DDevice9Ex *iface) DECLSPEC_HIDDEN;
-extern HRESULT WINAPI IDirect3DDevice9Impl_CreateStateBlock(IDirect3DDevice9Ex *iface,
- D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9 **ppSB) DECLSPEC_HIDDEN;
-extern HRESULT WINAPI IDirect3DDevice9Impl_BeginStateBlock(IDirect3DDevice9Ex *iface) DECLSPEC_HIDDEN;
-extern HRESULT WINAPI IDirect3DDevice9Impl_EndStateBlock(IDirect3DDevice9Ex *iface,
- IDirect3DStateBlock9 **ppSB) DECLSPEC_HIDDEN;
extern HRESULT WINAPI IDirect3DDevice9Impl_SetVertexDeclaration(IDirect3DDevice9Ex *iface,
IDirect3DVertexDeclaration9 *pDecl) DECLSPEC_HIDDEN;
extern HRESULT WINAPI IDirect3DDevice9Impl_GetVertexDeclaration(IDirect3DDevice9Ex *iface,
@@ -228,9 +223,6 @@ extern HRESULT WINAPI IDirect3DDevice9Impl_SetPixelShaderConstantB(IDirect3DDevi
UINT StartRegister, const BOOL *pConstantData, UINT BoolCount) DECLSPEC_HIDDEN;
extern HRESULT WINAPI IDirect3DDevice9Impl_GetPixelShaderConstantB(IDirect3DDevice9Ex *iface,
UINT StartRegister, BOOL *pConstantData, UINT BoolCount) DECLSPEC_HIDDEN;
-extern HRESULT WINAPI IDirect3DDevice9Impl_CreateQuery(IDirect3DDevice9Ex *iface,
- D3DQUERYTYPE Type, IDirect3DQuery9 **ppQuery) DECLSPEC_HIDDEN;
-
/* ---------------- */
/* IDirect3DVolume9 */
@@ -470,6 +462,8 @@ typedef struct IDirect3DStateBlock9Impl {
LPDIRECT3DDEVICE9EX parentDevice;
} IDirect3DStateBlock9Impl;
+HRESULT stateblock_init(IDirect3DStateBlock9Impl *stateblock, IDirect3DDevice9Impl *device,
+ D3DSTATEBLOCKTYPE type, IWineD3DStateBlock *wined3d_stateblock) DECLSPEC_HIDDEN;
/* --------------------------- */
/* IDirect3DVertexDeclaration9 */
@@ -564,4 +558,7 @@ typedef struct IDirect3DQuery9Impl {
LPDIRECT3DDEVICE9EX parentDevice;
} IDirect3DQuery9Impl;
+HRESULT query_init(IDirect3DQuery9Impl *query, IDirect3DDevice9Impl *device,
+ D3DQUERYTYPE type) DECLSPEC_HIDDEN;
+
#endif /* __WINE_D3D9_PRIVATE_H */
diff --git a/reactos/dll/directx/wine/d3d9/device.c b/reactos/dll/directx/wine/d3d9/device.c
index 6b70c84cf27..79a9ba01834 100644
--- a/reactos/dll/directx/wine/d3d9/device.c
+++ b/reactos/dll/directx/wine/d3d9/device.c
@@ -248,7 +248,7 @@ static ULONG WINAPI IDirect3DDevice9Impl_AddRef(LPDIRECT3DDEVICE9EX iface) {
return ref;
}
-static ULONG WINAPI IDirect3DDevice9Impl_Release(LPDIRECT3DDEVICE9EX iface) {
+static ULONG WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_Release(LPDIRECT3DDEVICE9EX iface) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
ULONG ref;
@@ -452,7 +452,7 @@ static BOOL WINAPI IDirect3DDevice9Impl_ShowCursor(LPDIRECT3DDEVICE9EX ifac
return ret;
}
-static HRESULT WINAPI IDirect3DDevice9Impl_CreateAdditionalSwapChain(IDirect3DDevice9Ex *iface,
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_CreateAdditionalSwapChain(IDirect3DDevice9Ex *iface,
D3DPRESENT_PARAMETERS *present_parameters, IDirect3DSwapChain9 **swapchain)
{
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
@@ -541,7 +541,7 @@ static HRESULT WINAPI reset_enum_callback(IWineD3DResource *resource, void *data
return ret;
}
-static HRESULT WINAPI IDirect3DDevice9Impl_Reset(LPDIRECT3DDEVICE9EX iface, D3DPRESENT_PARAMETERS* pPresentationParameters) {
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_Reset(LPDIRECT3DDEVICE9EX iface, D3DPRESENT_PARAMETERS* pPresentationParameters) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
WINED3DPRESENT_PARAMETERS localParameters;
HRESULT hr;
@@ -619,7 +619,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_Reset(LPDIRECT3DDEVICE9EX iface, D3DP
return hr;
}
-static HRESULT WINAPI IDirect3DDevice9Impl_Present(LPDIRECT3DDEVICE9EX iface, CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA*
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_Present(LPDIRECT3DDEVICE9EX iface, CONST RECT* pSourceRect,CONST RECT* pDestRect,HWND hDestWindowOverride,CONST RGNDATA*
pDirtyRegion) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
HRESULT hr;
@@ -1182,7 +1182,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_BeginScene(LPDIRECT3DDEVICE9EX ifac
return hr;
}
-static HRESULT WINAPI IDirect3DDevice9Impl_EndScene(LPDIRECT3DDEVICE9EX iface) {
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_EndScene(LPDIRECT3DDEVICE9EX iface) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
HRESULT hr;
@@ -1388,7 +1388,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_GetClipPlane(LPDIRECT3DDEVICE9EX if
return hr;
}
-static HRESULT WINAPI IDirect3DDevice9Impl_SetRenderState(LPDIRECT3DDEVICE9EX iface, D3DRENDERSTATETYPE State, DWORD Value) {
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_SetRenderState(LPDIRECT3DDEVICE9EX iface, D3DRENDERSTATETYPE State, DWORD Value) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
HRESULT hr;
@@ -1414,6 +1414,97 @@ static HRESULT WINAPI IDirect3DDevice9Impl_GetRenderState(LPDIRECT3DDEVICE9EX
return hr;
}
+static HRESULT WINAPI IDirect3DDevice9Impl_CreateStateBlock(IDirect3DDevice9Ex *iface,
+ D3DSTATEBLOCKTYPE type, IDirect3DStateBlock9 **stateblock)
+{
+ IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
+ IDirect3DStateBlock9Impl *object;
+ HRESULT hr;
+
+ TRACE("iface %p, type %#x, stateblock %p.\n", iface, type, stateblock);
+
+ if (type != D3DSBT_ALL && type != D3DSBT_PIXELSTATE && type != D3DSBT_VERTEXSTATE)
+ {
+ WARN("Unexpected stateblock type, returning D3DERR_INVALIDCALL.\n");
+ return D3DERR_INVALIDCALL;
+ }
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+ if (!object)
+ {
+ ERR("Failed to allocate stateblock memory.\n");
+ return E_OUTOFMEMORY;
+ }
+
+ hr = stateblock_init(object, This, type, NULL);
+ if (FAILED(hr))
+ {
+ WARN("Failed to initialize stateblock, hr %#x.\n", hr);
+ HeapFree(GetProcessHeap(), 0, object);
+ return hr;
+ }
+
+ TRACE("Created stateblock %p.\n", object);
+ *stateblock = (IDirect3DStateBlock9 *)object;
+
+ return D3D_OK;
+}
+
+static HRESULT WINAPI IDirect3DDevice9Impl_BeginStateBlock(IDirect3DDevice9Ex *iface)
+{
+ IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
+ HRESULT hr;
+
+ TRACE("iface %p.\n", iface);
+
+ wined3d_mutex_lock();
+ hr = IWineD3DDevice_BeginStateBlock(This->WineD3DDevice);
+ wined3d_mutex_unlock();
+
+ return hr;
+}
+
+static HRESULT WINAPI IDirect3DDevice9Impl_EndStateBlock(IDirect3DDevice9Ex *iface, IDirect3DStateBlock9 **stateblock)
+{
+ IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
+ IWineD3DStateBlock *wined3d_stateblock;
+ IDirect3DStateBlock9Impl *object;
+ HRESULT hr;
+
+ TRACE("iface %p, stateblock %p.\n", iface, stateblock);
+
+ wined3d_mutex_lock();
+ hr = IWineD3DDevice_EndStateBlock(This->WineD3DDevice, &wined3d_stateblock);
+ wined3d_mutex_unlock();
+ if (FAILED(hr))
+ {
+ WARN("IWineD3DDevice_EndStateBlock() failed, hr %#x.\n", hr);
+ return hr;
+ }
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+ if (!object)
+ {
+ ERR("Failed to allocate stateblock memory.\n");
+ IWineD3DStateBlock_Release(wined3d_stateblock);
+ return E_OUTOFMEMORY;
+ }
+
+ hr = stateblock_init(object, This, 0, wined3d_stateblock);
+ if (FAILED(hr))
+ {
+ WARN("Failed to initialize stateblock, hr %#x.\n", hr);
+ IWineD3DStateBlock_Release(wined3d_stateblock);
+ HeapFree(GetProcessHeap(), 0, object);
+ return hr;
+ }
+
+ TRACE("Created stateblock %p.\n", object);
+ *stateblock = (IDirect3DStateBlock9 *)object;
+
+ return D3D_OK;
+}
+
static HRESULT WINAPI IDirect3DDevice9Impl_SetClipStatus(LPDIRECT3DDEVICE9EX iface, CONST D3DCLIPSTATUS9* pClipStatus) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
HRESULT hr;
@@ -1559,7 +1650,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_GetSamplerState(IDirect3DDevice9Ex *i
return hr;
}
-static HRESULT WINAPI IDirect3DDevice9Impl_SetSamplerState(LPDIRECT3DDEVICE9EX iface, DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) {
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_SetSamplerState(LPDIRECT3DDEVICE9EX iface, DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
HRESULT hr;
@@ -2178,6 +2269,37 @@ static HRESULT WINAPI IDirect3DDevice9Impl_DeletePatch(LPDIRECT3DDEVICE9EX ifa
return hr;
}
+static HRESULT WINAPI IDirect3DDevice9Impl_CreateQuery(IDirect3DDevice9Ex *iface,
+ D3DQUERYTYPE type, IDirect3DQuery9 **query)
+{
+ IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
+ IDirect3DQuery9Impl *object;
+ HRESULT hr;
+
+ TRACE("iface %p, type %#x, query %p.\n", iface, type, query);
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+ if (!object)
+ {
+ ERR("Failed to allocate query memory.\n");
+ return E_OUTOFMEMORY;
+ }
+
+ hr = query_init(object, This, type);
+ if (FAILED(hr))
+ {
+ WARN("Failed to initialize query, hr %#x.\n", hr);
+ HeapFree(GetProcessHeap(), 0, object);
+ return hr;
+ }
+
+ TRACE("Created query %p.\n", object);
+ if (query) *query = (IDirect3DQuery9 *)object;
+ else IDirect3DQuery9_Release((IDirect3DQuery9 *)object);
+
+ return D3D_OK;
+}
+
static HRESULT WINAPI IDirect3DDevice9ExImpl_SetConvolutionMonoKernel(IDirect3DDevice9Ex *iface,
UINT width, UINT height, float *rows, float *columns)
{
diff --git a/reactos/dll/directx/wine/d3d9/directx.c b/reactos/dll/directx/wine/d3d9/directx.c
index 5f5e8f913d4..1fcc8c47fcf 100644
--- a/reactos/dll/directx/wine/d3d9/directx.c
+++ b/reactos/dll/directx/wine/d3d9/directx.c
@@ -407,7 +407,7 @@ static HMONITOR WINAPI IDirect3D9Impl_GetAdapterMonitor(LPDIRECT3D9EX iface, UIN
return ret;
}
-static HRESULT WINAPI IDirect3D9Impl_CreateDevice(IDirect3D9Ex *iface, UINT adapter,
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3D9Impl_CreateDevice(IDirect3D9Ex *iface, UINT adapter,
D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters,
IDirect3DDevice9 **device)
{
@@ -465,7 +465,7 @@ static HRESULT WINAPI IDirect3D9ExImpl_GetAdapterDisplayModeEx(IDirect3D9Ex *ifa
return D3DERR_DRIVERINTERNALERROR;
}
-static HRESULT WINAPI IDirect3D9ExImpl_CreateDeviceEx(IDirect3D9Ex *iface,
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3D9ExImpl_CreateDeviceEx(IDirect3D9Ex *iface,
UINT adapter, D3DDEVTYPE device_type, HWND focus_window, DWORD flags,
D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode, IDirect3DDevice9Ex **device)
{
diff --git a/reactos/dll/directx/wine/d3d9/query.c b/reactos/dll/directx/wine/d3d9/query.c
index ecb2e718eeb..a38dc9d15fb 100644
--- a/reactos/dll/directx/wine/d3d9/query.c
+++ b/reactos/dll/directx/wine/d3d9/query.c
@@ -150,49 +150,24 @@ static const IDirect3DQuery9Vtbl Direct3DQuery9_Vtbl =
IDirect3DQuery9Impl_GetData
};
+HRESULT query_init(IDirect3DQuery9Impl *query, IDirect3DDevice9Impl *device, D3DQUERYTYPE type)
+{
+ HRESULT hr;
-/* IDirect3DDevice9 IDirect3DQuery9 Methods follow: */
-HRESULT WINAPI IDirect3DDevice9Impl_CreateQuery(LPDIRECT3DDEVICE9EX iface, D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) {
- IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
- IDirect3DQuery9Impl *object = NULL;
- HRESULT hr = D3D_OK;
+ query->lpVtbl = &Direct3DQuery9_Vtbl;
+ query->ref = 1;
- TRACE("iface %p, type %#x, query %p.\n", iface, Type, ppQuery);
-
- if (!ppQuery)
+ wined3d_mutex_lock();
+ hr = IWineD3DDevice_CreateQuery(device->WineD3DDevice, type, &query->wineD3DQuery, (IUnknown *)query);
+ wined3d_mutex_unlock();
+ if (FAILED(hr))
{
- wined3d_mutex_lock();
- hr = IWineD3DDevice_CreateQuery(This->WineD3DDevice, Type, NULL, NULL);
- wined3d_mutex_unlock();
-
+ WARN("Failed to create wined3d query, hr %#x.\n", hr);
return hr;
}
- /* Allocate the storage for the device */
- object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DQuery9Impl));
- if (NULL == object) {
- ERR("Allocation of memory failed, returning D3DERR_OUTOFVIDEOMEMORY\n");
- return D3DERR_OUTOFVIDEOMEMORY;
- }
+ query->parentDevice = (IDirect3DDevice9Ex *)device;
+ IDirect3DDevice9Ex_AddRef(query->parentDevice);
- object->lpVtbl = &Direct3DQuery9_Vtbl;
- object->ref = 1;
-
- wined3d_mutex_lock();
- hr = IWineD3DDevice_CreateQuery(This->WineD3DDevice, Type, &object->wineD3DQuery, (IUnknown *)object);
- wined3d_mutex_unlock();
-
- if (FAILED(hr)) {
-
- /* free up object */
- WARN("(%p) call to IWineD3DDevice_CreateQuery failed\n", This);
- HeapFree(GetProcessHeap(), 0, object);
- } else {
- IDirect3DDevice9Ex_AddRef(iface);
- object->parentDevice = iface;
- *ppQuery = (LPDIRECT3DQUERY9) object;
- TRACE("(%p) : Created query %p\n", This , object);
- }
- TRACE("(%p) : returning %x\n", This, hr);
- return hr;
+ return D3D_OK;
}
diff --git a/reactos/dll/directx/wine/d3d9/stateblock.c b/reactos/dll/directx/wine/d3d9/stateblock.c
index 7cd3ba629e0..c4941db254b 100644
--- a/reactos/dll/directx/wine/d3d9/stateblock.c
+++ b/reactos/dll/directx/wine/d3d9/stateblock.c
@@ -123,87 +123,33 @@ static const IDirect3DStateBlock9Vtbl Direct3DStateBlock9_Vtbl =
IDirect3DStateBlock9Impl_Apply
};
-
-/* IDirect3DDevice9 IDirect3DStateBlock9 Methods follow: */
-HRESULT WINAPI IDirect3DDevice9Impl_CreateStateBlock(LPDIRECT3DDEVICE9EX iface, D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppStateBlock) {
- IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
- IDirect3DStateBlock9Impl* object;
- HRESULT hrc = D3D_OK;
-
- TRACE("iface %p, type %#x, stateblock %p.\n", iface, Type, ppStateBlock);
-
- if(Type != D3DSBT_ALL && Type != D3DSBT_PIXELSTATE &&
- Type != D3DSBT_VERTEXSTATE ) {
- WARN("Unexpected stateblock type, returning D3DERR_INVALIDCALL\n");
- return D3DERR_INVALIDCALL;
- }
-
- object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DStateBlock9Impl));
- if (NULL == object) return E_OUTOFMEMORY;
- object->lpVtbl = &Direct3DStateBlock9_Vtbl;
- object->ref = 1;
-
- wined3d_mutex_lock();
- hrc = IWineD3DDevice_CreateStateBlock(This->WineD3DDevice, (WINED3DSTATEBLOCKTYPE)Type, &object->wineD3DStateBlock, (IUnknown*)object);
- wined3d_mutex_unlock();
-
- if(hrc != D3D_OK){
- FIXME("(%p) Call to IWineD3DDevice_CreateStateBlock failed.\n", This);
- HeapFree(GetProcessHeap(), 0, object);
- } else {
- IDirect3DDevice9Ex_AddRef(iface);
- object->parentDevice = iface;
- *ppStateBlock = (IDirect3DStateBlock9*)object;
- TRACE("(%p) : Created stateblock %p\n", This, object);
- }
- TRACE("(%p) returning token (ptr to stateblock) of %p\n", This, object);
- return hrc;
-}
-
-HRESULT WINAPI IDirect3DDevice9Impl_BeginStateBlock(IDirect3DDevice9Ex *iface)
+HRESULT stateblock_init(IDirect3DStateBlock9Impl *stateblock, IDirect3DDevice9Impl *device,
+ D3DSTATEBLOCKTYPE type, IWineD3DStateBlock *wined3d_stateblock)
{
- IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
HRESULT hr;
- TRACE("iface %p.\n", iface);
+ stateblock->lpVtbl = &Direct3DStateBlock9_Vtbl;
+ stateblock->ref = 1;
- wined3d_mutex_lock();
- hr = IWineD3DDevice_BeginStateBlock(This->WineD3DDevice);
- wined3d_mutex_unlock();
-
- return hr;
-}
-
-HRESULT WINAPI IDirect3DDevice9Impl_EndStateBlock(IDirect3DDevice9Ex *iface, IDirect3DStateBlock9 **ppSB)
-{
- IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
- IWineD3DStateBlock *wineD3DStateBlock;
- IDirect3DStateBlock9Impl *object;
- HRESULT hr;
-
- TRACE("iface %p, stateblock %p.\n", iface, ppSB);
-
- /* Tell wineD3D to endstateblock before anything else (in case we run out
- * of memory later and cause locking problems) */
- wined3d_mutex_lock();
- hr=IWineD3DDevice_EndStateBlock(This->WineD3DDevice,&wineD3DStateBlock);
- wined3d_mutex_unlock();
-
- if (hr!= D3D_OK)
+ if (wined3d_stateblock)
{
- WARN("IWineD3DDevice_EndStateBlock returned an error\n");
- return hr;
+ stateblock->wineD3DStateBlock = wined3d_stateblock;
+ }
+ else
+ {
+ wined3d_mutex_lock();
+ hr = IWineD3DDevice_CreateStateBlock(device->WineD3DDevice, (WINED3DSTATEBLOCKTYPE)type,
+ &stateblock->wineD3DStateBlock, (IUnknown *)stateblock);
+ wined3d_mutex_unlock();
+ if (FAILED(hr))
+ {
+ WARN("Failed to create wined3d stateblock, hr %#x.\n", hr);
+ return hr;
+ }
}
- /* allocate a new IDirectD3DStateBlock */
- object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirect3DStateBlock9Impl));
- if (!object) return E_OUTOFMEMORY;
- object->ref = 1;
- object->lpVtbl = &Direct3DStateBlock9_Vtbl;
- object->wineD3DStateBlock = wineD3DStateBlock;
- IDirect3DDevice9Ex_AddRef(iface);
- object->parentDevice = iface;
- *ppSB=(IDirect3DStateBlock9*)object;
- TRACE("(%p) Returning *ppSB %p, wineD3DStateBlock %p\n", This, *ppSB, wineD3DStateBlock);
+ stateblock->parentDevice = (IDirect3DDevice9Ex *)device;
+ IDirect3DDevice9Ex_AddRef(stateblock->parentDevice);
+
return D3D_OK;
}
diff --git a/reactos/dll/directx/wine/d3d9/swapchain.c b/reactos/dll/directx/wine/d3d9/swapchain.c
index 207504559ee..c692371a258 100644
--- a/reactos/dll/directx/wine/d3d9/swapchain.c
+++ b/reactos/dll/directx/wine/d3d9/swapchain.c
@@ -79,7 +79,7 @@ static ULONG WINAPI IDirect3DSwapChain9Impl_Release(LPDIRECT3DSWAPCHAIN9 iface)
}
/* IDirect3DSwapChain9 parts follow: */
-static HRESULT WINAPI IDirect3DSwapChain9Impl_Present(LPDIRECT3DSWAPCHAIN9 iface, CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion, DWORD dwFlags) {
+static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DSwapChain9Impl_Present(LPDIRECT3DSWAPCHAIN9 iface, CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion, DWORD dwFlags) {
IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface;
HRESULT hr;
@@ -269,7 +269,7 @@ HRESULT swapchain_init(IDirect3DSwapChain9Impl *swapchain, IDirect3DDevice9Impl
return D3D_OK;
}
-HRESULT WINAPI IDirect3DDevice9Impl_GetSwapChain(LPDIRECT3DDEVICE9EX iface, UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) {
+HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_GetSwapChain(LPDIRECT3DDEVICE9EX iface, UINT iSwapChain, IDirect3DSwapChain9** pSwapChain) {
IDirect3DDevice9Impl *This = (IDirect3DDevice9Impl *)iface;
HRESULT hrc = D3D_OK;
IWineD3DSwapChain *swapchain = NULL;
diff --git a/reactos/dll/directx/wine/d3dx9_36/d3dx9_36.rbuild b/reactos/dll/directx/wine/d3dx9_36/d3dx9_36.rbuild
index a09c4055f10..52fc95074c7 100644
--- a/reactos/dll/directx/wine/d3dx9_36/d3dx9_36.rbuild
+++ b/reactos/dll/directx/wine/d3dx9_36/d3dx9_36.rbuild
@@ -22,6 +22,7 @@
shader.c
sprite.c
surface.c
+ texture.c
util.c
version.rc
diff --git a/reactos/dll/directx/wine/d3dx9_36/d3dx9_36.spec b/reactos/dll/directx/wine/d3dx9_36/d3dx9_36.spec
index 08bb7f5db60..792408194d2 100644
--- a/reactos/dll/directx/wine/d3dx9_36/d3dx9_36.spec
+++ b/reactos/dll/directx/wine/d3dx9_36/d3dx9_36.spec
@@ -11,7 +11,7 @@
@ stub D3DXCleanMesh
@ stdcall D3DXColorAdjustContrast(ptr ptr long)
@ stdcall D3DXColorAdjustSaturation(ptr ptr long)
-@ stub D3DXCompileShader
+@ stdcall D3DXCompileShader(ptr long ptr ptr ptr ptr long ptr ptr ptr)
@ stub D3DXCompileShaderFromFileA
@ stub D3DXCompileShaderFromFileW
@ stub D3DXCompileShaderFromResourceA
@@ -92,7 +92,7 @@
@ stub D3DXCreateTeapot
@ stub D3DXCreateTextA
@ stub D3DXCreateTextW
-@ stub D3DXCreateTexture
+@ stdcall D3DXCreateTexture(ptr long long long long long long ptr)
@ stub D3DXCreateTextureFromFileA
@ stub D3DXCreateTextureFromFileExA
@ stub D3DXCreateTextureFromFileExW
@@ -129,7 +129,7 @@
@ stub D3DXFillVolumeTexture
@ stub D3DXFillVolumeTextureTX
@ stub D3DXFilterTexture
-@ stub D3DXFindShaderComment
+@ stdcall D3DXFindShaderComment(ptr long ptr ptr)
@ stub D3DXFloat16To32Array
@ stub D3DXFloat32To16Array
@ stub D3DXFrameAppendChild
@@ -157,8 +157,8 @@
@ stdcall D3DXGetImageInfoFromResourceA(long str ptr)
@ stdcall D3DXGetImageInfoFromResourceW(long wstr ptr)
@ stdcall D3DXGetPixelShaderProfile(ptr)
-@ stub D3DXGetShaderConstantTable
-@ stub D3DXGetShaderConstantTableEx
+@ stdcall D3DXGetShaderConstantTable(ptr ptr)
+@ stdcall D3DXGetShaderConstantTableEx(ptr long ptr)
@ stub D3DXGetShaderInputSemantics
@ stub D3DXGetShaderOutputSemantics
@ stub D3DXGetShaderSamplers
diff --git a/reactos/dll/directx/wine/d3dx9_36/shader.c b/reactos/dll/directx/wine/d3dx9_36/shader.c
index c05f7b74d90..e4de6b32dca 100644
--- a/reactos/dll/directx/wine/d3dx9_36/shader.c
+++ b/reactos/dll/directx/wine/d3dx9_36/shader.c
@@ -23,6 +23,7 @@
#include "windef.h"
#include "wingdi.h"
#include "d3dx9.h"
+#include "d3dx9shader.h"
#include "d3dx9_36_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
@@ -134,6 +135,41 @@ LPCSTR WINAPI D3DXGetVertexShaderProfile(LPDIRECT3DDEVICE9 device)
return NULL;
}
+HRESULT WINAPI D3DXFindShaderComment(CONST DWORD* byte_code, DWORD fourcc, LPCVOID* data, UINT* size)
+{
+ CONST DWORD *ptr = byte_code;
+
+ TRACE("(%p, %x, %p, %p)", byte_code, fourcc, data, size);
+
+ if (!byte_code)
+ return D3DERR_INVALIDCALL;
+
+ while (*++ptr != D3DSIO_END)
+ {
+ /* Check if it is a comment */
+ if ((*ptr & D3DSI_OPCODE_MASK) == D3DSIO_COMMENT)
+ {
+ DWORD comment_size = (*ptr & D3DSI_COMMENTSIZE_MASK) >> D3DSI_COMMENTSIZE_SHIFT;
+
+ /* Check if this is the comment we are looking for */
+ if (*(ptr + 1) == fourcc)
+ {
+ UINT ctab_size = (comment_size - 1) * sizeof(DWORD);
+ LPCVOID ctab_data = ptr + 2;
+ if (size)
+ *size = ctab_size;
+ if (data)
+ *data = ctab_data;
+ TRACE("Returning comment data at %p with size %d\n", ctab_data, ctab_size);
+ return D3D_OK;
+ }
+ ptr += comment_size;
+ }
+ }
+
+ return S_FALSE;
+}
+
HRESULT WINAPI D3DXAssembleShader(LPCSTR data,
UINT data_len,
CONST D3DXMACRO* defines,
@@ -142,7 +178,7 @@ HRESULT WINAPI D3DXAssembleShader(LPCSTR data,
LPD3DXBUFFER* shader,
LPD3DXBUFFER* error_messages)
{
- FIXME("stub\n");
+ FIXME("(%p, %d, %p, %p, %x, %p, %p): stub\n", data, data_len, defines, include, flags, shader, error_messages);
return D3DERR_INVALIDCALL;
}
@@ -177,7 +213,7 @@ HRESULT WINAPI D3DXAssembleShaderFromFileW(LPCWSTR filename,
LPD3DXBUFFER* shader,
LPD3DXBUFFER* error_messages)
{
- FIXME("stub\n");
+ FIXME("(%s, %p, %p, %x, %p, %p): stub\n", debugstr_w(filename), defines, include, flags, shader, error_messages);
return D3DERR_INVALIDCALL;
}
@@ -220,3 +256,382 @@ HRESULT WINAPI D3DXAssembleShaderFromResourceW(HMODULE module,
return D3DXAssembleShader(buffer, len, defines, include, flags,
shader, error_messages);
}
+
+HRESULT WINAPI D3DXCompileShader(LPCSTR pSrcData,
+ UINT srcDataLen,
+ CONST D3DXMACRO* pDefines,
+ LPD3DXINCLUDE pInclude,
+ LPCSTR pFunctionName,
+ LPCSTR pProfile,
+ DWORD Flags,
+ LPD3DXBUFFER* ppShader,
+ LPD3DXBUFFER* ppErrorMsgs,
+ LPD3DXCONSTANTTABLE * ppConstantTable)
+{
+ FIXME("(%p, %d, %p, %p, %p, %p, %d, %p, %p, %p): stub\n",
+ pSrcData, srcDataLen, pDefines, pInclude, pFunctionName,
+ pProfile, Flags, ppShader, ppErrorMsgs, ppConstantTable);
+ return D3DERR_INVALIDCALL;
+}
+
+static const struct ID3DXConstantTableVtbl ID3DXConstantTable_Vtbl;
+
+typedef struct ID3DXConstantTableImpl {
+ const ID3DXConstantTableVtbl *lpVtbl;
+ LONG ref;
+ LPVOID ctab;
+ DWORD size;
+} ID3DXConstantTableImpl;
+
+/*** IUnknown methods ***/
+static HRESULT WINAPI ID3DXConstantTableImpl_QueryInterface(ID3DXConstantTable* iface, REFIID riid, void** ppvObject)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
+
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_ID3DXConstantTable))
+ {
+ ID3DXConstantTable_AddRef(iface);
+ *ppvObject = This;
+ return S_OK;
+ }
+
+ ERR("Interface %s not found\n", debugstr_guid(riid));
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI ID3DXConstantTableImpl_AddRef(ID3DXConstantTable* iface)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ TRACE("(%p)->(): AddRef from %d\n", This, This->ref);
+
+ return InterlockedIncrement(&This->ref);
+}
+
+static ULONG WINAPI ID3DXConstantTableImpl_Release(ID3DXConstantTable* iface)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p)->(): Release from %d\n", This, ref + 1);
+
+ if (!ref)
+ {
+ HeapFree(GetProcessHeap(), 0, This->ctab);
+ HeapFree(GetProcessHeap(), 0, This);
+ }
+
+ return ref;
+}
+
+/*** ID3DXBuffer methods ***/
+static LPVOID WINAPI ID3DXConstantTableImpl_GetBufferPointer(ID3DXConstantTable* iface)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ TRACE("(%p)->()\n", This);
+
+ return This->ctab;
+}
+
+static DWORD WINAPI ID3DXConstantTableImpl_GetBufferSize(ID3DXConstantTable* iface)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ TRACE("(%p)->()\n", This);
+
+ return This->size;
+}
+
+/*** ID3DXConstantTable methods ***/
+static HRESULT WINAPI ID3DXConstantTableImpl_GetDesc(ID3DXConstantTable* iface, D3DXCONSTANTTABLE_DESC *desc)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p): stub\n", This, desc);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_GetConstantDesc(ID3DXConstantTable* iface, D3DXHANDLE constant,
+ D3DXCONSTANT_DESC *desc, UINT *count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p): stub\n", This, constant, desc, count);
+
+ return E_NOTIMPL;
+}
+
+static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstant(ID3DXConstantTable* iface, D3DXHANDLE constant, UINT index)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %d): stub\n", This, constant, index);
+
+ return NULL;
+}
+
+static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantByName(ID3DXConstantTable* iface, D3DXHANDLE constant, LPCSTR name)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %s): stub\n", This, constant, name);
+
+ return NULL;
+}
+
+static D3DXHANDLE WINAPI ID3DXConstantTableImpl_GetConstantByElement(ID3DXConstantTable* iface, D3DXHANDLE constant, UINT index)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %d): stub\n", This, constant, index);
+
+ return NULL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetDefaults(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p): stub\n", This, device);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetValue(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, LPCVOID data, UINT bytes)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, data, bytes);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetBool(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, BOOL b)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %d): stub\n", This, device, constant, b);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetBoolArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST BOOL* b, UINT count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, b, count);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetInt(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device, D3DXHANDLE constant, INT n)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %d): stub\n", This, device, constant, n);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetIntArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST INT* n, UINT count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, n, count);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetFloat(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, FLOAT f)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %f): stub\n", This, device, constant, f);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetFloatArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST FLOAT* f, UINT count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, f, count);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetVector(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST D3DXVECTOR4* vector)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p): stub\n", This, device, constant, vector);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetVectorArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST D3DXVECTOR4* vector, UINT count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, vector, count);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrix(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST D3DXMATRIX* matrix)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p): stub\n", This, device, constant, matrix);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST D3DXMATRIX* matrix, UINT count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, matrix, count);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixPointerArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST D3DXMATRIX** matrix, UINT count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, matrix, count);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTranspose(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST D3DXMATRIX* matrix)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p): stub\n", This, device, constant, matrix);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTransposeArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST D3DXMATRIX* matrix, UINT count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, matrix, count);
+
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI ID3DXConstantTableImpl_SetMatrixTransposePointerArray(ID3DXConstantTable* iface, LPDIRECT3DDEVICE9 device,
+ D3DXHANDLE constant, CONST D3DXMATRIX** matrix, UINT count)
+{
+ ID3DXConstantTableImpl *This = (ID3DXConstantTableImpl *)iface;
+
+ FIXME("(%p)->(%p, %p, %p, %d): stub\n", This, device, constant, matrix, count);
+
+ return E_NOTIMPL;
+}
+
+static const struct ID3DXConstantTableVtbl ID3DXConstantTable_Vtbl =
+{
+ /*** IUnknown methods ***/
+ ID3DXConstantTableImpl_QueryInterface,
+ ID3DXConstantTableImpl_AddRef,
+ ID3DXConstantTableImpl_Release,
+ /*** ID3DXBuffer methods ***/
+ ID3DXConstantTableImpl_GetBufferPointer,
+ ID3DXConstantTableImpl_GetBufferSize,
+ /*** ID3DXConstantTable methods ***/
+ ID3DXConstantTableImpl_GetDesc,
+ ID3DXConstantTableImpl_GetConstantDesc,
+ ID3DXConstantTableImpl_GetConstant,
+ ID3DXConstantTableImpl_GetConstantByName,
+ ID3DXConstantTableImpl_GetConstantByElement,
+ ID3DXConstantTableImpl_SetDefaults,
+ ID3DXConstantTableImpl_SetValue,
+ ID3DXConstantTableImpl_SetBool,
+ ID3DXConstantTableImpl_SetBoolArray,
+ ID3DXConstantTableImpl_SetInt,
+ ID3DXConstantTableImpl_SetIntArray,
+ ID3DXConstantTableImpl_SetFloat,
+ ID3DXConstantTableImpl_SetFloatArray,
+ ID3DXConstantTableImpl_SetVector,
+ ID3DXConstantTableImpl_SetVectorArray,
+ ID3DXConstantTableImpl_SetMatrix,
+ ID3DXConstantTableImpl_SetMatrixArray,
+ ID3DXConstantTableImpl_SetMatrixPointerArray,
+ ID3DXConstantTableImpl_SetMatrixTranspose,
+ ID3DXConstantTableImpl_SetMatrixTransposeArray,
+ ID3DXConstantTableImpl_SetMatrixTransposePointerArray
+};
+
+HRESULT WINAPI D3DXGetShaderConstantTableEx(CONST DWORD* pFunction,
+ DWORD flags,
+ LPD3DXCONSTANTTABLE* ppConstantTable)
+{
+ ID3DXConstantTableImpl* object;
+ HRESULT hr;
+ LPCVOID data;
+ UINT size;
+
+ FIXME("(%p, %x, %p): semi-stub\n", pFunction, flags, ppConstantTable);
+
+ if (!pFunction || !ppConstantTable)
+ return D3DERR_INVALIDCALL;
+
+ hr = D3DXFindShaderComment(pFunction, MAKEFOURCC('C','T','A','B'), &data, &size);
+ if (hr != D3D_OK)
+ return D3DXERR_INVALIDDATA;
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ID3DXConstantTableImpl));
+ if (!object)
+ {
+ ERR("Out of memory\n");
+ return E_OUTOFMEMORY;
+ }
+
+ object->lpVtbl = &ID3DXConstantTable_Vtbl;
+ object->ref = 1;
+
+ object->ctab = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!object->ctab)
+ {
+ HeapFree(GetProcessHeap(), 0, object);
+ ERR("Out of memory\n");
+ return E_OUTOFMEMORY;
+ }
+ object->size = size;
+ memcpy(object->ctab, data, object->size);
+
+ *ppConstantTable = (LPD3DXCONSTANTTABLE)object;
+
+ return D3D_OK;
+}
+
+HRESULT WINAPI D3DXGetShaderConstantTable(CONST DWORD* pFunction,
+ LPD3DXCONSTANTTABLE* ppConstantTable)
+{
+ TRACE("(%p, %p): Forwarded to D3DXGetShaderConstantTableEx\n", pFunction, ppConstantTable);
+
+ return D3DXGetShaderConstantTableEx(pFunction, 0, ppConstantTable);
+}
diff --git a/reactos/dll/directx/wine/d3dx9_36/surface.c b/reactos/dll/directx/wine/d3dx9_36/surface.c
index 4d8d1f61346..6de6de77ab2 100644
--- a/reactos/dll/directx/wine/d3dx9_36/surface.c
+++ b/reactos/dll/directx/wine/d3dx9_36/surface.c
@@ -47,7 +47,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
*/
HRESULT WINAPI D3DXGetImageInfoFromFileInMemory(LPCVOID data, UINT datasize, D3DXIMAGE_INFO *info)
{
- FIXME("stub\n");
+ FIXME("(%p, %d, %p): stub\n", data, datasize, info);
if(data && datasize && !info) return D3D_OK;
if( !data || !datasize ) return D3DERR_INVALIDCALL;
@@ -193,7 +193,9 @@ HRESULT WINAPI D3DXLoadSurfaceFromFileInMemory(LPDIRECT3DSURFACE9 pDestSurface,
D3DCOLOR Colorkey,
D3DXIMAGE_INFO *pSrcInfo)
{
- FIXME("stub\n");
+ FIXME("(%p, %p, %p, %p, %d, %p, %d, %x, %p): stub\n", pDestSurface, pDestPalette,
+ pDestRect, pSrcData, SrcDataSize, pSrcRect, dwFilter, Colorkey, pSrcInfo);
+
if( !pDestSurface || !pSrcData | !SrcDataSize ) return D3DERR_INVALIDCALL;
return E_NOTIMPL;
}
diff --git a/reactos/dll/directx/wine/d3dx9_36/texture.c b/reactos/dll/directx/wine/d3dx9_36/texture.c
new file mode 100644
index 00000000000..f47853a89df
--- /dev/null
+++ b/reactos/dll/directx/wine/d3dx9_36/texture.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2010 Christian Costa
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "wine/debug.h"
+#include "d3dx9_36_private.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
+
+HRESULT WINAPI D3DXCreateTexture(LPDIRECT3DDEVICE9 pDevice,
+ UINT width,
+ UINT height,
+ UINT miplevels,
+ DWORD usage,
+ D3DFORMAT format,
+ D3DPOOL pool,
+ LPDIRECT3DTEXTURE9 *ppTexture)
+{
+ FIXME("(%p, %d, %d, %d, %x, %x, %x, %p): semi-stub\n", pDevice, width, height, miplevels, usage, format,
+ pool, ppTexture);
+
+ return IDirect3DDevice9_CreateTexture(pDevice, width, height, miplevels, usage, format, pool, ppTexture, NULL);
+}
diff --git a/reactos/dll/directx/wine/ddraw/device.c b/reactos/dll/directx/wine/ddraw/device.c
index 67fc6f5e266..13ecfa133ac 100644
--- a/reactos/dll/directx/wine/ddraw/device.c
+++ b/reactos/dll/directx/wine/ddraw/device.c
@@ -1705,13 +1705,13 @@ IDirect3DDeviceImpl_7_EndScene(IDirect3DDevice7 *iface)
else return D3DERR_SCENE_NOT_IN_SCENE;
}
-static HRESULT WINAPI
+static HRESULT WINAPI DECLSPEC_HOTPATCH
IDirect3DDeviceImpl_7_EndScene_FPUSetup(IDirect3DDevice7 *iface)
{
return IDirect3DDeviceImpl_7_EndScene(iface);
}
-static HRESULT WINAPI
+static HRESULT WINAPI DECLSPEC_HOTPATCH
IDirect3DDeviceImpl_7_EndScene_FPUPreserve(IDirect3DDevice7 *iface)
{
HRESULT hr;
@@ -1724,7 +1724,7 @@ IDirect3DDeviceImpl_7_EndScene_FPUPreserve(IDirect3DDevice7 *iface)
return hr;
}
-static HRESULT WINAPI
+static HRESULT WINAPI DECLSPEC_HOTPATCH
Thunk_IDirect3DDeviceImpl_3_EndScene(IDirect3DDevice3 *iface)
{
IDirect3DDeviceImpl *This = device_from_device3(iface);
@@ -1732,7 +1732,7 @@ Thunk_IDirect3DDeviceImpl_3_EndScene(IDirect3DDevice3 *iface)
return IDirect3DDevice7_EndScene((IDirect3DDevice7 *)This);
}
-static HRESULT WINAPI
+static HRESULT WINAPI DECLSPEC_HOTPATCH
Thunk_IDirect3DDeviceImpl_2_EndScene(IDirect3DDevice2 *iface)
{
IDirect3DDeviceImpl *This = device_from_device2(iface);
@@ -1740,7 +1740,7 @@ Thunk_IDirect3DDeviceImpl_2_EndScene(IDirect3DDevice2 *iface)
return IDirect3DDevice7_EndScene((IDirect3DDevice7 *)This);
}
-static HRESULT WINAPI
+static HRESULT WINAPI DECLSPEC_HOTPATCH
Thunk_IDirect3DDeviceImpl_1_EndScene(IDirect3DDevice *iface)
{
IDirect3DDeviceImpl *This = device_from_device1(iface);
@@ -2580,7 +2580,8 @@ IDirect3DDeviceImpl_3_GetRenderState(IDirect3DDevice3 *iface,
}
if (!(colorop == WINED3DTOP_MODULATE && colorarg1 == WINED3DTA_TEXTURE && colorarg2 == WINED3DTA_CURRENT &&
- alphaop == WINED3DTOP_SELECTARG1 && alphaarg1 == (tex_alpha ? WINED3DTA_TEXTURE : WINED3DTA_CURRENT)))
+ alphaop == (tex_alpha ? WINED3DTOP_SELECTARG1 : WINED3DTOP_SELECTARG2) &&
+ alphaarg1 == WINED3DTA_TEXTURE && alphaarg2 == WINED3DTA_CURRENT))
{
ERR("Unexpected texture stage state setup, returning D3DTBLEND_MODULATE - likely erroneous\n");
}
@@ -2852,16 +2853,12 @@ IDirect3DDeviceImpl_3_SetRenderState(IDirect3DDevice3 *iface,
IWineD3DBaseTexture_Release(tex);
}
- IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_SELECTARG1);
if (tex_alpha)
- {
- IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_TEXTURE);
- }
+ IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_SELECTARG1);
else
- {
- IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_CURRENT);
- }
-
+ IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_SELECTARG2);
+ IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_TEXTURE);
+ IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAARG2, WINED3DTA_CURRENT);
IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_COLORARG1, WINED3DTA_TEXTURE);
IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_COLORARG2, WINED3DTA_CURRENT);
IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_COLOROP, WINED3DTOP_MODULATE);
@@ -4664,15 +4661,11 @@ IDirect3DDeviceImpl_3_SetTexture(IDirect3DDevice3 *iface,
IWineD3DBaseTexture_Release(tex);
}
- /* alphaop is WINED3DTOP_SELECTARG1 if it's D3DTBLEND_MODULATE, so only modify alphaarg1 */
+ /* Arg 1/2 are already set to WINED3DTA_TEXTURE/WINED3DTA_CURRENT in case of D3DTBLEND_MODULATE */
if (tex_alpha)
- {
- IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_TEXTURE);
- }
+ IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_SELECTARG1);
else
- {
- IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAARG1, WINED3DTA_CURRENT);
- }
+ IWineD3DDevice_SetTextureStageState(This->wineD3DDevice, 0, WINED3DTSS_ALPHAOP, WINED3DTOP_SELECTARG2);
}
LeaveCriticalSection(&ddraw_cs);
diff --git a/reactos/dll/directx/wine/ddraw/main.c b/reactos/dll/directx/wine/ddraw/main.c
index 079800d9a2b..bc23987ed81 100644
--- a/reactos/dll/directx/wine/ddraw/main.c
+++ b/reactos/dll/directx/wine/ddraw/main.c
@@ -302,7 +302,7 @@ err_out:
* Arguments, return values: See DDRAW_Create
*
***********************************************************************/
-HRESULT WINAPI
+HRESULT WINAPI DECLSPEC_HOTPATCH
DirectDrawCreate(GUID *GUID,
LPDIRECTDRAW *DD,
IUnknown *UnkOuter)
@@ -325,7 +325,7 @@ DirectDrawCreate(GUID *GUID,
* Arguments, return values: See DDRAW_Create
*
***********************************************************************/
-HRESULT WINAPI
+HRESULT WINAPI DECLSPEC_HOTPATCH
DirectDrawCreateEx(GUID *GUID,
LPVOID *DD,
REFIID iid,
@@ -742,14 +742,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
*/
HRESULT WINAPI DllCanUnloadNow(void)
{
- HRESULT hr;
- FIXME("(void): stub\n");
-
- EnterCriticalSection(&ddraw_cs);
- hr = S_FALSE;
- LeaveCriticalSection(&ddraw_cs);
-
- return hr;
+ return S_FALSE;
}
/*******************************************************************************
diff --git a/reactos/dll/directx/wine/ddraw/vertexbuffer.c b/reactos/dll/directx/wine/ddraw/vertexbuffer.c
index df7528b45cb..f16cf124392 100644
--- a/reactos/dll/directx/wine/ddraw/vertexbuffer.c
+++ b/reactos/dll/directx/wine/ddraw/vertexbuffer.c
@@ -236,8 +236,17 @@ IDirect3DVertexBufferImpl_Lock(IDirect3DVertexBuffer7 *iface,
IDirect3DVertexBufferImpl *This = (IDirect3DVertexBufferImpl *)iface;
WINED3DBUFFER_DESC Desc;
HRESULT hr;
+ DWORD wined3d_flags = 0;
TRACE("(%p)->(%08x,%p,%p)\n", This, Flags, Data, Size);
+ /* Writeonly: Pointless. Event: Unsupported by native according to the sdk
+ * nosyslock: Not applicable
+ */
+ if(!(Flags & DDLOCK_WAIT)) wined3d_flags |= WINED3DLOCK_DONOTWAIT;
+ if(Flags & DDLOCK_READONLY) wined3d_flags |= WINED3DLOCK_READONLY;
+ if(Flags & DDLOCK_NOOVERWRITE) wined3d_flags |= WINED3DLOCK_NOOVERWRITE;
+ if(Flags & DDLOCK_DISCARDCONTENTS) wined3d_flags |= WINED3DLOCK_DISCARD;
+
EnterCriticalSection(&ddraw_cs);
if(Size)
{
@@ -253,7 +262,7 @@ IDirect3DVertexBufferImpl_Lock(IDirect3DVertexBuffer7 *iface,
}
hr = IWineD3DBuffer_Map(This->wineD3DVertexBuffer, 0 /* OffsetToLock */,
- 0 /* SizeToLock, 0 == Full lock */, (BYTE **)Data, Flags);
+ 0 /* SizeToLock, 0 == Full lock */, (BYTE **)Data, wined3d_flags);
LeaveCriticalSection(&ddraw_cs);
return hr;
}
diff --git a/reactos/dll/directx/wine/ddraw/viewport.c b/reactos/dll/directx/wine/ddraw/viewport.c
index 9b0698903f5..b637df1b0f5 100644
--- a/reactos/dll/directx/wine/ddraw/viewport.c
+++ b/reactos/dll/directx/wine/ddraw/viewport.c
@@ -255,14 +255,25 @@ IDirect3DViewportImpl_GetViewport(IDirect3DViewport3 *iface,
TRACE("(%p/%p)->(%p)\n", This, iface, lpData);
EnterCriticalSection(&ddraw_cs);
- if (This->use_vp2 != 0) {
- ERR(" Requesting to get a D3DVIEWPORT struct where a D3DVIEWPORT2 was set !\n");
- LeaveCriticalSection(&ddraw_cs);
- return DDERR_INVALIDPARAMS;
- }
dwSize = lpData->dwSize;
memset(lpData, 0, dwSize);
- memcpy(lpData, &(This->viewports.vp1), dwSize);
+ if (!This->use_vp2)
+ memcpy(lpData, &(This->viewports.vp1), dwSize);
+ else {
+ D3DVIEWPORT vp1;
+ vp1.dwSize = sizeof(vp1);
+ vp1.dwX = This->viewports.vp2.dwX;
+ vp1.dwY = This->viewports.vp2.dwY;
+ vp1.dwWidth = This->viewports.vp2.dwWidth;
+ vp1.dwHeight = This->viewports.vp2.dwHeight;
+ vp1.dvMaxX = 0.0;
+ vp1.dvMaxY = 0.0;
+ vp1.dvScaleX = 0.0;
+ vp1.dvScaleY = 0.0;
+ vp1.dvMinZ = This->viewports.vp2.dvMinZ;
+ vp1.dvMaxZ = This->viewports.vp2.dvMaxZ;
+ memcpy(lpData, &vp1, dwSize);
+ }
if (TRACE_ON(d3d7)) {
TRACE(" returning D3DVIEWPORT :\n");
@@ -908,14 +919,25 @@ IDirect3DViewportImpl_GetViewport2(IDirect3DViewport3 *iface,
TRACE("(%p)->(%p)\n", This, lpData);
EnterCriticalSection(&ddraw_cs);
- if (This->use_vp2 != 1) {
- ERR(" Requesting to get a D3DVIEWPORT2 struct where a D3DVIEWPORT was set !\n");
- LeaveCriticalSection(&ddraw_cs);
- return DDERR_INVALIDPARAMS;
- }
dwSize = lpData->dwSize;
memset(lpData, 0, dwSize);
- memcpy(lpData, &(This->viewports.vp2), dwSize);
+ if (This->use_vp2)
+ memcpy(lpData, &(This->viewports.vp2), dwSize);
+ else {
+ D3DVIEWPORT2 vp2;
+ vp2.dwSize = sizeof(vp2);
+ vp2.dwX = This->viewports.vp1.dwX;
+ vp2.dwY = This->viewports.vp1.dwY;
+ vp2.dwWidth = This->viewports.vp1.dwWidth;
+ vp2.dwHeight = This->viewports.vp1.dwHeight;
+ vp2.dvClipX = 0.0;
+ vp2.dvClipY = 0.0;
+ vp2.dvClipWidth = 0.0;
+ vp2.dvClipHeight = 0.0;
+ vp2.dvMinZ = This->viewports.vp1.dvMinZ;
+ vp2.dvMaxZ = This->viewports.vp1.dvMaxZ;
+ memcpy(lpData, &vp2, dwSize);
+ }
if (TRACE_ON(d3d7)) {
TRACE(" returning D3DVIEWPORT2 :\n");
diff --git a/reactos/dll/directx/wine/wined3d/arb_program_shader.c b/reactos/dll/directx/wine/wined3d/arb_program_shader.c
index 1fdae2a4105..cf7638605eb 100644
--- a/reactos/dll/directx/wine/wined3d/arb_program_shader.c
+++ b/reactos/dll/directx/wine/wined3d/arb_program_shader.c
@@ -41,6 +41,45 @@ WINE_DECLARE_DEBUG_CHANNEL(d3d);
#define GLINFO_LOCATION (*gl_info)
+/* Extract a line. Note that this modifies the source string. */
+static char *get_line(char **ptr)
+{
+ char *p, *q;
+
+ p = *ptr;
+ if (!(q = strstr(p, "\n")))
+ {
+ if (!*p) return NULL;
+ *ptr += strlen(p);
+ return p;
+ }
+ *q = '\0';
+ *ptr = q + 1;
+
+ return p;
+}
+
+static void shader_arb_dump_program_source(const char *source)
+{
+ unsigned long source_size;
+ char *ptr, *line, *tmp;
+
+ source_size = strlen(source) + 1;
+ tmp = HeapAlloc(GetProcessHeap(), 0, source_size);
+ if (!tmp)
+ {
+ ERR("Failed to allocate %lu bytes for shader source.\n", source_size);
+ return;
+ }
+ memcpy(tmp, source, source_size);
+
+ ptr = tmp;
+ while ((line = get_line(&ptr))) FIXME(" %s\n", line);
+ FIXME("\n");
+
+ HeapFree(GetProcessHeap(), 0, tmp);
+}
+
/* GL locking for state handlers is done by the caller. */
static BOOL need_mova_const(IWineD3DBaseShader *shader, const struct wined3d_gl_info *gl_info)
{
@@ -1122,10 +1161,10 @@ static void gen_color_correction(struct wined3d_shader_buffer *buffer, const cha
{
DWORD mask;
- if (is_yuv_fixup(fixup))
+ if (is_complex_fixup(fixup))
{
- enum yuv_fixup yuv_fixup = get_yuv_fixup(fixup);
- FIXME("YUV fixup (%#x) not supported\n", yuv_fixup);
+ enum complex_fixup complex_fixup = get_complex_fixup(fixup);
+ FIXME("Complex fixup (%#x) not supported\n", complex_fixup);
return;
}
@@ -1761,8 +1800,8 @@ static void pshader_hw_texkill(const struct wined3d_shader_instruction *ins)
static void pshader_hw_tex(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
const struct wined3d_shader_dst_param *dst = &ins->dst[0];
DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major,
ins->ctx->reg_maps->shader_version.minor);
@@ -1856,8 +1895,8 @@ static void pshader_hw_texcoord(const struct wined3d_shader_instruction *ins)
static void pshader_hw_texreg2ar(const struct wined3d_shader_instruction *ins)
{
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
DWORD flags;
DWORD reg1 = ins->dst[0].reg.idx;
@@ -1904,7 +1943,8 @@ static void pshader_hw_texreg2rgb(const struct wined3d_shader_instruction *ins)
static void pshader_hw_texbem(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)shader->baseShader.device;
const struct wined3d_shader_dst_param *dst = &ins->dst[0];
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
char reg_coord[40], dst_reg[50], src_reg[50];
@@ -1936,8 +1976,8 @@ static void pshader_hw_texbem(const struct wined3d_shader_instruction *ins)
/* with projective textures, texbem only divides the static texture coord, not the displacement,
* so we can't let the GL handle this.
*/
- if (((IWineD3DDeviceImpl*) This->baseShader.device)->stateBlock->textureState[reg_dest_code][WINED3DTSS_TEXTURETRANSFORMFLAGS]
- & WINED3DTTFF_PROJECTED) {
+ if (device->stateBlock->textureState[reg_dest_code][WINED3DTSS_TEXTURETRANSFORMFLAGS] & WINED3DTTFF_PROJECTED)
+ {
shader_addline(buffer, "RCP TB.w, %s.w;\n", reg_coord);
shader_addline(buffer, "MUL TB.xy, %s, TB.w;\n", reg_coord);
shader_addline(buffer, "ADD TA.xy, TA, TB;\n");
@@ -1975,8 +2015,8 @@ static void pshader_hw_texm3x2pad(const struct wined3d_shader_instruction *ins)
static void pshader_hw_texm3x2tex(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
DWORD flags;
DWORD reg = ins->dst[0].reg.idx;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
@@ -1997,10 +2037,10 @@ static void pshader_hw_texm3x2tex(const struct wined3d_shader_instruction *ins)
static void pshader_hw_texm3x3pad(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
DWORD reg = ins->dst[0].reg.idx;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
- SHADER_PARSE_STATE* current_state = &This->baseShader.parse_state;
char src0_name[50], dst_name[50];
struct wined3d_shader_register tmp_reg = ins->dst[0].reg;
BOOL is_color;
@@ -2020,12 +2060,12 @@ static void pshader_hw_texm3x3pad(const struct wined3d_shader_instruction *ins)
static void pshader_hw_texm3x3tex(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
+ SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
DWORD flags;
DWORD reg = ins->dst[0].reg.idx;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
- SHADER_PARSE_STATE* current_state = &This->baseShader.parse_state;
char dst_str[50];
char src0_name[50], dst_name[50];
BOOL is_color;
@@ -2043,12 +2083,12 @@ static void pshader_hw_texm3x3tex(const struct wined3d_shader_instruction *ins)
static void pshader_hw_texm3x3vspec(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
+ SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
DWORD flags;
DWORD reg = ins->dst[0].reg.idx;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
- SHADER_PARSE_STATE* current_state = &This->baseShader.parse_state;
char dst_str[50];
char src0_name[50];
char dst_reg[50];
@@ -2085,11 +2125,11 @@ static void pshader_hw_texm3x3vspec(const struct wined3d_shader_instruction *ins
static void pshader_hw_texm3x3spec(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
+ SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
DWORD flags;
DWORD reg = ins->dst[0].reg.idx;
- SHADER_PARSE_STATE* current_state = &This->baseShader.parse_state;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
char dst_str[50];
char src0_name[50];
@@ -3046,8 +3086,9 @@ static GLuint create_arb_blt_vertex_program(const struct wined3d_gl_info *gl_inf
glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &pos);
if (pos != -1)
{
- FIXME("Vertex program error at position %d: %s\n", pos,
+ FIXME("Vertex program error at position %d: %s\n\n", pos,
debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ shader_arb_dump_program_source(blt_vprogram);
}
else
{
@@ -3108,8 +3149,9 @@ static GLuint create_arb_blt_fragment_program(const struct wined3d_gl_info *gl_i
glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &pos);
if (pos != -1)
{
- FIXME("Fragment program error at position %d: %s\n", pos,
+ FIXME("Fragment program error at position %d: %s\n\n", pos,
debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ shader_arb_dump_program_source(blt_fprograms[tex_type]);
}
else
{
@@ -3564,8 +3606,9 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This, struct
glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errPos);
if (errPos != -1)
{
- FIXME("HW PixelShader Error at position %d: %s\n",
+ FIXME("HW PixelShader Error at position %d: %s\n\n",
errPos, debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ shader_arb_dump_program_source(buffer->buffer);
retval = 0;
}
else
@@ -3974,8 +4017,9 @@ static GLuint shader_arb_generate_vshader(IWineD3DVertexShaderImpl *This, struct
glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errPos);
if (errPos != -1)
{
- FIXME("HW VertexShader Error at position %d: %s\n",
+ FIXME("HW VertexShader Error at position %d: %s\n\n",
errPos, debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ shader_arb_dump_program_source(buffer->buffer);
ret = -1;
}
else
@@ -4448,8 +4492,7 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) {
if (shader_is_pshader_version(baseShader->baseShader.reg_maps.shader_version.type))
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *) iface;
- struct arb_pshader_private *shader_data = This->baseShader.backend_data;
+ struct arb_pshader_private *shader_data = baseShader->baseShader.backend_data;
UINT i;
if(!shader_data) return; /* This can happen if a shader was never compiled */
@@ -4471,10 +4514,11 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) {
HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders);
HeapFree(GetProcessHeap(), 0, shader_data);
- This->baseShader.backend_data = NULL;
- } else {
- IWineD3DVertexShaderImpl *This = (IWineD3DVertexShaderImpl *) iface;
- struct arb_vshader_private *shader_data = This->baseShader.backend_data;
+ baseShader->baseShader.backend_data = NULL;
+ }
+ else
+ {
+ struct arb_vshader_private *shader_data = baseShader->baseShader.backend_data;
UINT i;
if(!shader_data) return; /* This can happen if a shader was never compiled */
@@ -4496,7 +4540,7 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) {
HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders);
HeapFree(GetProcessHeap(), 0, shader_data);
- This->baseShader.backend_data = NULL;
+ baseShader->baseShader.backend_data = NULL;
}
}
@@ -4565,8 +4609,7 @@ static BOOL shader_arb_dirty_const(IWineD3DDevice *iface) {
return TRUE;
}
-static void shader_arb_get_caps(WINED3DDEVTYPE devtype, const struct wined3d_gl_info *gl_info,
- struct shader_caps *pCaps)
+static void shader_arb_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *pCaps)
{
DWORD vs_consts = min(gl_info->limits.arb_vs_float_constants, gl_info->limits.arb_vs_native_constants);
DWORD ps_consts = min(gl_info->limits.arb_ps_float_constants, gl_info->limits.arb_ps_native_constants);
@@ -4574,7 +4617,7 @@ static void shader_arb_get_caps(WINED3DDEVTYPE devtype, const struct wined3d_gl_
/* We don't have an ARB fixed function pipeline yet, so let the none backend set its caps,
* then overwrite the shader specific ones
*/
- none_shader_backend.shader_get_caps(devtype, gl_info, pCaps);
+ none_shader_backend.shader_get_caps(gl_info, pCaps);
if (gl_info->supported[ARB_VERTEX_PROGRAM])
{
@@ -4630,8 +4673,8 @@ static BOOL shader_arb_color_fixup_supported(struct color_fixup_desc fixup)
dump_color_fixup_desc(fixup);
}
- /* We support everything except YUV conversions. */
- if (!is_yuv_fixup(fixup))
+ /* We support everything except complex conversions. */
+ if (!is_complex_fixup(fixup))
{
TRACE("[OK]\n");
return TRUE;
@@ -4678,6 +4721,7 @@ static const SHADER_HANDLER shader_arb_instruction_handler_table[WINED3DSIH_TABL
/* WINED3DSIH_CMP */ pshader_hw_cmp,
/* WINED3DSIH_CND */ pshader_hw_cnd,
/* WINED3DSIH_CRS */ shader_hw_map2gl,
+ /* WINED3DSIH_CUT */ NULL,
/* WINED3DSIH_DCL */ NULL,
/* WINED3DSIH_DEF */ NULL,
/* WINED3DSIH_DEFB */ NULL,
@@ -4689,20 +4733,24 @@ static const SHADER_HANDLER shader_arb_instruction_handler_table[WINED3DSIH_TABL
/* WINED3DSIH_DSX */ shader_hw_map2gl,
/* WINED3DSIH_DSY */ shader_hw_dsy,
/* WINED3DSIH_ELSE */ shader_hw_else,
+ /* WINED3DSIH_EMIT */ NULL,
/* WINED3DSIH_ENDIF */ shader_hw_endif,
/* WINED3DSIH_ENDLOOP */ shader_hw_endloop,
/* WINED3DSIH_ENDREP */ shader_hw_endrep,
/* WINED3DSIH_EXP */ shader_hw_scalar_op,
/* WINED3DSIH_EXPP */ shader_hw_scalar_op,
/* WINED3DSIH_FRC */ shader_hw_map2gl,
+ /* WINED3DSIH_IADD */ NULL,
/* WINED3DSIH_IF */ NULL /* Hardcoded into the shader */,
/* WINED3DSIH_IFC */ shader_hw_ifc,
+ /* WINED3DSIH_IGE */ NULL,
/* WINED3DSIH_LABEL */ shader_hw_label,
/* WINED3DSIH_LIT */ shader_hw_map2gl,
/* WINED3DSIH_LOG */ shader_hw_log_pow,
/* WINED3DSIH_LOGP */ shader_hw_log_pow,
/* WINED3DSIH_LOOP */ shader_hw_loop,
/* WINED3DSIH_LRP */ shader_hw_lrp,
+ /* WINED3DSIH_LT */ NULL,
/* WINED3DSIH_M3x2 */ shader_hw_mnxn,
/* WINED3DSIH_M3x3 */ shader_hw_mnxn,
/* WINED3DSIH_M3x4 */ shader_hw_mnxn,
@@ -5229,7 +5277,7 @@ static void arbfp_free(IWineD3DDevice *iface) {
}
}
-static void arbfp_get_caps(WINED3DDEVTYPE devtype, const struct wined3d_gl_info *gl_info, struct fragment_caps *caps)
+static void arbfp_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps)
{
caps->TextureOpCaps = WINED3DTEXOPCAPS_DISABLE |
WINED3DTEXOPCAPS_SELECTARG1 |
@@ -5858,8 +5906,9 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, IWi
glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &pos);
if (pos != -1)
{
- FIXME("Fragment program error at position %d: %s\n", pos,
+ FIXME("Fragment program error at position %d: %s\n\n", pos,
debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ shader_arb_dump_program_source(buffer.buffer);
}
else
{
@@ -6180,6 +6229,7 @@ struct arbfp_blit_priv {
GLenum yuy2_rect_shader, yuy2_2d_shader;
GLenum uyvy_rect_shader, uyvy_2d_shader;
GLenum yv12_rect_shader, yv12_2d_shader;
+ GLenum p8_rect_shader, p8_2d_shader;
};
static HRESULT arbfp_blit_alloc(IWineD3DDevice *iface) {
@@ -6204,20 +6254,22 @@ static void arbfp_blit_free(IWineD3DDevice *iface) {
GL_EXTCALL(glDeleteProgramsARB(1, &priv->uyvy_2d_shader));
GL_EXTCALL(glDeleteProgramsARB(1, &priv->yv12_rect_shader));
GL_EXTCALL(glDeleteProgramsARB(1, &priv->yv12_2d_shader));
- checkGLcall("Delete yuv programs");
+ GL_EXTCALL(glDeleteProgramsARB(1, &priv->p8_rect_shader));
+ GL_EXTCALL(glDeleteProgramsARB(1, &priv->p8_2d_shader));
+ checkGLcall("Delete yuv and p8 programs");
LEAVE_GL();
HeapFree(GetProcessHeap(), 0, device->blit_priv);
device->blit_priv = NULL;
}
-static BOOL gen_planar_yuv_read(struct wined3d_shader_buffer *buffer, enum yuv_fixup yuv_fixup,
+static BOOL gen_planar_yuv_read(struct wined3d_shader_buffer *buffer, enum complex_fixup fixup,
GLenum textype, char *luminance)
{
char chroma;
const char *tex, *texinstr;
- if (yuv_fixup == YUV_FIXUP_UYVY) {
+ if (fixup == COMPLEX_FIXUP_UYVY) {
chroma = 'x';
*luminance = 'w';
} else {
@@ -6445,8 +6497,74 @@ static BOOL gen_yv12_read(struct wined3d_shader_buffer *buffer, GLenum textype,
return TRUE;
}
+static GLuint gen_p8_shader(IWineD3DDeviceImpl *device, GLenum textype)
+{
+ GLenum shader;
+ struct wined3d_shader_buffer buffer;
+ struct arbfp_blit_priv *priv = device->blit_priv;
+ GLint pos;
+
+ /* Shader header */
+ if (!shader_buffer_init(&buffer))
+ {
+ ERR("Failed to initialize shader buffer.\n");
+ return 0;
+ }
+
+ ENTER_GL();
+ GL_EXTCALL(glGenProgramsARB(1, &shader));
+ GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader));
+ LEAVE_GL();
+ if(!shader) {
+ shader_buffer_free(&buffer);
+ return 0;
+ }
+
+ shader_addline(&buffer, "!!ARBfp1.0\n");
+ shader_addline(&buffer, "TEMP index;\n");
+
+ /* { 255/256, 0.5/255*255/256, 0, 0 } */
+ shader_addline(&buffer, "PARAM constants = { 0.996, 0.00195, 0, 0 };\n");
+
+ /* The alpha-component contains the palette index */
+ if(textype == GL_TEXTURE_RECTANGLE_ARB)
+ shader_addline(&buffer, "TXP index, fragment.texcoord[0], texture[0], RECT;\n");
+ else
+ shader_addline(&buffer, "TEX index, fragment.texcoord[0], texture[0], 2D;\n");
+
+ /* Scale the index by 255/256 and add a bias of '0.5' in order to sample in the middle */
+ shader_addline(&buffer, "MAD index.a, index.a, constants.x, constants.y;\n");
+
+ /* Use the alpha-component as an index in the palette to get the final color */
+ shader_addline(&buffer, "TEX result.color, index.a, texture[1], 1D;\n");
+ shader_addline(&buffer, "END\n");
+
+ ENTER_GL();
+ GL_EXTCALL(glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+ strlen(buffer.buffer), buffer.buffer));
+ checkGLcall("glProgramStringARB()");
+
+ glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &pos);
+ if (pos != -1)
+ {
+ FIXME("Fragment program error at position %d: %s\n\n", pos,
+ debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ shader_arb_dump_program_source(buffer.buffer);
+ }
+
+ if (textype == GL_TEXTURE_RECTANGLE_ARB)
+ priv->p8_rect_shader = shader;
+ else
+ priv->p8_2d_shader = shader;
+
+ shader_buffer_free(&buffer);
+ LEAVE_GL();
+
+ return shader;
+}
+
/* Context activation is done by the caller. */
-static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixup, GLenum textype)
+static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum complex_fixup yuv_fixup, GLenum textype)
{
GLenum shader;
struct wined3d_shader_buffer buffer;
@@ -6519,8 +6637,8 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
switch (yuv_fixup)
{
- case YUV_FIXUP_UYVY:
- case YUV_FIXUP_YUY2:
+ case COMPLEX_FIXUP_UYVY:
+ case COMPLEX_FIXUP_YUY2:
if (!gen_planar_yuv_read(&buffer, yuv_fixup, textype, &luminance_component))
{
shader_buffer_free(&buffer);
@@ -6528,7 +6646,7 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
}
break;
- case YUV_FIXUP_YV12:
+ case COMPLEX_FIXUP_YV12:
if (!gen_yv12_read(&buffer, textype, &luminance_component))
{
shader_buffer_free(&buffer);
@@ -6562,8 +6680,9 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &pos);
if (pos != -1)
{
- FIXME("Fragment program error at position %d: %s\n", pos,
+ FIXME("Fragment program error at position %d: %s\n\n", pos,
debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB)));
+ shader_arb_dump_program_source(buffer.buffer);
}
else
{
@@ -6579,20 +6698,22 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu
switch (yuv_fixup)
{
- case YUV_FIXUP_YUY2:
+ case COMPLEX_FIXUP_YUY2:
if (textype == GL_TEXTURE_RECTANGLE_ARB) priv->yuy2_rect_shader = shader;
else priv->yuy2_2d_shader = shader;
break;
- case YUV_FIXUP_UYVY:
+ case COMPLEX_FIXUP_UYVY:
if (textype == GL_TEXTURE_RECTANGLE_ARB) priv->uyvy_rect_shader = shader;
else priv->uyvy_2d_shader = shader;
break;
- case YUV_FIXUP_YV12:
+ case COMPLEX_FIXUP_YV12:
if (textype == GL_TEXTURE_RECTANGLE_ARB) priv->yv12_rect_shader = shader;
else priv->yv12_2d_shader = shader;
break;
+ default:
+ ERR("Unsupported complex fixup: %d\n", yuv_fixup);
}
return shader;
@@ -6606,9 +6727,9 @@ static HRESULT arbfp_blit_set(IWineD3DDevice *iface, const struct GlPixelFormatD
IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *) iface;
float size[4] = {width, height, 1, 1};
struct arbfp_blit_priv *priv = device->blit_priv;
- enum yuv_fixup yuv_fixup;
+ enum complex_fixup fixup;
- if (!is_yuv_fixup(format_desc->color_fixup))
+ if (!is_complex_fixup(format_desc->color_fixup))
{
TRACE("Fixup:\n");
dump_color_fixup_desc(format_desc->color_fixup);
@@ -6620,24 +6741,29 @@ static HRESULT arbfp_blit_set(IWineD3DDevice *iface, const struct GlPixelFormatD
return WINED3D_OK;
}
- yuv_fixup = get_yuv_fixup(format_desc->color_fixup);
+ fixup = get_complex_fixup(format_desc->color_fixup);
- switch(yuv_fixup)
+ switch(fixup)
{
- case YUV_FIXUP_YUY2:
+ case COMPLEX_FIXUP_YUY2:
shader = textype == GL_TEXTURE_RECTANGLE_ARB ? priv->yuy2_rect_shader : priv->yuy2_2d_shader;
break;
- case YUV_FIXUP_UYVY:
+ case COMPLEX_FIXUP_UYVY:
shader = textype == GL_TEXTURE_RECTANGLE_ARB ? priv->uyvy_rect_shader : priv->uyvy_2d_shader;
break;
- case YUV_FIXUP_YV12:
+ case COMPLEX_FIXUP_YV12:
shader = textype == GL_TEXTURE_RECTANGLE_ARB ? priv->yv12_rect_shader : priv->yv12_2d_shader;
break;
+ case COMPLEX_FIXUP_P8:
+ shader = textype == GL_TEXTURE_RECTANGLE_ARB ? priv->p8_rect_shader : priv->p8_2d_shader;
+ if (!shader) shader = gen_p8_shader(device, textype);
+ break;
+
default:
- FIXME("Unsupported YUV fixup %#x, not setting a shader\n", yuv_fixup);
+ FIXME("Unsupported complex fixup %#x, not setting a shader\n", fixup);
ENTER_GL();
glEnable(textype);
checkGLcall("glEnable(textype)");
@@ -6645,7 +6771,7 @@ static HRESULT arbfp_blit_set(IWineD3DDevice *iface, const struct GlPixelFormatD
return E_NOTIMPL;
}
- if (!shader) shader = gen_yuv_shader(device, yuv_fixup, textype);
+ if (!shader) shader = gen_yuv_shader(device, fixup, textype);
ENTER_GL();
glEnable(GL_FRAGMENT_PROGRAM_ARB);
@@ -6684,7 +6810,7 @@ static void arbfp_blit_unset(IWineD3DDevice *iface) {
static BOOL arbfp_blit_color_fixup_supported(struct color_fixup_desc fixup)
{
- enum yuv_fixup yuv_fixup;
+ enum complex_fixup complex_fixup;
if (TRACE_ON(d3d_shader) && TRACE_ON(d3d))
{
@@ -6699,23 +6825,24 @@ static BOOL arbfp_blit_color_fixup_supported(struct color_fixup_desc fixup)
}
/* We only support YUV conversions. */
- if (!is_yuv_fixup(fixup))
+ if (!is_complex_fixup(fixup))
{
TRACE("[FAILED]\n");
return FALSE;
}
- yuv_fixup = get_yuv_fixup(fixup);
- switch(yuv_fixup)
+ complex_fixup = get_complex_fixup(fixup);
+ switch(complex_fixup)
{
- case YUV_FIXUP_YUY2:
- case YUV_FIXUP_UYVY:
- case YUV_FIXUP_YV12:
+ case COMPLEX_FIXUP_YUY2:
+ case COMPLEX_FIXUP_UYVY:
+ case COMPLEX_FIXUP_YV12:
+ case COMPLEX_FIXUP_P8:
TRACE("[OK]\n");
return TRUE;
default:
- FIXME("Unsupported YUV fixup %#x\n", yuv_fixup);
+ FIXME("Unsupported YUV fixup %#x\n", complex_fixup);
TRACE("[FAILED]\n");
return FALSE;
}
diff --git a/reactos/dll/directx/wine/wined3d/ati_fragment_shader.c b/reactos/dll/directx/wine/wined3d/ati_fragment_shader.c
index becd4475d0a..0f911e9dc15 100644
--- a/reactos/dll/directx/wine/wined3d/ati_fragment_shader.c
+++ b/reactos/dll/directx/wine/wined3d/ati_fragment_shader.c
@@ -1061,7 +1061,7 @@ static void atifs_enable(IWineD3DDevice *iface, BOOL enable) {
LEAVE_GL();
}
-static void atifs_get_caps(WINED3DDEVTYPE devtype, const struct wined3d_gl_info *gl_info, struct fragment_caps *caps)
+static void atifs_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps)
{
caps->TextureOpCaps = WINED3DTEXOPCAPS_DISABLE |
WINED3DTEXOPCAPS_SELECTARG1 |
diff --git a/reactos/dll/directx/wine/wined3d/baseshader.c b/reactos/dll/directx/wine/wined3d/baseshader.c
deleted file mode 100644
index 14416c47197..00000000000
--- a/reactos/dll/directx/wine/wined3d/baseshader.c
+++ /dev/null
@@ -1,1439 +0,0 @@
-/*
- * shaders implementation
- *
- * Copyright 2002-2003 Jason Edmeades
- * Copyright 2002-2003 Raphael Junqueira
- * Copyright 2004 Christian Costa
- * Copyright 2005 Oliver Stieber
- * Copyright 2006 Ivan Gyurdiev
- * Copyright 2007-2008 Stefan Dösinger for CodeWeavers
- * Copyright 2009 Henri Verbeet for CodeWeavers
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
-
-#include "config.h"
-#include
-#include
-#include "wined3d_private.h"
-
-WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
-WINE_DECLARE_DEBUG_CHANNEL(d3d);
-
-static const char *shader_opcode_names[] =
-{
- /* WINED3DSIH_ABS */ "abs",
- /* WINED3DSIH_ADD */ "add",
- /* WINED3DSIH_BEM */ "bem",
- /* WINED3DSIH_BREAK */ "break",
- /* WINED3DSIH_BREAKC */ "breakc",
- /* WINED3DSIH_BREAKP */ "breakp",
- /* WINED3DSIH_CALL */ "call",
- /* WINED3DSIH_CALLNZ */ "callnz",
- /* WINED3DSIH_CMP */ "cmp",
- /* WINED3DSIH_CND */ "cnd",
- /* WINED3DSIH_CRS */ "crs",
- /* WINED3DSIH_DCL */ "dcl",
- /* WINED3DSIH_DEF */ "def",
- /* WINED3DSIH_DEFB */ "defb",
- /* WINED3DSIH_DEFI */ "defi",
- /* WINED3DSIH_DP2ADD */ "dp2add",
- /* WINED3DSIH_DP3 */ "dp3",
- /* WINED3DSIH_DP4 */ "dp4",
- /* WINED3DSIH_DST */ "dst",
- /* WINED3DSIH_DSX */ "dsx",
- /* WINED3DSIH_DSY */ "dsy",
- /* WINED3DSIH_ELSE */ "else",
- /* WINED3DSIH_ENDIF */ "endif",
- /* WINED3DSIH_ENDLOOP */ "endloop",
- /* WINED3DSIH_ENDREP */ "endrep",
- /* WINED3DSIH_EXP */ "exp",
- /* WINED3DSIH_EXPP */ "expp",
- /* WINED3DSIH_FRC */ "frc",
- /* WINED3DSIH_IF */ "if",
- /* WINED3DSIH_IFC */ "ifc",
- /* WINED3DSIH_LABEL */ "label",
- /* WINED3DSIH_LIT */ "lit",
- /* WINED3DSIH_LOG */ "log",
- /* WINED3DSIH_LOGP */ "logp",
- /* WINED3DSIH_LOOP */ "loop",
- /* WINED3DSIH_LRP */ "lrp",
- /* WINED3DSIH_M3x2 */ "m3x2",
- /* WINED3DSIH_M3x3 */ "m3x3",
- /* WINED3DSIH_M3x4 */ "m3x4",
- /* WINED3DSIH_M4x3 */ "m4x3",
- /* WINED3DSIH_M4x4 */ "m4x4",
- /* WINED3DSIH_MAD */ "mad",
- /* WINED3DSIH_MAX */ "max",
- /* WINED3DSIH_MIN */ "min",
- /* WINED3DSIH_MOV */ "mov",
- /* WINED3DSIH_MOVA */ "mova",
- /* WINED3DSIH_MUL */ "mul",
- /* WINED3DSIH_NOP */ "nop",
- /* WINED3DSIH_NRM */ "nrm",
- /* WINED3DSIH_PHASE */ "phase",
- /* WINED3DSIH_POW */ "pow",
- /* WINED3DSIH_RCP */ "rcp",
- /* WINED3DSIH_REP */ "rep",
- /* WINED3DSIH_RET */ "ret",
- /* WINED3DSIH_RSQ */ "rsq",
- /* WINED3DSIH_SETP */ "setp",
- /* WINED3DSIH_SGE */ "sge",
- /* WINED3DSIH_SGN */ "sgn",
- /* WINED3DSIH_SINCOS */ "sincos",
- /* WINED3DSIH_SLT */ "slt",
- /* WINED3DSIH_SUB */ "sub",
- /* WINED3DSIH_TEX */ "texld",
- /* WINED3DSIH_TEXBEM */ "texbem",
- /* WINED3DSIH_TEXBEML */ "texbeml",
- /* WINED3DSIH_TEXCOORD */ "texcrd",
- /* WINED3DSIH_TEXDEPTH */ "texdepth",
- /* WINED3DSIH_TEXDP3 */ "texdp3",
- /* WINED3DSIH_TEXDP3TEX */ "texdp3tex",
- /* WINED3DSIH_TEXKILL */ "texkill",
- /* WINED3DSIH_TEXLDD */ "texldd",
- /* WINED3DSIH_TEXLDL */ "texldl",
- /* WINED3DSIH_TEXM3x2DEPTH */ "texm3x2depth",
- /* WINED3DSIH_TEXM3x2PAD */ "texm3x2pad",
- /* WINED3DSIH_TEXM3x2TEX */ "texm3x2tex",
- /* WINED3DSIH_TEXM3x3 */ "texm3x3",
- /* WINED3DSIH_TEXM3x3DIFF */ "texm3x3diff",
- /* WINED3DSIH_TEXM3x3PAD */ "texm3x3pad",
- /* WINED3DSIH_TEXM3x3SPEC */ "texm3x3spec",
- /* WINED3DSIH_TEXM3x3TEX */ "texm3x3tex",
- /* WINED3DSIH_TEXM3x3VSPEC */ "texm3x3vspec",
- /* WINED3DSIH_TEXREG2AR */ "texreg2ar",
- /* WINED3DSIH_TEXREG2GB */ "texreg2gb",
- /* WINED3DSIH_TEXREG2RGB */ "texreg2rgb",
-};
-
-const struct wined3d_shader_frontend *shader_select_frontend(DWORD version_token)
-{
- switch (version_token >> 16)
- {
- case WINED3D_SM1_VS:
- case WINED3D_SM1_PS:
- return &sm1_shader_frontend;
-
- case WINED3D_SM4_PS:
- case WINED3D_SM4_VS:
- case WINED3D_SM4_GS:
- return &sm4_shader_frontend;
-
- default:
- FIXME("Unrecognised version token %#x\n", version_token);
- return NULL;
- }
-}
-
-void shader_buffer_clear(struct wined3d_shader_buffer *buffer)
-{
- buffer->buffer[0] = '\0';
- buffer->bsize = 0;
- buffer->lineNo = 0;
- buffer->newline = TRUE;
-}
-
-BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer)
-{
- buffer->buffer = HeapAlloc(GetProcessHeap(), 0, SHADER_PGMSIZE);
- if (!buffer->buffer)
- {
- ERR("Failed to allocate shader buffer memory.\n");
- return FALSE;
- }
-
- shader_buffer_clear(buffer);
- return TRUE;
-}
-
-void shader_buffer_free(struct wined3d_shader_buffer *buffer)
-{
- HeapFree(GetProcessHeap(), 0, buffer->buffer);
-}
-
-int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *format, va_list args)
-{
- char* base = buffer->buffer + buffer->bsize;
- int rc;
-
- rc = vsnprintf(base, SHADER_PGMSIZE - 1 - buffer->bsize, format, args);
-
- if (rc < 0 /* C89 */ || (unsigned int)rc > SHADER_PGMSIZE - 1 - buffer->bsize /* C99 */)
- {
- ERR("The buffer allocated for the shader program string "
- "is too small at %d bytes.\n", SHADER_PGMSIZE);
- buffer->bsize = SHADER_PGMSIZE - 1;
- return -1;
- }
-
- if (buffer->newline) {
- TRACE("GL HW (%u, %u) : %s", buffer->lineNo + 1, buffer->bsize, base);
- buffer->newline = FALSE;
- } else {
- TRACE("%s", base);
- }
-
- buffer->bsize += rc;
- if (buffer->buffer[buffer->bsize-1] == '\n') {
- buffer->lineNo++;
- buffer->newline = TRUE;
- }
- return 0;
-}
-
-int shader_addline(struct wined3d_shader_buffer *buffer, const char *format, ...)
-{
- int ret;
- va_list args;
-
- va_start(args, format);
- ret = shader_vaddline(buffer, format, args);
- va_end(args);
-
- return ret;
-}
-
-void shader_init(struct IWineD3DBaseShaderClass *shader, IWineD3DDeviceImpl *device,
- IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
-{
- shader->ref = 1;
- shader->device = (IWineD3DDevice *)device;
- shader->parent = parent;
- shader->parent_ops = parent_ops;
- list_init(&shader->linked_programs);
- list_add_head(&device->shaders, &shader->shader_list_entry);
-}
-
-/* Convert floating point offset relative
- * to a register file to an absolute offset for float constants */
-static unsigned int shader_get_float_offset(WINED3DSHADER_PARAM_REGISTER_TYPE register_type, UINT register_idx)
-{
- switch (register_type)
- {
- case WINED3DSPR_CONST: return register_idx;
- case WINED3DSPR_CONST2: return 2048 + register_idx;
- case WINED3DSPR_CONST3: return 4096 + register_idx;
- case WINED3DSPR_CONST4: return 6144 + register_idx;
- default:
- FIXME("Unsupported register type: %d\n", register_type);
- return register_idx;
- }
-}
-
-static void shader_delete_constant_list(struct list* clist) {
-
- struct list *ptr;
- struct local_constant* constant;
-
- ptr = list_head(clist);
- while (ptr) {
- constant = LIST_ENTRY(ptr, struct local_constant, entry);
- ptr = list_next(clist, ptr);
- HeapFree(GetProcessHeap(), 0, constant);
- }
- list_init(clist);
-}
-
-static inline void set_bitmap_bit(DWORD *bitmap, DWORD bit)
-{
- DWORD idx, shift;
- idx = bit >> 5;
- shift = bit & 0x1f;
- bitmap[idx] |= (1 << shift);
-}
-
-static void shader_record_register_usage(IWineD3DBaseShaderImpl *This, struct shader_reg_maps *reg_maps,
- const struct wined3d_shader_register *reg, enum wined3d_shader_type shader_type)
-{
- switch (reg->type)
- {
- case WINED3DSPR_TEXTURE: /* WINED3DSPR_ADDR */
- if (shader_type == WINED3D_SHADER_TYPE_PIXEL) reg_maps->texcoord |= 1 << reg->idx;
- else reg_maps->address |= 1 << reg->idx;
- break;
-
- case WINED3DSPR_TEMP:
- reg_maps->temporary |= 1 << reg->idx;
- break;
-
- case WINED3DSPR_INPUT:
- if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
- {
- if (reg->rel_addr)
- {
- /* If relative addressing is used, we must assume that all registers
- * are used. Even if it is a construct like v3[aL], we can't assume
- * that v0, v1 and v2 aren't read because aL can be negative */
- unsigned int i;
- for (i = 0; i < MAX_REG_INPUT; ++i)
- {
- ((IWineD3DPixelShaderImpl *)This)->input_reg_used[i] = TRUE;
- }
- }
- else
- {
- ((IWineD3DPixelShaderImpl *)This)->input_reg_used[reg->idx] = TRUE;
- }
- }
- else reg_maps->input_registers |= 1 << reg->idx;
- break;
-
- case WINED3DSPR_RASTOUT:
- if (reg->idx == 1) reg_maps->fog = 1;
- break;
-
- case WINED3DSPR_MISCTYPE:
- if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
- {
- if (reg->idx == 0) reg_maps->vpos = 1;
- else if (reg->idx == 1) reg_maps->usesfacing = 1;
- }
- break;
-
- case WINED3DSPR_CONST:
- if (reg->rel_addr)
- {
- if (shader_type != WINED3D_SHADER_TYPE_PIXEL)
- {
- if (reg->idx < ((IWineD3DVertexShaderImpl *)This)->min_rel_offset)
- {
- ((IWineD3DVertexShaderImpl *)This)->min_rel_offset = reg->idx;
- }
- if (reg->idx > ((IWineD3DVertexShaderImpl *)This)->max_rel_offset)
- {
- ((IWineD3DVertexShaderImpl *)This)->max_rel_offset = reg->idx;
- }
- }
- reg_maps->usesrelconstF = TRUE;
- }
- else
- {
- set_bitmap_bit(reg_maps->constf, reg->idx);
- }
- break;
-
- case WINED3DSPR_CONSTINT:
- reg_maps->integer_constants |= (1 << reg->idx);
- break;
-
- case WINED3DSPR_CONSTBOOL:
- reg_maps->boolean_constants |= (1 << reg->idx);
- break;
-
- case WINED3DSPR_COLOROUT:
- reg_maps->highest_render_target = max(reg_maps->highest_render_target, reg->idx);
- break;
-
- default:
- TRACE("Not recording register of type %#x and idx %u\n", reg->type, reg->idx);
- break;
- }
-}
-
-static unsigned int get_instr_extra_regcount(enum WINED3D_SHADER_INSTRUCTION_HANDLER instr, unsigned int param)
-{
- switch(instr)
- {
- case WINED3DSIH_M4x4:
- case WINED3DSIH_M3x4:
- return param == 1 ? 3 : 0;
-
- case WINED3DSIH_M4x3:
- case WINED3DSIH_M3x3:
- return param == 1 ? 2 : 0;
-
- case WINED3DSIH_M3x2:
- return param == 1 ? 1 : 0;
-
- default:
- return 0;
- }
-}
-
-static const char *semantic_names[] =
-{
- /* WINED3DDECLUSAGE_POSITION */ "SV_POSITION",
- /* WINED3DDECLUSAGE_BLENDWEIGHT */ "BLENDWEIGHT",
- /* WINED3DDECLUSAGE_BLENDINDICES */ "BLENDINDICES",
- /* WINED3DDECLUSAGE_NORMAL */ "NORMAL",
- /* WINED3DDECLUSAGE_PSIZE */ "PSIZE",
- /* WINED3DDECLUSAGE_TEXCOORD */ "TEXCOORD",
- /* WINED3DDECLUSAGE_TANGENT */ "TANGENT",
- /* WINED3DDECLUSAGE_BINORMAL */ "BINORMAL",
- /* WINED3DDECLUSAGE_TESSFACTOR */ "TESSFACTOR",
- /* WINED3DDECLUSAGE_POSITIONT */ "POSITIONT",
- /* WINED3DDECLUSAGE_COLOR */ "COLOR",
- /* WINED3DDECLUSAGE_FOG */ "FOG",
- /* WINED3DDECLUSAGE_DEPTH */ "DEPTH",
- /* WINED3DDECLUSAGE_SAMPLE */ "SAMPLE",
-};
-
-static const char *shader_semantic_name_from_usage(WINED3DDECLUSAGE usage)
-{
- if (usage >= sizeof(semantic_names) / sizeof(*semantic_names))
- {
- FIXME("Unrecognized usage %#x\n", usage);
- return "UNRECOGNIZED";
- }
-
- return semantic_names[usage];
-}
-
-WINED3DDECLUSAGE shader_usage_from_semantic_name(const char *name)
-{
- unsigned int i;
-
- for (i = 0; i < sizeof(semantic_names) / sizeof(*semantic_names); ++i)
- {
- if (!strcmp(name, semantic_names[i])) return i;
- }
-
- return ~0U;
-}
-
-BOOL shader_match_semantic(const char *semantic_name, WINED3DDECLUSAGE usage)
-{
- return !strcmp(semantic_name, shader_semantic_name_from_usage(usage));
-}
-
-static void shader_signature_from_semantic(struct wined3d_shader_signature_element *e,
- const struct wined3d_shader_semantic *s)
-{
- e->semantic_name = shader_semantic_name_from_usage(s->usage);
- e->semantic_idx = s->usage_idx;
- e->sysval_semantic = 0;
- e->component_type = 0;
- e->register_idx = s->reg.reg.idx;
- e->mask = s->reg.write_mask;
-}
-
-/* Note that this does not count the loop register
- * as an address register. */
-
-HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3d_shader_frontend *fe,
- struct shader_reg_maps *reg_maps, struct wined3d_shader_signature_element *input_signature,
- struct wined3d_shader_signature_element *output_signature, const DWORD *byte_code, DWORD constf_size)
-{
- IWineD3DBaseShaderImpl* This = (IWineD3DBaseShaderImpl*) iface;
- void *fe_data = This->baseShader.frontend_data;
- struct wined3d_shader_version shader_version;
- unsigned int cur_loop_depth = 0, max_loop_depth = 0;
- const DWORD* pToken = byte_code;
-
- /* There are some minor differences between pixel and vertex shaders */
-
- memset(reg_maps, 0, sizeof(*reg_maps));
-
- /* get_registers_used is called on every compile on some 1.x shaders, which can result
- * in stacking up a collection of local constants. Delete the old constants if existing
- */
- shader_delete_constant_list(&This->baseShader.constantsF);
- shader_delete_constant_list(&This->baseShader.constantsB);
- shader_delete_constant_list(&This->baseShader.constantsI);
-
- fe->shader_read_header(fe_data, &pToken, &shader_version);
- reg_maps->shader_version = shader_version;
-
- reg_maps->constf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
- sizeof(*reg_maps->constf) * ((constf_size + 31) / 32));
- if(!reg_maps->constf) {
- ERR("Out of memory\n");
- return E_OUTOFMEMORY;
- }
-
- while (!fe->shader_is_end(fe_data, &pToken))
- {
- struct wined3d_shader_instruction ins;
- const char *comment;
- UINT param_size;
-
- /* Skip comments */
- fe->shader_read_comment(&pToken, &comment);
- if (comment) continue;
-
- /* Fetch opcode */
- fe->shader_read_opcode(fe_data, &pToken, &ins, ¶m_size);
-
- /* Unhandled opcode, and its parameters */
- if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
- {
- TRACE("Skipping unrecognized instruction.\n");
- pToken += param_size;
- continue;
- }
-
- /* Handle declarations */
- if (ins.handler_idx == WINED3DSIH_DCL)
- {
- struct wined3d_shader_semantic semantic;
-
- fe->shader_read_semantic(&pToken, &semantic);
-
- switch (semantic.reg.reg.type)
- {
- /* Mark input registers used. */
- case WINED3DSPR_INPUT:
- reg_maps->input_registers |= 1 << semantic.reg.reg.idx;
- shader_signature_from_semantic(&input_signature[semantic.reg.reg.idx], &semantic);
- break;
-
- /* Vshader: mark 3.0 output registers used, save token */
- case WINED3DSPR_OUTPUT:
- reg_maps->output_registers |= 1 << semantic.reg.reg.idx;
- shader_signature_from_semantic(&output_signature[semantic.reg.reg.idx], &semantic);
- if (semantic.usage == WINED3DDECLUSAGE_FOG) reg_maps->fog = 1;
- break;
-
- /* Save sampler usage token */
- case WINED3DSPR_SAMPLER:
- reg_maps->sampler_type[semantic.reg.reg.idx] = semantic.sampler_type;
- break;
-
- default:
- TRACE("Not recording DCL register type %#x.\n", semantic.reg.reg.type);
- break;
- }
- }
- else if (ins.handler_idx == WINED3DSIH_DEF)
- {
- struct wined3d_shader_dst_param dst;
- struct wined3d_shader_src_param rel_addr;
-
- local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
- if (!lconst) return E_OUTOFMEMORY;
-
- fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
- lconst->idx = dst.reg.idx;
-
- memcpy(lconst->value, pToken, 4 * sizeof(DWORD));
- pToken += 4;
-
- /* In pixel shader 1.X shaders, the constants are clamped between [-1;1] */
- if (shader_version.major == 1 && shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
- {
- float *value = (float *) lconst->value;
- if (value[0] < -1.0f) value[0] = -1.0f;
- else if (value[0] > 1.0f) value[0] = 1.0f;
- if (value[1] < -1.0f) value[1] = -1.0f;
- else if (value[1] > 1.0f) value[1] = 1.0f;
- if (value[2] < -1.0f) value[2] = -1.0f;
- else if (value[2] > 1.0f) value[2] = 1.0f;
- if (value[3] < -1.0f) value[3] = -1.0f;
- else if (value[3] > 1.0f) value[3] = 1.0f;
- }
-
- list_add_head(&This->baseShader.constantsF, &lconst->entry);
- }
- else if (ins.handler_idx == WINED3DSIH_DEFI)
- {
- struct wined3d_shader_dst_param dst;
- struct wined3d_shader_src_param rel_addr;
-
- local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
- if (!lconst) return E_OUTOFMEMORY;
-
- fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
- lconst->idx = dst.reg.idx;
-
- memcpy(lconst->value, pToken, 4 * sizeof(DWORD));
- pToken += 4;
-
- list_add_head(&This->baseShader.constantsI, &lconst->entry);
- reg_maps->local_int_consts |= (1 << dst.reg.idx);
- }
- else if (ins.handler_idx == WINED3DSIH_DEFB)
- {
- struct wined3d_shader_dst_param dst;
- struct wined3d_shader_src_param rel_addr;
-
- local_constant* lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
- if (!lconst) return E_OUTOFMEMORY;
-
- fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
- lconst->idx = dst.reg.idx;
-
- memcpy(lconst->value, pToken, sizeof(DWORD));
- ++pToken;
-
- list_add_head(&This->baseShader.constantsB, &lconst->entry);
- reg_maps->local_bool_consts |= (1 << dst.reg.idx);
- }
- /* If there's a loop in the shader */
- else if (ins.handler_idx == WINED3DSIH_LOOP
- || ins.handler_idx == WINED3DSIH_REP)
- {
- struct wined3d_shader_src_param src, rel_addr;
-
- fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
-
- /* Rep and Loop always use an integer constant for the control parameters */
- if (ins.handler_idx == WINED3DSIH_REP)
- {
- reg_maps->integer_constants |= 1 << src.reg.idx;
- }
- else
- {
- fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
- reg_maps->integer_constants |= 1 << src.reg.idx;
- }
-
- cur_loop_depth++;
- if(cur_loop_depth > max_loop_depth)
- max_loop_depth = cur_loop_depth;
- }
- else if (ins.handler_idx == WINED3DSIH_ENDLOOP
- || ins.handler_idx == WINED3DSIH_ENDREP)
- {
- cur_loop_depth--;
- }
- /* For subroutine prototypes */
- else if (ins.handler_idx == WINED3DSIH_LABEL)
- {
- struct wined3d_shader_src_param src, rel_addr;
-
- fe->shader_read_src_param(fe_data, &pToken, &src, &rel_addr);
- reg_maps->labels |= 1 << src.reg.idx;
- }
- /* Set texture, address, temporary registers */
- else
- {
- int i, limit;
- BOOL color0_mov = FALSE;
-
- /* This will loop over all the registers and try to
- * make a bitmask of the ones we're interested in.
- *
- * Relative addressing tokens are ignored, but that's
- * okay, since we'll catch any address registers when
- * they are initialized (required by spec) */
-
- if (ins.dst_count)
- {
- struct wined3d_shader_dst_param dst_param;
- struct wined3d_shader_src_param dst_rel_addr;
-
- fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
-
- shader_record_register_usage(This, reg_maps, &dst_param.reg, shader_version.type);
-
- /* WINED3DSPR_TEXCRDOUT is the same as WINED3DSPR_OUTPUT. _OUTPUT can be > MAX_REG_TEXCRD and
- * is used in >= 3.0 shaders. Filter 3.0 shaders to prevent overflows, and also filter pixel
- * shaders because TECRDOUT isn't used in them, but future register types might cause issues */
- if (shader_version.type == WINED3D_SHADER_TYPE_VERTEX && shader_version.major < 3
- && dst_param.reg.type == WINED3DSPR_TEXCRDOUT)
- {
- reg_maps->texcoord_mask[dst_param.reg.idx] |= dst_param.write_mask;
- }
-
- if (shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
- {
- IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *)This;
-
- if(dst_param.reg.type == WINED3DSPR_COLOROUT && dst_param.reg.idx == 0)
- {
- /* Many 2.0 and 3.0 pixel shaders end with a MOV from a temp register to
- * COLOROUT 0. If we know this in advance, the ARB shader backend can skip
- * the mov and perform the sRGB write correction from the source register.
- *
- * However, if the mov is only partial, we can't do this, and if the write
- * comes from an instruction other than MOV it is hard to do as well. If
- * COLOROUT 0 is overwritten partially later, the marker is dropped again. */
-
- ps->color0_mov = FALSE;
- if (ins.handler_idx == WINED3DSIH_MOV)
- {
- /* Used later when the source register is read. */
- color0_mov = TRUE;
- }
- }
- /* Also drop the MOV marker if the source register is overwritten prior to the shader
- * end
- */
- else if(dst_param.reg.type == WINED3DSPR_TEMP && dst_param.reg.idx == ps->color0_reg)
- {
- ps->color0_mov = FALSE;
- }
- }
-
- /* Declare 1.X samplers implicitly, based on the destination reg. number */
- if (shader_version.major == 1
- && (ins.handler_idx == WINED3DSIH_TEX
- || ins.handler_idx == WINED3DSIH_TEXBEM
- || ins.handler_idx == WINED3DSIH_TEXBEML
- || ins.handler_idx == WINED3DSIH_TEXDP3TEX
- || ins.handler_idx == WINED3DSIH_TEXM3x2TEX
- || ins.handler_idx == WINED3DSIH_TEXM3x3SPEC
- || ins.handler_idx == WINED3DSIH_TEXM3x3TEX
- || ins.handler_idx == WINED3DSIH_TEXM3x3VSPEC
- || ins.handler_idx == WINED3DSIH_TEXREG2AR
- || ins.handler_idx == WINED3DSIH_TEXREG2GB
- || ins.handler_idx == WINED3DSIH_TEXREG2RGB))
- {
- /* Fake sampler usage, only set reserved bit and ttype */
- DWORD sampler_code = dst_param.reg.idx;
-
- TRACE("Setting fake 2D sampler for 1.x pixelshader\n");
- reg_maps->sampler_type[sampler_code] = WINED3DSTT_2D;
-
- /* texbem is only valid with < 1.4 pixel shaders */
- if (ins.handler_idx == WINED3DSIH_TEXBEM
- || ins.handler_idx == WINED3DSIH_TEXBEML)
- {
- reg_maps->bumpmat |= 1 << dst_param.reg.idx;
- if (ins.handler_idx == WINED3DSIH_TEXBEML)
- {
- reg_maps->luminanceparams |= 1 << dst_param.reg.idx;
- }
- }
- }
- else if (ins.handler_idx == WINED3DSIH_BEM)
- {
- reg_maps->bumpmat |= 1 << dst_param.reg.idx;
- }
- }
-
- if (ins.handler_idx == WINED3DSIH_NRM)
- {
- reg_maps->usesnrm = 1;
- }
- else if (ins.handler_idx == WINED3DSIH_DSY)
- {
- reg_maps->usesdsy = 1;
- }
- else if (ins.handler_idx == WINED3DSIH_DSX)
- {
- reg_maps->usesdsx = 1;
- }
- else if(ins.handler_idx == WINED3DSIH_TEXLDD)
- {
- reg_maps->usestexldd = 1;
- }
- else if(ins.handler_idx == WINED3DSIH_TEXLDL)
- {
- reg_maps->usestexldl = 1;
- }
- else if(ins.handler_idx == WINED3DSIH_MOVA)
- {
- reg_maps->usesmova = 1;
- }
- else if(ins.handler_idx == WINED3DSIH_IFC)
- {
- reg_maps->usesifc = 1;
- }
- else if(ins.handler_idx == WINED3DSIH_CALL)
- {
- reg_maps->usescall = 1;
- }
-
- limit = ins.src_count + (ins.predicate ? 1 : 0);
- for (i = 0; i < limit; ++i)
- {
- struct wined3d_shader_src_param src_param, src_rel_addr;
- unsigned int count;
-
- fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
- count = get_instr_extra_regcount(ins.handler_idx, i);
-
- shader_record_register_usage(This, reg_maps, &src_param.reg, shader_version.type);
- while (count)
- {
- ++src_param.reg.idx;
- shader_record_register_usage(This, reg_maps, &src_param.reg, shader_version.type);
- --count;
- }
-
- if(color0_mov)
- {
- IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *) This;
- if(src_param.reg.type == WINED3DSPR_TEMP &&
- src_param.swizzle == WINED3DSP_NOSWIZZLE)
- {
- ps->color0_mov = TRUE;
- ps->color0_reg = src_param.reg.idx;
- }
- }
- }
- }
- }
- reg_maps->loop_depth = max_loop_depth;
-
- This->baseShader.functionLength = ((const char *)pToken - (const char *)byte_code);
-
- return WINED3D_OK;
-}
-
-unsigned int shader_find_free_input_register(const struct shader_reg_maps *reg_maps, unsigned int max)
-{
- DWORD map = 1 << max;
- map |= map - 1;
- map &= reg_maps->shader_version.major < 3 ? ~reg_maps->texcoord : ~reg_maps->input_registers;
-
- return wined3d_log2i(map);
-}
-
-static void shader_dump_decl_usage(const struct wined3d_shader_semantic *semantic,
- const struct wined3d_shader_version *shader_version)
-{
- TRACE("dcl");
-
- if (semantic->reg.reg.type == WINED3DSPR_SAMPLER)
- {
- switch (semantic->sampler_type)
- {
- case WINED3DSTT_2D: TRACE("_2d"); break;
- case WINED3DSTT_CUBE: TRACE("_cube"); break;
- case WINED3DSTT_VOLUME: TRACE("_volume"); break;
- default: TRACE("_unknown_ttype(0x%08x)", semantic->sampler_type);
- }
- }
- else
- {
- /* Pixel shaders 3.0 don't have usage semantics */
- if (shader_version->major < 3 && shader_version->type == WINED3D_SHADER_TYPE_PIXEL)
- return;
- else
- TRACE("_");
-
- switch (semantic->usage)
- {
- case WINED3DDECLUSAGE_POSITION:
- TRACE("position%d", semantic->usage_idx);
- break;
- case WINED3DDECLUSAGE_BLENDINDICES:
- TRACE("blend");
- break;
- case WINED3DDECLUSAGE_BLENDWEIGHT:
- TRACE("weight");
- break;
- case WINED3DDECLUSAGE_NORMAL:
- TRACE("normal%d", semantic->usage_idx);
- break;
- case WINED3DDECLUSAGE_PSIZE:
- TRACE("psize");
- break;
- case WINED3DDECLUSAGE_COLOR:
- if (semantic->usage_idx == 0) TRACE("color");
- else TRACE("specular%d", (semantic->usage_idx - 1));
- break;
- case WINED3DDECLUSAGE_TEXCOORD:
- TRACE("texture%d", semantic->usage_idx);
- break;
- case WINED3DDECLUSAGE_TANGENT:
- TRACE("tangent");
- break;
- case WINED3DDECLUSAGE_BINORMAL:
- TRACE("binormal");
- break;
- case WINED3DDECLUSAGE_TESSFACTOR:
- TRACE("tessfactor");
- break;
- case WINED3DDECLUSAGE_POSITIONT:
- TRACE("positionT%d", semantic->usage_idx);
- break;
- case WINED3DDECLUSAGE_FOG:
- TRACE("fog");
- break;
- case WINED3DDECLUSAGE_DEPTH:
- TRACE("depth");
- break;
- case WINED3DDECLUSAGE_SAMPLE:
- TRACE("sample");
- break;
- default:
- FIXME("unknown_semantics(0x%08x)", semantic->usage);
- }
- }
-}
-
-static void shader_dump_register(const struct wined3d_shader_register *reg,
- const struct wined3d_shader_version *shader_version)
-{
- static const char * const rastout_reg_names[] = {"oPos", "oFog", "oPts"};
- static const char * const misctype_reg_names[] = {"vPos", "vFace"};
- UINT offset = reg->idx;
-
- switch (reg->type)
- {
- case WINED3DSPR_TEMP:
- TRACE("r");
- break;
-
- case WINED3DSPR_INPUT:
- TRACE("v");
- break;
-
- case WINED3DSPR_CONST:
- case WINED3DSPR_CONST2:
- case WINED3DSPR_CONST3:
- case WINED3DSPR_CONST4:
- TRACE("c");
- offset = shader_get_float_offset(reg->type, reg->idx);
- break;
-
- case WINED3DSPR_TEXTURE: /* vs: case WINED3DSPR_ADDR */
- TRACE("%c", shader_version->type == WINED3D_SHADER_TYPE_PIXEL ? 't' : 'a');
- break;
-
- case WINED3DSPR_RASTOUT:
- TRACE("%s", rastout_reg_names[reg->idx]);
- break;
-
- case WINED3DSPR_COLOROUT:
- TRACE("oC");
- break;
-
- case WINED3DSPR_DEPTHOUT:
- TRACE("oDepth");
- break;
-
- case WINED3DSPR_ATTROUT:
- TRACE("oD");
- break;
-
- case WINED3DSPR_TEXCRDOUT:
- /* Vertex shaders >= 3.0 use general purpose output registers
- * (WINED3DSPR_OUTPUT), which can include an address token */
- if (shader_version->major >= 3) TRACE("o");
- else TRACE("oT");
- break;
-
- case WINED3DSPR_CONSTINT:
- TRACE("i");
- break;
-
- case WINED3DSPR_CONSTBOOL:
- TRACE("b");
- break;
-
- case WINED3DSPR_LABEL:
- TRACE("l");
- break;
-
- case WINED3DSPR_LOOP:
- TRACE("aL");
- break;
-
- case WINED3DSPR_SAMPLER:
- TRACE("s");
- break;
-
- case WINED3DSPR_MISCTYPE:
- if (reg->idx > 1) FIXME("Unhandled misctype register %d\n", reg->idx);
- else TRACE("%s", misctype_reg_names[reg->idx]);
- break;
-
- case WINED3DSPR_PREDICATE:
- TRACE("p");
- break;
-
- case WINED3DSPR_IMMCONST:
- TRACE("l");
- break;
-
- case WINED3DSPR_CONSTBUFFER:
- TRACE("cb");
- break;
-
- default:
- TRACE("unhandled_rtype(%#x)", reg->type);
- break;
- }
-
- if (reg->type == WINED3DSPR_IMMCONST)
- {
- TRACE("(");
- switch (reg->immconst_type)
- {
- case WINED3D_IMMCONST_FLOAT:
- TRACE("%.8e", *(const float *)reg->immconst_data);
- break;
-
- case WINED3D_IMMCONST_FLOAT4:
- TRACE("%.8e, %.8e, %.8e, %.8e",
- *(const float *)®->immconst_data[0], *(const float *)®->immconst_data[1],
- *(const float *)®->immconst_data[2], *(const float *)®->immconst_data[3]);
- break;
-
- default:
- TRACE("", reg->immconst_type);
- break;
- }
- TRACE(")");
- }
- else if (reg->type != WINED3DSPR_RASTOUT && reg->type != WINED3DSPR_MISCTYPE)
- {
- if (reg->array_idx != ~0U)
- {
- TRACE("%u[%u", offset, reg->array_idx);
- if (reg->rel_addr)
- {
- TRACE(" + ");
- shader_dump_src_param(reg->rel_addr, shader_version);
- }
- TRACE("]");
- }
- else
- {
- if (reg->rel_addr)
- {
- TRACE("[");
- shader_dump_src_param(reg->rel_addr, shader_version);
- TRACE(" + ");
- }
- TRACE("%u", offset);
- if (reg->rel_addr) TRACE("]");
- }
- }
-}
-
-void shader_dump_dst_param(const struct wined3d_shader_dst_param *param,
- const struct wined3d_shader_version *shader_version)
-{
- DWORD write_mask = param->write_mask;
-
- shader_dump_register(¶m->reg, shader_version);
-
- if (write_mask != WINED3DSP_WRITEMASK_ALL)
- {
- static const char *write_mask_chars = "xyzw";
-
- TRACE(".");
- if (write_mask & WINED3DSP_WRITEMASK_0) TRACE("%c", write_mask_chars[0]);
- if (write_mask & WINED3DSP_WRITEMASK_1) TRACE("%c", write_mask_chars[1]);
- if (write_mask & WINED3DSP_WRITEMASK_2) TRACE("%c", write_mask_chars[2]);
- if (write_mask & WINED3DSP_WRITEMASK_3) TRACE("%c", write_mask_chars[3]);
- }
-}
-
-void shader_dump_src_param(const struct wined3d_shader_src_param *param,
- const struct wined3d_shader_version *shader_version)
-{
- DWORD src_modifier = param->modifiers;
- DWORD swizzle = param->swizzle;
-
- if (src_modifier == WINED3DSPSM_NEG
- || src_modifier == WINED3DSPSM_BIASNEG
- || src_modifier == WINED3DSPSM_SIGNNEG
- || src_modifier == WINED3DSPSM_X2NEG
- || src_modifier == WINED3DSPSM_ABSNEG)
- TRACE("-");
- else if (src_modifier == WINED3DSPSM_COMP)
- TRACE("1-");
- else if (src_modifier == WINED3DSPSM_NOT)
- TRACE("!");
-
- if (src_modifier == WINED3DSPSM_ABS || src_modifier == WINED3DSPSM_ABSNEG)
- TRACE("abs(");
-
- shader_dump_register(¶m->reg, shader_version);
-
- if (src_modifier)
- {
- switch (src_modifier)
- {
- case WINED3DSPSM_NONE: break;
- case WINED3DSPSM_NEG: break;
- case WINED3DSPSM_NOT: break;
- case WINED3DSPSM_BIAS: TRACE("_bias"); break;
- case WINED3DSPSM_BIASNEG: TRACE("_bias"); break;
- case WINED3DSPSM_SIGN: TRACE("_bx2"); break;
- case WINED3DSPSM_SIGNNEG: TRACE("_bx2"); break;
- case WINED3DSPSM_COMP: break;
- case WINED3DSPSM_X2: TRACE("_x2"); break;
- case WINED3DSPSM_X2NEG: TRACE("_x2"); break;
- case WINED3DSPSM_DZ: TRACE("_dz"); break;
- case WINED3DSPSM_DW: TRACE("_dw"); break;
- case WINED3DSPSM_ABSNEG: TRACE(")"); break;
- case WINED3DSPSM_ABS: TRACE(")"); break;
- default:
- TRACE("_unknown_modifier(%#x)", src_modifier);
- }
- }
-
- if (swizzle != WINED3DSP_NOSWIZZLE)
- {
- static const char *swizzle_chars = "xyzw";
- DWORD swizzle_x = swizzle & 0x03;
- DWORD swizzle_y = (swizzle >> 2) & 0x03;
- DWORD swizzle_z = (swizzle >> 4) & 0x03;
- DWORD swizzle_w = (swizzle >> 6) & 0x03;
-
- if (swizzle_x == swizzle_y
- && swizzle_x == swizzle_z
- && swizzle_x == swizzle_w)
- {
- TRACE(".%c", swizzle_chars[swizzle_x]);
- }
- else
- {
- TRACE(".%c%c%c%c", swizzle_chars[swizzle_x], swizzle_chars[swizzle_y],
- swizzle_chars[swizzle_z], swizzle_chars[swizzle_w]);
- }
- }
-}
-
-/* Shared code in order to generate the bulk of the shader string.
- * NOTE: A description of how to parse tokens can be found on msdn */
-void shader_generate_main(IWineD3DBaseShader *iface, struct wined3d_shader_buffer *buffer,
- const shader_reg_maps *reg_maps, const DWORD *pFunction, void *backend_ctx)
-{
- IWineD3DBaseShaderImpl* This = (IWineD3DBaseShaderImpl*) iface;
- IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *) This->baseShader.device; /* To access shader backend callbacks */
- const struct wined3d_shader_frontend *fe = This->baseShader.frontend;
- void *fe_data = This->baseShader.frontend_data;
- struct wined3d_shader_src_param src_rel_addr[4];
- struct wined3d_shader_src_param src_param[4];
- struct wined3d_shader_version shader_version;
- struct wined3d_shader_src_param dst_rel_addr;
- struct wined3d_shader_dst_param dst_param;
- struct wined3d_shader_instruction ins;
- struct wined3d_shader_context ctx;
- const DWORD *pToken = pFunction;
- DWORD i;
-
- /* Initialize current parsing state */
- ctx.shader = iface;
- ctx.reg_maps = reg_maps;
- ctx.buffer = buffer;
- ctx.backend_data = backend_ctx;
-
- ins.ctx = &ctx;
- ins.dst = &dst_param;
- ins.src = src_param;
- This->baseShader.parse_state.current_row = 0;
-
- fe->shader_read_header(fe_data, &pToken, &shader_version);
-
- while (!fe->shader_is_end(fe_data, &pToken))
- {
- const char *comment;
- UINT param_size;
-
- /* Skip comment tokens */
- fe->shader_read_comment(&pToken, &comment);
- if (comment) continue;
-
- /* Read opcode */
- fe->shader_read_opcode(fe_data, &pToken, &ins, ¶m_size);
-
- /* Unknown opcode and its parameters */
- if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
- {
- TRACE("Skipping unrecognized instruction.\n");
- pToken += param_size;
- continue;
- }
-
- /* Nothing to do */
- if (ins.handler_idx == WINED3DSIH_DCL
- || ins.handler_idx == WINED3DSIH_NOP
- || ins.handler_idx == WINED3DSIH_DEF
- || ins.handler_idx == WINED3DSIH_DEFI
- || ins.handler_idx == WINED3DSIH_DEFB
- || ins.handler_idx == WINED3DSIH_PHASE)
- {
- pToken += param_size;
- continue;
- }
-
- /* Destination token */
- if (ins.dst_count) fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
-
- /* Predication token */
- if (ins.predicate) ins.predicate = *pToken++;
-
- /* Other source tokens */
- for (i = 0; i < ins.src_count; ++i)
- {
- fe->shader_read_src_param(fe_data, &pToken, &src_param[i], &src_rel_addr[i]);
- }
-
- /* Call appropriate function for output target */
- device->shader_backend->shader_handle_instruction(&ins);
- }
-}
-
-static void shader_dump_ins_modifiers(const struct wined3d_shader_dst_param *dst)
-{
- DWORD mmask = dst->modifiers;
-
- switch (dst->shift)
- {
- case 0: break;
- case 13: TRACE("_d8"); break;
- case 14: TRACE("_d4"); break;
- case 15: TRACE("_d2"); break;
- case 1: TRACE("_x2"); break;
- case 2: TRACE("_x4"); break;
- case 3: TRACE("_x8"); break;
- default: TRACE("_unhandled_shift(%d)", dst->shift); break;
- }
-
- if (mmask & WINED3DSPDM_SATURATE) TRACE("_sat");
- if (mmask & WINED3DSPDM_PARTIALPRECISION) TRACE("_pp");
- if (mmask & WINED3DSPDM_MSAMPCENTROID) TRACE("_centroid");
-
- mmask &= ~(WINED3DSPDM_SATURATE | WINED3DSPDM_PARTIALPRECISION | WINED3DSPDM_MSAMPCENTROID);
- if (mmask)
- FIXME("_unrecognized_modifier(%#x)", mmask);
-}
-
-void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, const DWORD *pFunction)
-{
- struct wined3d_shader_version shader_version;
- const DWORD* pToken = pFunction;
- const char *type_prefix;
- DWORD i;
-
- TRACE("Parsing %p\n", pFunction);
-
- fe->shader_read_header(fe_data, &pToken, &shader_version);
-
- switch (shader_version.type)
- {
- case WINED3D_SHADER_TYPE_VERTEX:
- type_prefix = "vs";
- break;
-
- case WINED3D_SHADER_TYPE_GEOMETRY:
- type_prefix = "gs";
- break;
-
- case WINED3D_SHADER_TYPE_PIXEL:
- type_prefix = "ps";
- break;
-
- default:
- FIXME("Unhandled shader type %#x.\n", shader_version.type);
- type_prefix = "unknown";
- break;
- }
-
- TRACE("%s_%u_%u\n", type_prefix, shader_version.major, shader_version.minor);
-
- while (!fe->shader_is_end(fe_data, &pToken))
- {
- struct wined3d_shader_instruction ins;
- const char *comment;
- UINT param_size;
-
- /* comment */
- fe->shader_read_comment(&pToken, &comment);
- if (comment)
- {
- TRACE("//%s\n", comment);
- continue;
- }
-
- fe->shader_read_opcode(fe_data, &pToken, &ins, ¶m_size);
- if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
- {
- TRACE("Skipping unrecognized instruction.\n");
- pToken += param_size;
- continue;
- }
-
- if (ins.handler_idx == WINED3DSIH_DCL)
- {
- struct wined3d_shader_semantic semantic;
-
- fe->shader_read_semantic(&pToken, &semantic);
-
- shader_dump_decl_usage(&semantic, &shader_version);
- shader_dump_ins_modifiers(&semantic.reg);
- TRACE(" ");
- shader_dump_dst_param(&semantic.reg, &shader_version);
- }
- else if (ins.handler_idx == WINED3DSIH_DEF)
- {
- struct wined3d_shader_dst_param dst;
- struct wined3d_shader_src_param rel_addr;
-
- fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
-
- TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(dst.reg.type, dst.reg.idx),
- *(const float *)(pToken),
- *(const float *)(pToken + 1),
- *(const float *)(pToken + 2),
- *(const float *)(pToken + 3));
- pToken += 4;
- }
- else if (ins.handler_idx == WINED3DSIH_DEFI)
- {
- struct wined3d_shader_dst_param dst;
- struct wined3d_shader_src_param rel_addr;
-
- fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
-
- TRACE("defi i%u = %d, %d, %d, %d", dst.reg.idx,
- *(pToken),
- *(pToken + 1),
- *(pToken + 2),
- *(pToken + 3));
- pToken += 4;
- }
- else if (ins.handler_idx == WINED3DSIH_DEFB)
- {
- struct wined3d_shader_dst_param dst;
- struct wined3d_shader_src_param rel_addr;
-
- fe->shader_read_dst_param(fe_data, &pToken, &dst, &rel_addr);
-
- TRACE("defb b%u = %s", dst.reg.idx, *pToken ? "true" : "false");
- ++pToken;
- }
- else
- {
- struct wined3d_shader_src_param dst_rel_addr, src_rel_addr;
- struct wined3d_shader_dst_param dst_param;
- struct wined3d_shader_src_param src_param;
-
- if (ins.dst_count)
- {
- fe->shader_read_dst_param(fe_data, &pToken, &dst_param, &dst_rel_addr);
- }
-
- /* Print out predication source token first - it follows
- * the destination token. */
- if (ins.predicate)
- {
- fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
- TRACE("(");
- shader_dump_src_param(&src_param, &shader_version);
- TRACE(") ");
- }
-
- /* PixWin marks instructions with the coissue flag with a '+' */
- if (ins.coissue) TRACE("+");
-
- TRACE("%s", shader_opcode_names[ins.handler_idx]);
-
- if (ins.handler_idx == WINED3DSIH_IFC
- || ins.handler_idx == WINED3DSIH_BREAKC)
- {
- switch (ins.flags)
- {
- case COMPARISON_GT: TRACE("_gt"); break;
- case COMPARISON_EQ: TRACE("_eq"); break;
- case COMPARISON_GE: TRACE("_ge"); break;
- case COMPARISON_LT: TRACE("_lt"); break;
- case COMPARISON_NE: TRACE("_ne"); break;
- case COMPARISON_LE: TRACE("_le"); break;
- default: TRACE("_(%u)", ins.flags);
- }
- }
- else if (ins.handler_idx == WINED3DSIH_TEX
- && shader_version.major >= 2
- && (ins.flags & WINED3DSI_TEXLD_PROJECT))
- {
- TRACE("p");
- }
-
- /* We already read the destination token, print it. */
- if (ins.dst_count)
- {
- shader_dump_ins_modifiers(&dst_param);
- TRACE(" ");
- shader_dump_dst_param(&dst_param, &shader_version);
- }
-
- /* Other source tokens */
- for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i)
- {
- fe->shader_read_src_param(fe_data, &pToken, &src_param, &src_rel_addr);
- TRACE(!i ? " " : ", ");
- shader_dump_src_param(&src_param, &shader_version);
- }
- }
- TRACE("\n");
- }
-}
-
-void shader_cleanup(IWineD3DBaseShader *iface)
-{
- IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)iface;
-
- ((IWineD3DDeviceImpl *)This->baseShader.device)->shader_backend->shader_destroy(iface);
- HeapFree(GetProcessHeap(), 0, This->baseShader.reg_maps.constf);
- HeapFree(GetProcessHeap(), 0, This->baseShader.function);
- shader_delete_constant_list(&This->baseShader.constantsF);
- shader_delete_constant_list(&This->baseShader.constantsB);
- shader_delete_constant_list(&This->baseShader.constantsI);
- list_remove(&This->baseShader.shader_list_entry);
-
- if (This->baseShader.frontend && This->baseShader.frontend_data)
- {
- This->baseShader.frontend->shader_free(This->baseShader.frontend_data);
- }
-}
-
-static void shader_none_handle_instruction(const struct wined3d_shader_instruction *ins) {}
-static void shader_none_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS) {}
-static void shader_none_select_depth_blt(IWineD3DDevice *iface, enum tex_types tex_type) {}
-static void shader_none_deselect_depth_blt(IWineD3DDevice *iface) {}
-static void shader_none_update_float_vertex_constants(IWineD3DDevice *iface, UINT start, UINT count) {}
-static void shader_none_update_float_pixel_constants(IWineD3DDevice *iface, UINT start, UINT count) {}
-static void shader_none_load_constants(const struct wined3d_context *context, char usePS, char useVS) {}
-static void shader_none_load_np2fixup_constants(IWineD3DDevice *iface, char usePS, char useVS) {}
-static void shader_none_destroy(IWineD3DBaseShader *iface) {}
-static HRESULT shader_none_alloc(IWineD3DDevice *iface) {return WINED3D_OK;}
-static void shader_none_free(IWineD3DDevice *iface) {}
-static BOOL shader_none_dirty_const(IWineD3DDevice *iface) {return FALSE;}
-
-static void shader_none_get_caps(WINED3DDEVTYPE devtype,
- const struct wined3d_gl_info *gl_info, struct shader_caps *pCaps)
-{
- /* Set the shader caps to 0 for the none shader backend */
- pCaps->VertexShaderVersion = 0;
- pCaps->PixelShaderVersion = 0;
- pCaps->PixelShader1xMaxValue = 0.0f;
-}
-
-static BOOL shader_none_color_fixup_supported(struct color_fixup_desc fixup)
-{
- if (TRACE_ON(d3d_shader) && TRACE_ON(d3d))
- {
- TRACE("Checking support for fixup:\n");
- dump_color_fixup_desc(fixup);
- }
-
- /* Faked to make some apps happy. */
- if (!is_yuv_fixup(fixup))
- {
- TRACE("[OK]\n");
- return TRUE;
- }
-
- TRACE("[FAILED]\n");
- return FALSE;
-}
-
-const shader_backend_t none_shader_backend = {
- shader_none_handle_instruction,
- shader_none_select,
- shader_none_select_depth_blt,
- shader_none_deselect_depth_blt,
- shader_none_update_float_vertex_constants,
- shader_none_update_float_pixel_constants,
- shader_none_load_constants,
- shader_none_load_np2fixup_constants,
- shader_none_destroy,
- shader_none_alloc,
- shader_none_free,
- shader_none_dirty_const,
- shader_none_get_caps,
- shader_none_color_fixup_supported,
-};
diff --git a/reactos/dll/directx/wine/wined3d/buffer.c b/reactos/dll/directx/wine/wined3d/buffer.c
index 20201b12eb3..e22d311beb9 100644
--- a/reactos/dll/directx/wine/wined3d/buffer.c
+++ b/reactos/dll/directx/wine/wined3d/buffer.c
@@ -3,7 +3,7 @@
* Copyright 2002-2005 Raphael Junqueira
* Copyright 2004 Christian Costa
* Copyright 2005 Oliver Stieber
- * Copyright 2007 Stefan Dösinger for CodeWeavers
+ * Copyright 2007-2010 Stefan Dösinger for CodeWeavers
* Copyright 2009 Henri Verbeet for CodeWeavers
*
* This library is free software; you can redistribute it and/or
@@ -56,7 +56,13 @@ static inline BOOL buffer_add_dirty_area(struct wined3d_buffer *This, UINT offse
}
}
- if(!offset && !size)
+ if(offset > This->resource.size || offset + size > This->resource.size)
+ {
+ WARN("Invalid range dirtified, marking entire buffer dirty\n");
+ offset = 0;
+ size = This->resource.size;
+ }
+ else if(!offset && !size)
{
size = This->resource.size;
}
@@ -145,11 +151,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This)
{
TRACE("Gl usage = GL_STREAM_DRAW_ARB\n");
gl_usage = GL_STREAM_DRAW_ARB;
- }
- else
- {
- TRACE("Gl usage = GL_DYNAMIC_DRAW_ARB\n");
- gl_usage = GL_DYNAMIC_DRAW_ARB;
if(gl_info->supported[APPLE_FLUSH_BUFFER_RANGE])
{
@@ -157,6 +158,12 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This)
checkGLcall("glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_FLUSHING_UNMAP_APPLE, GL_FALSE)");
This->flags |= WINED3D_BUFFER_FLUSH;
}
+ /* No setup is needed here for GL_ARB_map_buffer_range */
+ }
+ else
+ {
+ TRACE("Gl usage = GL_DYNAMIC_DRAW_ARB\n");
+ gl_usage = GL_DYNAMIC_DRAW_ARB;
}
/* Reserve memory for the buffer. The amount of data won't change
@@ -483,7 +490,7 @@ static BOOL buffer_find_decl(struct wined3d_buffer *This)
* FLOAT16s if not supported. Also, we can't iterate over the array, so use macros to generate code for all
* the attributes that our current fixed function pipeline implementation cares for.
*/
- BOOL support_d3dcolor = gl_info->supported[EXT_VERTEX_ARRAY_BGRA];
+ BOOL support_d3dcolor = gl_info->supported[ARB_VERTEX_ARRAY_BGRA];
ret = buffer_check_attribute(This, si, WINED3D_FFP_POSITION,
TRUE, TRUE, FALSE, &stride_this_run, &float16_used) || ret;
ret = buffer_check_attribute(This, si, WINED3D_FFP_NORMAL,
@@ -1026,6 +1033,51 @@ static WINED3DRESOURCETYPE STDMETHODCALLTYPE buffer_GetType(IWineD3DBuffer *ifac
/* IWineD3DBuffer methods */
+static DWORD buffer_sanitize_flags(DWORD flags)
+{
+ /* Not all flags make sense together, but Windows never returns an error. Catch the
+ * cases that could cause issues */
+ if(flags & WINED3DLOCK_READONLY)
+ {
+ if(flags & WINED3DLOCK_DISCARD)
+ {
+ WARN("WINED3DLOCK_READONLY combined with WINED3DLOCK_DISCARD, ignoring flags\n");
+ return 0;
+ }
+ if(flags & WINED3DLOCK_NOOVERWRITE)
+ {
+ WARN("WINED3DLOCK_READONLY combined with WINED3DLOCK_NOOVERWRITE, ignoring flags\n");
+ return 0;
+ }
+ }
+ else if((flags & (WINED3DLOCK_DISCARD | WINED3DLOCK_NOOVERWRITE)) == (WINED3DLOCK_DISCARD | WINED3DLOCK_NOOVERWRITE))
+ {
+ WARN("WINED3DLOCK_DISCARD and WINED3DLOCK_NOOVERWRITE used together, ignoring\n");
+ return 0;
+ }
+
+ return flags;
+}
+
+static GLbitfield buffer_gl_map_flags(DWORD d3d_flags)
+{
+ GLbitfield ret = 0;
+
+ if (!(d3d_flags & WINED3DLOCK_READONLY)) ret = GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT;
+
+ if (d3d_flags & (WINED3DLOCK_DISCARD | WINED3DLOCK_NOOVERWRITE))
+ {
+ if(d3d_flags & WINED3DLOCK_DISCARD) ret |= GL_MAP_INVALIDATE_BUFFER_BIT;
+ ret |= GL_MAP_UNSYNCHRONIZED_BIT;
+ }
+ else
+ {
+ ret |= GL_MAP_READ_BIT;
+ }
+
+ return ret;
+}
+
static HRESULT STDMETHODCALLTYPE buffer_Map(IWineD3DBuffer *iface, UINT offset, UINT size, BYTE **data, DWORD flags)
{
struct wined3d_buffer *This = (struct wined3d_buffer *)iface;
@@ -1033,7 +1085,11 @@ static HRESULT STDMETHODCALLTYPE buffer_Map(IWineD3DBuffer *iface, UINT offset,
TRACE("iface %p, offset %u, size %u, data %p, flags %#x\n", iface, offset, size, data, flags);
- if (!buffer_add_dirty_area(This, offset, size)) return E_OUTOFMEMORY;
+ flags = buffer_sanitize_flags(flags);
+ if (!(flags & WINED3DLOCK_READONLY))
+ {
+ if (!buffer_add_dirty_area(This, offset, size)) return E_OUTOFMEMORY;
+ }
count = InterlockedIncrement(&This->lock_count);
@@ -1043,6 +1099,7 @@ static HRESULT STDMETHODCALLTYPE buffer_Map(IWineD3DBuffer *iface, UINT offset,
{
IWineD3DDeviceImpl *device = This->resource.device;
struct wined3d_context *context;
+ const struct wined3d_gl_info *gl_info;
if(This->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB)
{
@@ -1050,9 +1107,20 @@ static HRESULT STDMETHODCALLTYPE buffer_Map(IWineD3DBuffer *iface, UINT offset,
}
context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+ gl_info = context->gl_info;
ENTER_GL();
GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object));
- This->resource.allocatedMemory = GL_EXTCALL(glMapBufferARB(This->buffer_type_hint, GL_READ_WRITE_ARB));
+
+ if (gl_info->supported[ARB_MAP_BUFFER_RANGE])
+ {
+ GLbitfield mapflags = buffer_gl_map_flags(flags);
+ This->resource.allocatedMemory = GL_EXTCALL(glMapBufferRange(This->buffer_type_hint, 0,
+ This->resource.size, mapflags));
+ }
+ else
+ {
+ This->resource.allocatedMemory = GL_EXTCALL(glMapBufferARB(This->buffer_type_hint, GL_READ_WRITE_ARB));
+ }
LEAVE_GL();
context_release(context);
}
@@ -1093,6 +1161,7 @@ static HRESULT STDMETHODCALLTYPE buffer_Unmap(IWineD3DBuffer *iface)
if(!(This->flags & WINED3D_BUFFER_DOUBLEBUFFER) && This->buffer_object)
{
IWineD3DDeviceImpl *device = This->resource.device;
+ const struct wined3d_gl_info *gl_info;
struct wined3d_context *context;
if(This->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB)
@@ -1101,10 +1170,21 @@ static HRESULT STDMETHODCALLTYPE buffer_Unmap(IWineD3DBuffer *iface)
}
context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+ gl_info = context->gl_info;
ENTER_GL();
GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object));
- if(This->flags & WINED3D_BUFFER_FLUSH)
+ if (gl_info->supported[ARB_MAP_BUFFER_RANGE])
+ {
+ for(i = 0; i < This->modified_areas; i++)
+ {
+ GL_EXTCALL(glFlushMappedBufferRange(This->buffer_type_hint,
+ This->maps[i].offset,
+ This->maps[i].size));
+ checkGLcall("glFlushMappedBufferRange");
+ }
+ }
+ else if (This->flags & WINED3D_BUFFER_FLUSH)
{
for(i = 0; i < This->modified_areas; i++)
{
@@ -1196,8 +1276,7 @@ HRESULT buffer_init(struct wined3d_buffer *buffer, IWineD3DDeviceImpl *device,
TRACE("size %#x, usage %#x, format %s, memory @ %p, iface @ %p.\n", buffer->resource.size, buffer->resource.usage,
debug_d3dformat(buffer->resource.format_desc->format), buffer->resource.allocatedMemory, buffer);
- /* TODO: GL_ARB_map_buffer_range */
- dynamic_buffer_ok = gl_info->supported[APPLE_FLUSH_BUFFER_RANGE];
+ dynamic_buffer_ok = gl_info->supported[APPLE_FLUSH_BUFFER_RANGE] || gl_info->supported[ARB_MAP_BUFFER_RANGE];
/* Observations show that drawStridedSlow is faster on dynamic VBs than converting +
* drawStridedFast (half-life 2 and others).
diff --git a/reactos/dll/directx/wine/wined3d/context.c b/reactos/dll/directx/wine/wined3d/context.c
index 2aec7d6bfd3..08789855812 100644
--- a/reactos/dll/directx/wine/wined3d/context.c
+++ b/reactos/dll/directx/wine/wined3d/context.c
@@ -114,7 +114,7 @@ static void context_destroy_fbo(struct wined3d_context *context, GLuint *fbo)
}
/* GL locking is done by the caller */
-static void context_apply_attachment_filter_states(IWineD3DSurface *surface, BOOL force_preload)
+static void context_apply_attachment_filter_states(IWineD3DSurface *surface)
{
const IWineD3DSurfaceImpl *surface_impl = (IWineD3DSurfaceImpl *)surface;
IWineD3DDeviceImpl *device = surface_impl->resource.device;
@@ -148,7 +148,7 @@ static void context_apply_attachment_filter_states(IWineD3DSurface *surface, BOO
IWineD3DBaseTexture_Release((IWineD3DBaseTexture *)texture_impl);
}
- if (update_minfilter || update_magfilter || force_preload)
+ if (update_minfilter || update_magfilter)
{
GLenum target, bind_target;
GLint old_binding;
@@ -166,8 +166,6 @@ static void context_apply_attachment_filter_states(IWineD3DSurface *surface, BOO
glGetIntegerv(GL_TEXTURE_BINDING_CUBE_MAP_ARB, &old_binding);
}
- surface_internal_preload(surface, SRGB_RGB);
-
glBindTexture(bind_target, surface_impl->texture_name);
if (update_minfilter) glTexParameteri(bind_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
if (update_magfilter) glTexParameteri(bind_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -208,7 +206,8 @@ void context_attach_depth_stencil_fbo(struct wined3d_context *context,
}
else
{
- context_apply_attachment_filter_states(depth_stencil, TRUE);
+ surface_prepare_texture(depth_stencil_impl, FALSE);
+ context_apply_attachment_filter_states(depth_stencil);
if (format_flags & WINED3DFMT_FLAG_DEPTH)
{
@@ -253,14 +252,15 @@ void context_attach_depth_stencil_fbo(struct wined3d_context *context,
void context_attach_surface_fbo(const struct wined3d_context *context,
GLenum fbo_target, DWORD idx, IWineD3DSurface *surface)
{
- const IWineD3DSurfaceImpl *surface_impl = (IWineD3DSurfaceImpl *)surface;
+ IWineD3DSurfaceImpl *surface_impl = (IWineD3DSurfaceImpl *)surface;
const struct wined3d_gl_info *gl_info = context->gl_info;
TRACE("Attach surface %p to %u\n", surface, idx);
if (surface)
{
- context_apply_attachment_filter_states(surface, TRUE);
+ surface_prepare_texture(surface_impl, FALSE);
+ context_apply_attachment_filter_states(surface);
gl_info->fbo_ops.glFramebufferTexture2D(fbo_target, GL_COLOR_ATTACHMENT0 + idx, surface_impl->texture_target,
surface_impl->texture_name, surface_impl->texture_level);
@@ -431,10 +431,10 @@ static void context_apply_fbo_entry(struct wined3d_context *context, struct fbo_
for (i = 0; i < gl_info->limits.buffers; ++i)
{
if (device->render_targets[i])
- context_apply_attachment_filter_states(device->render_targets[i], FALSE);
+ context_apply_attachment_filter_states(device->render_targets[i]);
}
if (device->stencilBufferTarget)
- context_apply_attachment_filter_states(device->stencilBufferTarget, FALSE);
+ context_apply_attachment_filter_states(device->stencilBufferTarget);
}
for (i = 0; i < gl_info->limits.buffers; ++i)
@@ -532,32 +532,38 @@ void context_alloc_event_query(struct wined3d_context *context, struct wined3d_e
if (context->free_event_query_count)
{
- query->id = context->free_event_queries[--context->free_event_query_count];
+ query->object = context->free_event_queries[--context->free_event_query_count];
}
else
{
- if (gl_info->supported[APPLE_FENCE])
+ if (gl_info->supported[ARB_SYNC])
+ {
+ /* Using ARB_sync, not much to do here. */
+ query->object.sync = NULL;
+ TRACE("Allocated event query %p in context %p.\n", query->object.sync, context);
+ }
+ else if (gl_info->supported[APPLE_FENCE])
{
ENTER_GL();
- GL_EXTCALL(glGenFencesAPPLE(1, &query->id));
+ GL_EXTCALL(glGenFencesAPPLE(1, &query->object.id));
checkGLcall("glGenFencesAPPLE");
LEAVE_GL();
- TRACE("Allocated event query %u in context %p.\n", query->id, context);
+ TRACE("Allocated event query %u in context %p.\n", query->object.id, context);
}
else if(gl_info->supported[NV_FENCE])
{
ENTER_GL();
- GL_EXTCALL(glGenFencesNV(1, &query->id));
+ GL_EXTCALL(glGenFencesNV(1, &query->object.id));
checkGLcall("glGenFencesNV");
LEAVE_GL();
- TRACE("Allocated event query %u in context %p.\n", query->id, context);
+ TRACE("Allocated event query %u in context %p.\n", query->object.id, context);
}
else
{
WARN("Event queries not supported, not allocating query id.\n");
- query->id = 0;
+ query->object.id = 0;
}
}
@@ -575,12 +581,12 @@ void context_free_event_query(struct wined3d_event_query *query)
if (context->free_event_query_count >= context->free_event_query_size - 1)
{
UINT new_size = context->free_event_query_size << 1;
- GLuint *new_data = HeapReAlloc(GetProcessHeap(), 0, context->free_event_queries,
+ union wined3d_gl_query_object *new_data = HeapReAlloc(GetProcessHeap(), 0, context->free_event_queries,
new_size * sizeof(*context->free_event_queries));
if (!new_data)
{
- ERR("Failed to grow free list, leaking query %u in context %p.\n", query->id, context);
+ ERR("Failed to grow free list, leaking query %u in context %p.\n", query->object.id, context);
return;
}
@@ -588,7 +594,7 @@ void context_free_event_query(struct wined3d_event_query *query)
context->free_event_queries = new_data;
}
- context->free_event_queries[context->free_event_query_count++] = query->id;
+ context->free_event_queries[context->free_event_query_count++] = query->object;
}
void context_resource_released(IWineD3DDevice *iface, IWineD3DResource *resource, WINED3DRESOURCETYPE type)
@@ -661,6 +667,7 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
struct fbo_entry *entry, *entry2;
HGLRC restore_ctx;
HDC restore_dc;
+ unsigned int i;
restore_ctx = pwglGetCurrentContext();
restore_dc = pwglGetCurrentDC();
@@ -682,8 +689,12 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
{
if (context->valid)
{
- if (gl_info->supported[APPLE_FENCE]) GL_EXTCALL(glDeleteFencesAPPLE(1, &event_query->id));
- else if (gl_info->supported[NV_FENCE]) GL_EXTCALL(glDeleteFencesNV(1, &event_query->id));
+ if (gl_info->supported[ARB_SYNC])
+ {
+ if (event_query->object.sync) GL_EXTCALL(glDeleteSync(event_query->object.sync));
+ }
+ else if (gl_info->supported[APPLE_FENCE]) GL_EXTCALL(glDeleteFencesAPPLE(1, &event_query->object.id));
+ else if (gl_info->supported[NV_FENCE]) GL_EXTCALL(glDeleteFencesNV(1, &event_query->object.id));
}
event_query->context = NULL;
}
@@ -720,10 +731,24 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
if (gl_info->supported[ARB_OCCLUSION_QUERY])
GL_EXTCALL(glDeleteQueriesARB(context->free_occlusion_query_count, context->free_occlusion_queries));
- if (gl_info->supported[APPLE_FENCE])
- GL_EXTCALL(glDeleteFencesAPPLE(context->free_event_query_count, context->free_event_queries));
+ if (gl_info->supported[ARB_SYNC])
+ {
+ if (event_query->object.sync) GL_EXTCALL(glDeleteSync(event_query->object.sync));
+ }
+ else if (gl_info->supported[APPLE_FENCE])
+ {
+ for (i = 0; i < context->free_event_query_count; ++i)
+ {
+ GL_EXTCALL(glDeleteFencesAPPLE(1, &context->free_event_queries[i].id));
+ }
+ }
else if (gl_info->supported[NV_FENCE])
- GL_EXTCALL(glDeleteFencesNV(context->free_event_query_count, context->free_event_queries));
+ {
+ for (i = 0; i < context->free_event_query_count; ++i)
+ {
+ GL_EXTCALL(glDeleteFencesNV(1, &context->free_event_queries[i].id));
+ }
+ }
checkGLcall("context cleanup");
}
@@ -2131,6 +2156,8 @@ static void context_apply_state(struct wined3d_context *context, IWineD3DDeviceI
if (context->render_offscreen)
{
FIXME("Activating for CTXUSAGE_BLIT for an offscreen target with ORM_FBO. This should be avoided.\n");
+ surface_internal_preload(context->current_rt, SRGB_RGB);
+
ENTER_GL();
context_bind_fbo(context, GL_FRAMEBUFFER, &context->dst_fbo);
context_attach_surface_fbo(context, GL_FRAMEBUFFER, 0, context->current_rt);
@@ -2189,6 +2216,9 @@ static void context_apply_state(struct wined3d_context *context, IWineD3DDeviceI
}
IWineD3DDeviceImpl_FindTexUnitMap(device);
+ device_preload_textures(device);
+ if (isStateDirty(context, STATE_VDECL))
+ device_update_stream_info(device, context->gl_info);
ENTER_GL();
for (i = 0; i < context->numDirtyEntries; ++i)
diff --git a/reactos/dll/directx/wine/wined3d/device.c b/reactos/dll/directx/wine/wined3d/device.c
index 34495d396d9..6682aa4635e 100644
--- a/reactos/dll/directx/wine/wined3d/device.c
+++ b/reactos/dll/directx/wine/wined3d/device.c
@@ -179,8 +179,6 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
{
/* We need to deal with frequency data! */
IWineD3DVertexDeclarationImpl *declaration = (IWineD3DVertexDeclarationImpl *)This->stateBlock->vertexDecl;
- UINT stream_count = This->stateBlock->streamIsUP ? 0 : declaration->num_streams;
- const DWORD *streams = declaration->streams;
unsigned int i;
stream_info->use_map = 0;
@@ -298,7 +296,7 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
stream_info->elements[idx].stream_idx = element->input_slot;
stream_info->elements[idx].buffer_object = buffer_object;
- if (!This->adapter->gl_info.supported[EXT_VERTEX_ARRAY_BGRA]
+ if (!This->adapter->gl_info.supported[ARB_VERTEX_ARRAY_BGRA]
&& element->format_desc->format == WINED3DFMT_B8G8R8A8_UNORM)
{
stream_info->swizzle_map |= 1 << idx;
@@ -307,17 +305,29 @@ void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
}
}
- /* Now call PreLoad on all the vertex buffers. In the very rare case
- * that the buffers stopps converting PreLoad will dirtify the VDECL again.
- * The vertex buffer can now use the strided structure in the device instead of finding its
- * own again.
- *
- * NULL streams won't be recorded in the array, UP streams won't be either. A stream is only
- * once in there. */
- for (i = 0; i < stream_count; ++i)
+ if (!This->stateBlock->streamIsUP)
{
- IWineD3DBuffer *vb = This->stateBlock->streamSource[streams[i]];
- if (vb) IWineD3DBuffer_PreLoad(vb);
+ WORD map = stream_info->use_map;
+
+ /* PreLoad all the vertex buffers. */
+ for (i = 0; map; map >>= 1, ++i)
+ {
+ struct wined3d_stream_info_element *element;
+ struct wined3d_buffer *buffer;
+
+ if (!(map & 1)) continue;
+
+ element = &stream_info->elements[i];
+ buffer = (struct wined3d_buffer *)This->stateBlock->streamSource[element->stream_idx];
+ IWineD3DBuffer_PreLoad((IWineD3DBuffer *)buffer);
+
+ /* If PreLoad dropped the buffer object, update the stream info. */
+ if (buffer->buffer_object != element->buffer_object)
+ {
+ element->buffer_object = 0;
+ element->data = buffer_get_sysmem(buffer) + (ptrdiff_t)element->data;
+ }
+ }
}
}
@@ -332,7 +342,7 @@ static void stream_info_element_from_strided(const struct wined3d_gl_info *gl_in
e->buffer_object = 0;
}
-void device_stream_info_from_strided(const struct wined3d_gl_info *gl_info,
+static void device_stream_info_from_strided(const struct wined3d_gl_info *gl_info,
const struct WineDirect3DVertexStridedData *strided, struct wined3d_stream_info *stream_info)
{
unsigned int i;
@@ -361,7 +371,7 @@ void device_stream_info_from_strided(const struct wined3d_gl_info *gl_info,
{
if (!stream_info->elements[i].format_desc) continue;
- if (!gl_info->supported[EXT_VERTEX_ARRAY_BGRA]
+ if (!gl_info->supported[ARB_VERTEX_ARRAY_BGRA]
&& stream_info->elements[i].format_desc->format == WINED3DFMT_B8G8R8A8_UNORM)
{
stream_info->swizzle_map |= 1 << i;
@@ -370,6 +380,120 @@ void device_stream_info_from_strided(const struct wined3d_gl_info *gl_info,
}
}
+static void device_trace_strided_stream_info(const struct wined3d_stream_info *stream_info)
+{
+ TRACE("Strided Data:\n");
+ TRACE_STRIDED(stream_info, WINED3D_FFP_POSITION);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_BLENDWEIGHT);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_BLENDINDICES);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_NORMAL);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_PSIZE);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_DIFFUSE);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_SPECULAR);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD0);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD1);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD2);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD3);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD4);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD5);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD6);
+ TRACE_STRIDED(stream_info, WINED3D_FFP_TEXCOORD7);
+}
+
+/* Context activation is done by the caller. */
+void device_update_stream_info(IWineD3DDeviceImpl *device, const struct wined3d_gl_info *gl_info)
+{
+ struct wined3d_stream_info *stream_info = &device->strided_streams;
+ IWineD3DStateBlockImpl *stateblock = device->stateBlock;
+ BOOL vs = stateblock->vertexShader && device->vs_selected_mode != SHADER_NONE;
+ BOOL fixup = FALSE;
+
+ if (device->up_strided)
+ {
+ /* Note: this is a ddraw fixed-function code path. */
+ TRACE("=============================== Strided Input ================================\n");
+ device_stream_info_from_strided(gl_info, device->up_strided, stream_info);
+ if (TRACE_ON(d3d)) device_trace_strided_stream_info(stream_info);
+ }
+ else
+ {
+ TRACE("============================= Vertex Declaration =============================\n");
+ device_stream_info_from_declaration(device, vs, stream_info, &fixup);
+ }
+
+ if (vs && !stream_info->position_transformed)
+ {
+ if (((IWineD3DVertexDeclarationImpl *)stateblock->vertexDecl)->half_float_conv_needed && !fixup)
+ {
+ TRACE("Using drawStridedSlow with vertex shaders for FLOAT16 conversion.\n");
+ device->useDrawStridedSlow = TRUE;
+ }
+ else
+ {
+ device->useDrawStridedSlow = FALSE;
+ }
+ }
+ else
+ {
+ WORD slow_mask = (1 << WINED3D_FFP_PSIZE);
+ slow_mask |= -!gl_info->supported[ARB_VERTEX_ARRAY_BGRA]
+ & ((1 << WINED3D_FFP_DIFFUSE) | (1 << WINED3D_FFP_SPECULAR));
+
+ if ((stream_info->position_transformed || (stream_info->use_map & slow_mask)) && !fixup)
+ {
+ device->useDrawStridedSlow = TRUE;
+ }
+ else
+ {
+ device->useDrawStridedSlow = FALSE;
+ }
+ }
+}
+
+static void device_preload_texture(IWineD3DStateBlockImpl *stateblock, unsigned int idx)
+{
+ IWineD3DBaseTextureImpl *texture;
+ enum WINED3DSRGB srgb;
+
+ if (!(texture = (IWineD3DBaseTextureImpl *)stateblock->textures[idx])) return;
+ srgb = stateblock->samplerState[idx][WINED3DSAMP_SRGBTEXTURE] ? SRGB_SRGB : SRGB_RGB;
+ texture->baseTexture.internal_preload((IWineD3DBaseTexture *)texture, srgb);
+}
+
+void device_preload_textures(IWineD3DDeviceImpl *device)
+{
+ IWineD3DStateBlockImpl *stateblock = device->stateBlock;
+ unsigned int i;
+
+ if (use_vs(stateblock))
+ {
+ for (i = 0; i < MAX_VERTEX_SAMPLERS; ++i)
+ {
+ if (((IWineD3DBaseShaderImpl *)stateblock->vertexShader)->baseShader.reg_maps.sampler_type[i])
+ device_preload_texture(stateblock, MAX_FRAGMENT_SAMPLERS + i);
+ }
+ }
+
+ if (use_ps(stateblock))
+ {
+ for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i)
+ {
+ if (((IWineD3DBaseShaderImpl *)stateblock->pixelShader)->baseShader.reg_maps.sampler_type[i])
+ device_preload_texture(stateblock, i);
+ }
+ }
+ else
+ {
+ WORD ffu_map = device->fixed_function_usage_map;
+
+ for (i = 0; ffu_map; ffu_map >>= 1, ++i)
+ {
+ if (ffu_map & 1)
+ device_preload_texture(stateblock, i);
+ }
+ }
+}
+
/**********************************************************
* IUnknown parts follows
**********************************************************/
@@ -596,7 +720,11 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateSurface(IWineD3DDevice *iface, UI
IWineD3DSurfaceImpl *object;
HRESULT hr;
- TRACE("(%p) Create surface\n",This);
+ TRACE("iface %p, width %u, height %u, format %s (%#x), lockable %#x, discard %#x, level %u\n",
+ iface, Width, Height, debug_d3dformat(Format), Format, Lockable, Discard, Level);
+ TRACE("surface %p, usage %s (%#x), pool %s (%#x), multisample_type %#x, multisample_quality %u\n",
+ ppSurface, debug_d3dusage(Usage), Usage, debug_d3dpool(Pool), Pool, MultiSample, MultisampleQuality);
+ TRACE("surface_type %#x, parent %p, parent_ops %p.\n", Impl, parent, parent_ops);
if (Impl == SURFACE_OPENGL && !This->adapter)
{
@@ -784,104 +912,33 @@ static HRESULT WINAPI IWineD3DDeviceImpl_CreateCubeTexture(IWineD3DDevice *iface
return WINED3D_OK;
}
-static HRESULT WINAPI IWineD3DDeviceImpl_CreateQuery(IWineD3DDevice *iface, WINED3DQUERYTYPE Type, IWineD3DQuery **ppQuery, IUnknown* parent) {
+static HRESULT WINAPI IWineD3DDeviceImpl_CreateQuery(IWineD3DDevice *iface,
+ WINED3DQUERYTYPE type, IWineD3DQuery **query, IUnknown *parent)
+{
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
- const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
- IWineD3DQueryImpl *object; /*NOTE: impl ref allowed since this is a create function */
- HRESULT hr = WINED3DERR_NOTAVAILABLE;
- const IWineD3DQueryVtbl *vtable;
+ IWineD3DQueryImpl *object;
+ HRESULT hr;
- /* Just a check to see if we support this type of query */
- switch(Type) {
- case WINED3DQUERYTYPE_OCCLUSION:
- TRACE("(%p) occlusion query\n", This);
- if (gl_info->supported[ARB_OCCLUSION_QUERY])
- hr = WINED3D_OK;
- else
- WARN("Unsupported in local OpenGL implementation: ARB_OCCLUSION_QUERY/NV_OCCLUSION_QUERY\n");
+ TRACE("iface %p, type %#x, query %p, parent %p.\n", iface, type, query, parent);
- vtable = &IWineD3DOcclusionQuery_Vtbl;
- break;
-
- case WINED3DQUERYTYPE_EVENT:
- if (!gl_info->supported[NV_FENCE] && !gl_info->supported[APPLE_FENCE])
- {
- /* Half-Life 2 needs this query. It does not render the main menu correctly otherwise
- * Pretend to support it, faking this query does not do much harm except potentially lowering performance
- */
- FIXME("(%p) Event query: Unimplemented, but pretending to be supported\n", This);
- }
- vtable = &IWineD3DEventQuery_Vtbl;
- hr = WINED3D_OK;
- break;
-
- case WINED3DQUERYTYPE_VCACHE:
- case WINED3DQUERYTYPE_RESOURCEMANAGER:
- case WINED3DQUERYTYPE_VERTEXSTATS:
- case WINED3DQUERYTYPE_TIMESTAMP:
- case WINED3DQUERYTYPE_TIMESTAMPDISJOINT:
- case WINED3DQUERYTYPE_TIMESTAMPFREQ:
- case WINED3DQUERYTYPE_PIPELINETIMINGS:
- case WINED3DQUERYTYPE_INTERFACETIMINGS:
- case WINED3DQUERYTYPE_VERTEXTIMINGS:
- case WINED3DQUERYTYPE_PIXELTIMINGS:
- case WINED3DQUERYTYPE_BANDWIDTHTIMINGS:
- case WINED3DQUERYTYPE_CACHEUTILIZATION:
- default:
- /* Use the base Query vtable until we have a special one for each query */
- vtable = &IWineD3DQuery_Vtbl;
- FIXME("(%p) Unhandled query type %d\n", This, Type);
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+ if (!object)
+ {
+ ERR("Failed to allocate query memory.\n");
+ return E_OUTOFMEMORY;
}
- if(NULL == ppQuery || hr != WINED3D_OK) {
+
+ hr = query_init(object, This, type, parent);
+ if (FAILED(hr))
+ {
+ WARN("Failed to initialize query, hr %#x.\n", hr);
+ HeapFree(GetProcessHeap(), 0, object);
return hr;
}
- object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
- if(!object)
- {
- ERR("Out of memory\n");
- *ppQuery = NULL;
- return WINED3DERR_OUTOFVIDEOMEMORY;
- }
+ TRACE("Created query %p.\n", object);
+ *query = (IWineD3DQuery *)object;
- object->lpVtbl = vtable;
- object->type = Type;
- object->state = QUERY_CREATED;
- object->device = This;
- object->parent = parent;
- object->ref = 1;
-
- *ppQuery = (IWineD3DQuery *)object;
-
- /* allocated the 'extended' data based on the type of query requested */
- switch(Type){
- case WINED3DQUERYTYPE_OCCLUSION:
- object->extendedData = HeapAlloc(GetProcessHeap(), 0, sizeof(struct wined3d_occlusion_query));
- ((struct wined3d_occlusion_query *)object->extendedData)->context = NULL;
- break;
-
- case WINED3DQUERYTYPE_EVENT:
- object->extendedData = HeapAlloc(GetProcessHeap(), 0, sizeof(struct wined3d_event_query));
- ((struct wined3d_event_query *)object->extendedData)->context = NULL;
- break;
-
- case WINED3DQUERYTYPE_VCACHE:
- case WINED3DQUERYTYPE_RESOURCEMANAGER:
- case WINED3DQUERYTYPE_VERTEXSTATS:
- case WINED3DQUERYTYPE_TIMESTAMP:
- case WINED3DQUERYTYPE_TIMESTAMPDISJOINT:
- case WINED3DQUERYTYPE_TIMESTAMPFREQ:
- case WINED3DQUERYTYPE_PIPELINETIMINGS:
- case WINED3DQUERYTYPE_INTERFACETIMINGS:
- case WINED3DQUERYTYPE_VERTEXTIMINGS:
- case WINED3DQUERYTYPE_PIXELTIMINGS:
- case WINED3DQUERYTYPE_BANDWIDTHTIMINGS:
- case WINED3DQUERYTYPE_CACHEUTILIZATION:
- default:
- object->extendedData = 0;
- FIXME("(%p) Unhandled query type %d\n",This , Type);
- }
- TRACE("(%p) : Created Query %p\n", This, object);
return WINED3D_OK;
}
@@ -1663,14 +1720,6 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Uninit3D(IWineD3DDevice *iface,
}
}
- /* Delete the palette conversion shader if it is around */
- if(This->paletteConversionShader) {
- ENTER_GL();
- GL_EXTCALL(glDeleteProgramsARB(1, &This->paletteConversionShader));
- LEAVE_GL();
- This->paletteConversionShader = 0;
- }
-
/* Delete the pbuffer context if there is any */
if(This->pbufferContext) context_destroy(This, This->pbufferContext);
@@ -3054,15 +3103,17 @@ static void device_update_fixed_function_usage_map(IWineD3DDeviceImpl *This) {
}
}
-static void device_map_fixed_function_samplers(IWineD3DDeviceImpl *This) {
+static void device_map_fixed_function_samplers(IWineD3DDeviceImpl *This, const struct wined3d_gl_info *gl_info)
+{
unsigned int i, tex;
WORD ffu_map;
device_update_fixed_function_usage_map(This);
ffu_map = This->fixed_function_usage_map;
- if (This->max_ffp_textures == This->max_ffp_texture_stages ||
- This->stateBlock->lowest_disabled_stage <= This->max_ffp_textures) {
+ if (This->max_ffp_textures == gl_info->limits.texture_stages
+ || This->stateBlock->lowest_disabled_stage <= This->max_ffp_textures)
+ {
for (i = 0; ffu_map; ffu_map >>= 1, ++i)
{
if (!(ffu_map & 1)) continue;
@@ -3092,7 +3143,8 @@ static void device_map_fixed_function_samplers(IWineD3DDeviceImpl *This) {
}
}
-static void device_map_psamplers(IWineD3DDeviceImpl *This) {
+static void device_map_psamplers(IWineD3DDeviceImpl *This, const struct wined3d_gl_info *gl_info)
+{
const WINED3DSAMPLER_TEXTURE_TYPE *sampler_type =
((IWineD3DPixelShaderImpl *)This->stateBlock->pixelShader)->baseShader.reg_maps.sampler_type;
unsigned int i;
@@ -3102,7 +3154,8 @@ static void device_map_psamplers(IWineD3DDeviceImpl *This) {
{
device_map_stage(This, i, i);
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_SAMPLER(i));
- if (i < MAX_TEXTURES) {
+ if (i < gl_info->limits.texture_stages)
+ {
markTextureStagesDirty(This, i);
}
}
@@ -3133,11 +3186,12 @@ static BOOL device_unit_free_for_vs(IWineD3DDeviceImpl *This, const DWORD *pshad
return !vshader_sampler_tokens[current_mapping - MAX_FRAGMENT_SAMPLERS];
}
-static void device_map_vsamplers(IWineD3DDeviceImpl *This, BOOL ps) {
+static void device_map_vsamplers(IWineD3DDeviceImpl *This, BOOL ps, const struct wined3d_gl_info *gl_info)
+{
const WINED3DSAMPLER_TEXTURE_TYPE *vshader_sampler_type =
((IWineD3DVertexShaderImpl *)This->stateBlock->vertexShader)->baseShader.reg_maps.sampler_type;
const WINED3DSAMPLER_TEXTURE_TYPE *pshader_sampler_type = NULL;
- int start = min(MAX_COMBINED_SAMPLERS, This->adapter->gl_info.limits.combined_samplers) - 1;
+ int start = min(MAX_COMBINED_SAMPLERS, gl_info->limits.combined_samplers) - 1;
int i;
if (ps) {
@@ -3174,7 +3228,9 @@ static void device_map_vsamplers(IWineD3DDeviceImpl *This, BOOL ps) {
}
}
-void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This) {
+void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This)
+{
+ const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
BOOL vs = use_vs(This->stateBlock);
BOOL ps = use_ps(This->stateBlock);
/*
@@ -3184,15 +3240,10 @@ void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This) {
* -> When the mapping of a stage is changed, sampler and ALL texture stage states have
* to be reset. Because of that try to work with a 1:1 mapping as much as possible
*/
- if (ps) {
- device_map_psamplers(This);
- } else {
- device_map_fixed_function_samplers(This);
- }
+ if (ps) device_map_psamplers(This, gl_info);
+ else device_map_fixed_function_samplers(This, gl_info);
- if (vs) {
- device_map_vsamplers(This, ps);
- }
+ if (vs) device_map_vsamplers(This, ps, gl_info);
}
static HRESULT WINAPI IWineD3DDeviceImpl_SetPixelShader(IWineD3DDevice *iface, IWineD3DPixelShader *pShader) {
@@ -3806,11 +3857,14 @@ static HRESULT WINAPI IWineD3DDeviceImpl_ProcessVertices(IWineD3DDevice *iface,
static HRESULT WINAPI IWineD3DDeviceImpl_SetTextureStageState(IWineD3DDevice *iface, DWORD Stage, WINED3DTEXTURESTAGESTATETYPE Type, DWORD Value) {
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
DWORD oldValue = This->updateStateBlock->textureState[Stage][Type];
+ const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
TRACE("(%p) : Stage=%d, Type=%s(%d), Value=%d\n", This, Stage, debug_d3dtexturestate(Type), Type, Value);
- if (Stage >= MAX_TEXTURES) {
- WARN("Attempting to set stage %u which is higher than the max stage %u, ignoring\n", Stage, MAX_TEXTURES - 1);
+ if (Stage >= gl_info->limits.texture_stages)
+ {
+ WARN("Attempting to set stage %u which is higher than the max stage %u, ignoring.\n",
+ Stage, gl_info->limits.texture_stages - 1);
return WINED3D_OK;
}
@@ -3891,6 +3945,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetTexture(IWineD3DDevice *iface,
DWORD stage, IWineD3DBaseTexture *texture)
{
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
+ const struct wined3d_gl_info *gl_info = &This->adapter->gl_info;
IWineD3DBaseTexture *prev;
TRACE("iface %p, stage %u, texture %p.\n", iface, stage, texture);
@@ -3949,7 +4004,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetTexture(IWineD3DDevice *iface,
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_PIXELSHADER);
}
- if (!prev && stage < MAX_TEXTURES)
+ if (!prev && stage < gl_info->limits.texture_stages)
{
/* The source arguments for color and alpha ops have different
* meanings when a NULL texture is bound, so the COLOROP and
@@ -3968,7 +4023,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetTexture(IWineD3DDevice *iface,
IWineD3DBaseTexture_Release(prev);
- if (!texture && stage < MAX_TEXTURES)
+ if (!texture && stage < gl_info->limits.texture_stages)
{
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_TEXTURESTAGE(stage, WINED3DTSS_COLOROP));
IWineD3DDeviceImpl_MarkStateDirty(This, STATE_TEXTURESTAGE(stage, WINED3DTSS_ALPHAOP));
@@ -4206,7 +4261,6 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfa
const WINED3DVIEWPORT *vp = &This->stateBlock->viewport;
UINT drawable_width, drawable_height;
IWineD3DSurfaceImpl *depth_stencil = (IWineD3DSurfaceImpl *) This->stencilBufferTarget;
- IWineD3DSwapChainImpl *swapchain = NULL;
struct wined3d_context *context;
/* When we're clearing parts of the drawable, make sure that the target surface is well up to date in the
@@ -4376,12 +4430,7 @@ HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfa
LEAVE_GL();
- if (SUCCEEDED(IWineD3DSurface_GetContainer((IWineD3DSurface *)target, &IID_IWineD3DSwapChain, (void **)&swapchain))) {
- if (target == (IWineD3DSurfaceImpl*) swapchain->frontBuffer) {
- wglFlush();
- }
- IWineD3DSwapChain_Release((IWineD3DSwapChain *) swapchain);
- }
+ wglFlush(); /* Flush to ensure ordering across contexts. */
context_release(context);
@@ -5340,6 +5389,9 @@ static void color_fill_fbo(IWineD3DDevice *iface, IWineD3DSurface *surface,
IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *) iface;
struct wined3d_context *context;
+ if (rect) IWineD3DSurface_LoadLocation(surface, SFLAG_INDRAWABLE, NULL);
+ IWineD3DSurface_ModifyLocation(surface, SFLAG_INDRAWABLE, TRUE);
+
if (!surface_is_offscreen(surface))
{
TRACE("Surface %p is onscreen\n", surface);
@@ -5386,6 +5438,9 @@ static void color_fill_fbo(IWineD3DDevice *iface, IWineD3DSurface *surface,
checkGLcall("glClear");
LEAVE_GL();
+
+ wglFlush(); /* Flush to ensure ordering across contexts. */
+
context_release(context);
}
@@ -5685,6 +5740,9 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetFrontBackBuffers(IWineD3DDevice *ifa
if(Swapchain->backBuffer[0]) {
IWineD3DSurface_SetContainer(Swapchain->backBuffer[0], (IWineD3DBase *) Swapchain);
((IWineD3DSurfaceImpl *)Swapchain->backBuffer[0])->Flags |= SFLAG_SWAPCHAIN;
+ Swapchain->presentParms.BackBufferWidth = BackImpl->currentDesc.Width;
+ Swapchain->presentParms.BackBufferHeight = BackImpl->currentDesc.Height;
+ Swapchain->presentParms.BackBufferFormat = BackImpl->resource.format_desc->format;
} else {
HeapFree(GetProcessHeap(), 0, Swapchain->backBuffer);
Swapchain->backBuffer = NULL;
@@ -5738,6 +5796,12 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED
break;
}
+ /* Make sure the drawables are up-to-date. Note that loading the
+ * destination surface isn't strictly required if we overwrite the
+ * entire surface. */
+ IWineD3DSurface_LoadLocation(src_surface, SFLAG_INDRAWABLE, NULL);
+ IWineD3DSurface_LoadLocation(dst_surface, SFLAG_INDRAWABLE, NULL);
+
/* Attach src surface to src fbo */
src_swapchain = get_swapchain(src_surface);
dst_swapchain = get_swapchain(dst_surface);
@@ -5753,9 +5817,6 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED
GLenum buffer = surface_get_gl_buffer(src_surface);
TRACE("Source surface %p is onscreen\n", src_surface);
- /* Make sure the drawable is up to date. In the offscreen case
- * attach_surface_fbo() implicitly takes care of this. */
- IWineD3DSurface_LoadLocation(src_surface, SFLAG_INDRAWABLE, NULL);
if(buffer == GL_FRONT) {
RECT windowsize;
@@ -5792,9 +5853,6 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED
GLenum buffer = surface_get_gl_buffer(dst_surface);
TRACE("Destination surface %p is onscreen\n", dst_surface);
- /* Make sure the drawable is up to date. In the offscreen case
- * attach_surface_fbo() implicitly takes care of this. */
- IWineD3DSurface_LoadLocation(dst_surface, SFLAG_INDRAWABLE, NULL);
if(buffer == GL_FRONT) {
RECT windowsize;
@@ -5839,6 +5897,9 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED
}
LEAVE_GL();
+
+ wglFlush(); /* Flush to ensure ordering across contexts. */
+
context_release(context);
IWineD3DSurface_ModifyLocation(dst_surface, SFLAG_INDRAWABLE, TRUE);
@@ -6982,20 +7043,19 @@ HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
for (i = 0; i < PATCHMAP_SIZE; ++i) list_init(&device->patches[i]);
select_shader_mode(&adapter->gl_info, &device->ps_selected_mode, &device->vs_selected_mode);
- device->shader_backend = select_shader_backend(adapter, device_type);
+ device->shader_backend = adapter->shader_backend;
memset(&shader_caps, 0, sizeof(shader_caps));
- device->shader_backend->shader_get_caps(device_type, &adapter->gl_info, &shader_caps);
+ device->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps);
device->d3d_vshader_constantF = shader_caps.MaxVertexShaderConst;
device->d3d_pshader_constantF = shader_caps.MaxPixelShaderConst;
device->vs_clipping = shader_caps.VSClipping;
memset(&ffp_caps, 0, sizeof(ffp_caps));
- fragment_pipeline = select_fragment_implementation(adapter, device_type);
+ fragment_pipeline = adapter->fragment_pipe;
device->frag_pipe = fragment_pipeline;
- fragment_pipeline->get_caps(device_type, &adapter->gl_info, &ffp_caps);
+ fragment_pipeline->get_caps(&adapter->gl_info, &ffp_caps);
device->max_ffp_textures = ffp_caps.MaxSimultaneousTextures;
- device->max_ffp_texture_stages = ffp_caps.MaxTextureBlendStages;
hr = compile_state_table(device->StateTable, device->multistate_funcs, &adapter->gl_info,
ffp_vertexstate_template, fragment_pipeline, misc_state_template);
@@ -7006,7 +7066,7 @@ HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
return hr;
}
- device->blitter = select_blit_implementation(adapter, device_type);
+ device->blitter = adapter->blitter;
return WINED3D_OK;
}
diff --git a/reactos/dll/directx/wine/wined3d/directx.c b/reactos/dll/directx/wine/wined3d/directx.c
index 855f97ffdda..812e5ccc9e8 100644
--- a/reactos/dll/directx/wine/wined3d/directx.c
+++ b/reactos/dll/directx/wine/wined3d/directx.c
@@ -30,6 +30,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d);
WINE_DECLARE_DEBUG_CHANNEL(d3d_caps);
#define GLINFO_LOCATION (*gl_info)
+#define WINE_DEFAULT_VIDMEM (64 * 1024 * 1024)
+#define MAKEDWORD_VERSION(maj, min) ((maj & 0xffff) << 16) | (min & 0xffff)
/* The d3d device ID */
static const GUID IID_D3DDEVICE_D3DUID = { 0xaeb2cdd4, 0x6e41, 0x43ea, { 0x94,0x1c,0x83,0x61,0xcc,0x76,0x07,0x81 } };
@@ -43,17 +45,10 @@ static const struct {
/* APPLE */
{"GL_APPLE_client_storage", APPLE_CLIENT_STORAGE, 0 },
{"GL_APPLE_fence", APPLE_FENCE, 0 },
- {"GL_APPLE_flush_render", APPLE_FLUSH_RENDER, 0 },
- {"GL_APPLE_ycbcr_422", APPLE_YCBCR_422, 0 },
{"GL_APPLE_float_pixels", APPLE_FLOAT_PIXELS, 0 },
{"GL_APPLE_flush_buffer_range", APPLE_FLUSH_BUFFER_RANGE, 0 },
-
- /* ATI */
- {"GL_ATI_separate_stencil", ATI_SEPARATE_STENCIL, 0 },
- {"GL_ATI_texture_env_combine3", ATI_TEXTURE_ENV_COMBINE3, 0 },
- {"GL_ATI_texture_mirror_once", ATI_TEXTURE_MIRROR_ONCE, 0 },
- {"GL_ATI_fragment_shader", ATI_FRAGMENT_SHADER, 0 },
- {"GL_ATI_texture_compression_3dc", ATI_TEXTURE_COMPRESSION_3DC, 0 },
+ {"GL_APPLE_flush_render", APPLE_FLUSH_RENDER, 0 },
+ {"GL_APPLE_ycbcr_422", APPLE_YCBCR_422, 0 },
/* ARB */
{"GL_ARB_color_buffer_float", ARB_COLOR_BUFFER_FLOAT, 0 },
@@ -66,7 +61,9 @@ static const struct {
{"GL_ARB_framebuffer_object", ARB_FRAMEBUFFER_OBJECT, 0 },
{"GL_ARB_geometry_shader4", ARB_GEOMETRY_SHADER4, 0 },
{"GL_ARB_half_float_pixel", ARB_HALF_FLOAT_PIXEL, 0 },
+ {"GL_ARB_half_float_vertex", ARB_HALF_FLOAT_VERTEX, 0 },
{"GL_ARB_imaging", ARB_IMAGING, 0 },
+ {"GL_ARB_map_buffer_range", ARB_MAP_BUFFER_RANGE, 0 },
{"GL_ARB_multisample", ARB_MULTISAMPLE, 0 }, /* needs GLX_ARB_MULTISAMPLE as well */
{"GL_ARB_multitexture", ARB_MULTITEXTURE, 0 },
{"GL_ARB_occlusion_query", ARB_OCCLUSION_QUERY, 0 },
@@ -74,6 +71,10 @@ static const struct {
{"GL_ARB_point_parameters", ARB_POINT_PARAMETERS, 0 },
{"GL_ARB_point_sprite", ARB_POINT_SPRITE, 0 },
{"GL_ARB_provoking_vertex", ARB_PROVOKING_VERTEX, 0 },
+ {"GL_ARB_shader_objects", ARB_SHADER_OBJECTS, 0 },
+ {"GL_ARB_shader_texture_lod", ARB_SHADER_TEXTURE_LOD, 0 },
+ {"GL_ARB_shading_language_100", ARB_SHADING_LANGUAGE_100, 0 },
+ {"GL_ARB_sync", ARB_SYNC, 0 },
{"GL_ARB_texture_border_clamp", ARB_TEXTURE_BORDER_CLAMP, 0 },
{"GL_ARB_texture_compression", ARB_TEXTURE_COMPRESSION, 0 },
{"GL_ARB_texture_cube_map", ARB_TEXTURE_CUBE_MAP, 0 },
@@ -85,23 +86,30 @@ static const struct {
{"GL_ARB_texture_non_power_of_two", ARB_TEXTURE_NON_POWER_OF_TWO, MAKEDWORD_VERSION(2, 0) },
{"GL_ARB_texture_rectangle", ARB_TEXTURE_RECTANGLE, 0 },
{"GL_ARB_texture_rg", ARB_TEXTURE_RG, 0 },
+ {"GL_ARB_vertex_array_bgra", ARB_VERTEX_ARRAY_BGRA, 0 },
{"GL_ARB_vertex_blend", ARB_VERTEX_BLEND, 0 },
{"GL_ARB_vertex_buffer_object", ARB_VERTEX_BUFFER_OBJECT, 0 },
{"GL_ARB_vertex_program", ARB_VERTEX_PROGRAM, 0 },
{"GL_ARB_vertex_shader", ARB_VERTEX_SHADER, 0 },
- {"GL_ARB_shader_objects", ARB_SHADER_OBJECTS, 0 },
- {"GL_ARB_shader_texture_lod", ARB_SHADER_TEXTURE_LOD, 0 },
- {"GL_ARB_half_float_vertex", ARB_HALF_FLOAT_VERTEX, 0 },
+
+ /* ATI */
+ {"GL_ATI_fragment_shader", ATI_FRAGMENT_SHADER, 0 },
+ {"GL_ATI_separate_stencil", ATI_SEPARATE_STENCIL, 0 },
+ {"GL_ATI_texture_compression_3dc", ATI_TEXTURE_COMPRESSION_3DC, 0 },
+ {"GL_ATI_texture_env_combine3", ATI_TEXTURE_ENV_COMBINE3, 0 },
+ {"GL_ATI_texture_mirror_once", ATI_TEXTURE_MIRROR_ONCE, 0 },
/* EXT */
{"GL_EXT_blend_color", EXT_BLEND_COLOR, 0 },
- {"GL_EXT_blend_minmax", EXT_BLEND_MINMAX, 0 },
{"GL_EXT_blend_equation_separate", EXT_BLEND_EQUATION_SEPARATE, 0 },
{"GL_EXT_blend_func_separate", EXT_BLEND_FUNC_SEPARATE, 0 },
+ {"GL_EXT_blend_minmax", EXT_BLEND_MINMAX, 0 },
{"GL_EXT_fog_coord", EXT_FOG_COORD, 0 },
{"GL_EXT_framebuffer_blit", EXT_FRAMEBUFFER_BLIT, 0 },
{"GL_EXT_framebuffer_multisample", EXT_FRAMEBUFFER_MULTISAMPLE, 0 },
{"GL_EXT_framebuffer_object", EXT_FRAMEBUFFER_OBJECT, 0 },
+ {"GL_EXT_gpu_program_parameters", EXT_GPU_PROGRAM_PARAMETERS, 0 },
+ {"GL_EXT_gpu_shader4", EXT_GPU_SHADER4, 0 },
{"GL_EXT_packed_depth_stencil", EXT_PACKED_DEPTH_STENCIL, 0 },
{"GL_EXT_paletted_texture", EXT_PALETTED_TEXTURE, 0 },
{"GL_EXT_point_parameters", EXT_POINT_PARAMETERS, 0 },
@@ -110,42 +118,36 @@ static const struct {
{"GL_EXT_stencil_two_side", EXT_STENCIL_TWO_SIDE, 0 },
{"GL_EXT_stencil_wrap", EXT_STENCIL_WRAP, 0 },
{"GL_EXT_texture3D", EXT_TEXTURE3D, MAKEDWORD_VERSION(1, 2) },
- {"GL_EXT_texture_compression_s3tc", EXT_TEXTURE_COMPRESSION_S3TC, 0 },
{"GL_EXT_texture_compression_rgtc", EXT_TEXTURE_COMPRESSION_RGTC, 0 },
+ {"GL_EXT_texture_compression_s3tc", EXT_TEXTURE_COMPRESSION_S3TC, 0 },
{"GL_EXT_texture_env_add", EXT_TEXTURE_ENV_ADD, 0 },
{"GL_EXT_texture_env_combine", EXT_TEXTURE_ENV_COMBINE, 0 },
{"GL_EXT_texture_env_dot3", EXT_TEXTURE_ENV_DOT3, 0 },
- {"GL_EXT_texture_sRGB", EXT_TEXTURE_SRGB, 0 },
- {"GL_EXT_texture_swizzle", EXT_TEXTURE_SWIZZLE, 0 },
{"GL_EXT_texture_filter_anisotropic", EXT_TEXTURE_FILTER_ANISOTROPIC, 0 },
- {"GL_EXT_texture_lod", EXT_TEXTURE_LOD, 0 },
{"GL_EXT_texture_lod_bias", EXT_TEXTURE_LOD_BIAS, 0 },
+ {"GL_EXT_texture_sRGB", EXT_TEXTURE_SRGB, 0 },
{"GL_EXT_vertex_array_bgra", EXT_VERTEX_ARRAY_BGRA, 0 },
- {"GL_EXT_vertex_shader", EXT_VERTEX_SHADER, 0 },
- {"GL_EXT_gpu_program_parameters", EXT_GPU_PROGRAM_PARAMETERS, 0 },
/* NV */
- {"GL_NV_half_float", NV_HALF_FLOAT, 0 },
+ {"GL_NV_depth_clamp", NV_DEPTH_CLAMP, 0 },
{"GL_NV_fence", NV_FENCE, 0 },
{"GL_NV_fog_distance", NV_FOG_DISTANCE, 0 },
{"GL_NV_fragment_program", NV_FRAGMENT_PROGRAM, 0 },
{"GL_NV_fragment_program2", NV_FRAGMENT_PROGRAM2, 0 },
+ {"GL_NV_fragment_program_option", NV_FRAGMENT_PROGRAM_OPTION, 0 },
+ {"GL_NV_half_float", NV_HALF_FLOAT, 0 },
+ {"GL_NV_light_max_exponent", NV_LIGHT_MAX_EXPONENT, 0 },
{"GL_NV_register_combiners", NV_REGISTER_COMBINERS, 0 },
{"GL_NV_register_combiners2", NV_REGISTER_COMBINERS2, 0 },
{"GL_NV_texgen_reflection", NV_TEXGEN_REFLECTION, 0 },
{"GL_NV_texture_env_combine4", NV_TEXTURE_ENV_COMBINE4, 0 },
{"GL_NV_texture_shader", NV_TEXTURE_SHADER, 0 },
{"GL_NV_texture_shader2", NV_TEXTURE_SHADER2, 0 },
- {"GL_NV_texture_shader3", NV_TEXTURE_SHADER3, 0 },
- {"GL_NV_occlusion_query", NV_OCCLUSION_QUERY, 0 },
{"GL_NV_vertex_program", NV_VERTEX_PROGRAM, 0 },
{"GL_NV_vertex_program1_1", NV_VERTEX_PROGRAM1_1, 0 },
{"GL_NV_vertex_program2", NV_VERTEX_PROGRAM2, 0 },
{"GL_NV_vertex_program2_option", NV_VERTEX_PROGRAM2_OPTION, 0 },
{"GL_NV_vertex_program3", NV_VERTEX_PROGRAM3, 0 },
- {"GL_NV_fragment_program_option", NV_FRAGMENT_PROGRAM_OPTION, 0 },
- {"GL_NV_depth_clamp", NV_DEPTH_CLAMP, 0 },
- {"GL_NV_light_max_exponent", NV_LIGHT_MAX_EXPONENT, 0 },
/* SGI */
{"GL_SGIS_generate_mipmap", SGIS_GENERATE_MIPMAP, 0 },
@@ -435,9 +437,9 @@ static DWORD ver_for_ext(GL_SupportedExt ext)
}
static BOOL match_ati_r300_to_500(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
- if (vendor != VENDOR_ATI) return FALSE;
+ if (card_vendor != HW_VENDOR_ATI) return FALSE;
if (device == CARD_ATI_RADEON_9500) return TRUE;
if (device == CARD_ATI_RADEON_X700) return TRUE;
if (device == CARD_ATI_RADEON_X1600) return TRUE;
@@ -445,9 +447,9 @@ static BOOL match_ati_r300_to_500(const struct wined3d_gl_info *gl_info, const c
}
static BOOL match_geforce5(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
- if (vendor == VENDOR_NVIDIA)
+ if (card_vendor == HW_VENDOR_NVIDIA)
{
if (device == CARD_NVIDIA_GEFORCEFX_5800 || device == CARD_NVIDIA_GEFORCEFX_5600)
{
@@ -458,7 +460,7 @@ static BOOL match_geforce5(const struct wined3d_gl_info *gl_info, const char *gl
}
static BOOL match_apple(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
/* MacOS has various specialities in the extensions it advertises. Some have to be loaded from
* the opengl 1.2+ core, while other extensions are advertised, but software emulated. So try to
@@ -470,18 +472,15 @@ static BOOL match_apple(const struct wined3d_gl_info *gl_info, const char *gl_re
* like client storage might be supported on other implementations too, but GL_APPLE_flush_render
* is specific to the Mac OS X window management, and GL_APPLE_ycbcr_422 is QuickTime specific. So
* the chance that other implementations support them is rather small since Win32 QuickTime uses
- * DirectDraw, not OpenGL. */
- if (gl_info->supported[APPLE_FENCE]
- && gl_info->supported[APPLE_CLIENT_STORAGE]
- && gl_info->supported[APPLE_FLUSH_RENDER]
- && gl_info->supported[APPLE_YCBCR_422])
+ * DirectDraw, not OpenGL.
+ *
+ * This test has been moved into wined3d_guess_gl_vendor()
+ */
+ if (gl_vendor == GL_VENDOR_APPLE)
{
return TRUE;
}
- else
- {
- return FALSE;
- }
+ return FALSE;
}
/* Context activation is done by the caller. */
@@ -554,31 +553,29 @@ static void test_pbo_functionality(struct wined3d_gl_info *gl_info)
}
static BOOL match_apple_intel(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
- return vendor == VENDOR_INTEL && match_apple(gl_info, gl_renderer, vendor, device);
+ return (card_vendor == HW_VENDOR_INTEL) && (gl_vendor == GL_VENDOR_APPLE);
}
static BOOL match_apple_nonr500ati(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
- if (!match_apple(gl_info, gl_renderer, vendor, device)) return FALSE;
- if (vendor != VENDOR_ATI) return FALSE;
+ if (gl_vendor != GL_VENDOR_APPLE) return FALSE;
+ if (card_vendor != HW_VENDOR_ATI) return FALSE;
if (device == CARD_ATI_RADEON_X1600) return FALSE;
return TRUE;
}
static BOOL match_fglrx(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
- if (vendor != VENDOR_ATI) return FALSE;
- if (match_apple(gl_info, gl_renderer, vendor, device)) return FALSE;
- if (strstr(gl_renderer, "DRI")) return FALSE; /* Filter out Mesa DRI drivers. */
- return TRUE;
+ return (gl_vendor == GL_VENDOR_ATI);
+
}
static BOOL match_dx10_capable(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
/* DX9 cards support 40 single float varyings in hardware, most drivers report 32. ATI misreports
* 44 varyings. So assume that if we have more than 44 varyings we have a dx10 card.
@@ -592,7 +589,7 @@ static BOOL match_dx10_capable(const struct wined3d_gl_info *gl_info, const char
/* A GL context is provided by the caller */
static BOOL match_allows_spec_alpha(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
GLenum error;
DWORD data[16];
@@ -619,15 +616,15 @@ static BOOL match_allows_spec_alpha(const struct wined3d_gl_info *gl_info, const
}
static BOOL match_apple_nvts(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
- if (!match_apple(gl_info, gl_renderer, vendor, device)) return FALSE;
+ if (!match_apple(gl_info, gl_renderer, gl_vendor, card_vendor, device)) return FALSE;
return gl_info->supported[NV_TEXTURE_SHADER];
}
/* A GL context is provided by the caller */
static BOOL match_broken_nv_clip(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
GLuint prog;
BOOL ret = FALSE;
@@ -793,7 +790,6 @@ static void quirk_apple_nvts(struct wined3d_gl_info *gl_info)
{
gl_info->supported[NV_TEXTURE_SHADER] = FALSE;
gl_info->supported[NV_TEXTURE_SHADER2] = FALSE;
- gl_info->supported[NV_TEXTURE_SHADER3] = FALSE;
}
static void quirk_disable_nvvp_clip(struct wined3d_gl_info *gl_info)
@@ -804,7 +800,7 @@ static void quirk_disable_nvvp_clip(struct wined3d_gl_info *gl_info)
struct driver_quirk
{
BOOL (*match)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device);
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device);
void (*apply)(struct wined3d_gl_info *gl_info);
const char *description;
};
@@ -923,51 +919,51 @@ static const struct driver_version_information driver_version_table[] =
* TNT/Geforce1/2 up to 71.x - driver uses numbering 7.1.8.6 for 71.86
*
* All version numbers used below are from the Linux nvidia drivers. */
- {VENDOR_NVIDIA, CARD_NVIDIA_RIVA_TNT, "NVIDIA RIVA TNT", 1, 8, 6 },
- {VENDOR_NVIDIA, CARD_NVIDIA_RIVA_TNT2, "NVIDIA RIVA TNT2/TNT2 Pro", 1, 8, 6 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE, "NVIDIA GeForce 256", 1, 8, 6 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE2_MX, "NVIDIA GeForce2 MX/MX 400", 6, 4, 3 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE2, "NVIDIA GeForce2 GTS/GeForce2 Pro", 1, 8, 6 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE3, "NVIDIA GeForce3", 6, 10, 9371 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE4_MX, "NVIDIA GeForce4 MX 460", 6, 10, 9371 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE4_TI4200, "NVIDIA GeForce4 Ti 4200", 6, 10, 9371 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5200, "NVIDIA GeForce FX 5200", 15, 11, 7516 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5600, "NVIDIA GeForce FX 5600", 15, 11, 7516 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5800, "NVIDIA GeForce FX 5800", 15, 11, 7516 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6200, "NVIDIA GeForce 6200", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6600GT, "NVIDIA GeForce 6600 GT", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6800, "NVIDIA GeForce 6800", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7300, "NVIDIA GeForce Go 7300", 15, 11, 8585 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7400, "NVIDIA GeForce Go 7400", 15, 11, 8585 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7600, "NVIDIA GeForce 7600 GT", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7800GT, "NVIDIA GeForce 7800 GT", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8300GS, "NVIDIA GeForce 8300 GS", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600GT, "NVIDIA GeForce 8600 GT", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600MGT, "NVIDIA GeForce 8600M GT", 15, 11, 8585 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8800GTS, "NVIDIA GeForce 8800 GTS", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9200, "NVIDIA GeForce 9200", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9400GT, "NVIDIA GeForce 9400 GT", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9500GT, "NVIDIA GeForce 9500 GT", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9600GT, "NVIDIA GeForce 9600 GT", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9800GT, "NVIDIA GeForce 9800 GT", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX260, "NVIDIA GeForce GTX 260", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX275, "NVIDIA GeForce GTX 275", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX280, "NVIDIA GeForce GTX 280", 15, 11, 8618 },
- {VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT240, "NVIDIA GeForce GT 240", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_RIVA_TNT, "NVIDIA RIVA TNT", 1, 8, 6 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_RIVA_TNT2, "NVIDIA RIVA TNT2/TNT2 Pro", 1, 8, 6 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE, "NVIDIA GeForce 256", 1, 8, 6 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE2_MX, "NVIDIA GeForce2 MX/MX 400", 6, 4, 3 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE2, "NVIDIA GeForce2 GTS/GeForce2 Pro", 1, 8, 6 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE3, "NVIDIA GeForce3", 6, 10, 9371 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE4_MX, "NVIDIA GeForce4 MX 460", 6, 10, 9371 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE4_TI4200, "NVIDIA GeForce4 Ti 4200", 6, 10, 9371 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5200, "NVIDIA GeForce FX 5200", 15, 11, 7516 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5600, "NVIDIA GeForce FX 5600", 15, 11, 7516 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCEFX_5800, "NVIDIA GeForce FX 5800", 15, 11, 7516 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6200, "NVIDIA GeForce 6200", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6600GT, "NVIDIA GeForce 6600 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_6800, "NVIDIA GeForce 6800", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7300, "NVIDIA GeForce Go 7300", 15, 11, 8585 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7400, "NVIDIA GeForce Go 7400", 15, 11, 8585 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7600, "NVIDIA GeForce 7600 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_7800GT, "NVIDIA GeForce 7800 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8300GS, "NVIDIA GeForce 8300 GS", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600GT, "NVIDIA GeForce 8600 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8600MGT, "NVIDIA GeForce 8600M GT", 15, 11, 8585 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_8800GTS, "NVIDIA GeForce 8800 GTS", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9200, "NVIDIA GeForce 9200", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9400GT, "NVIDIA GeForce 9400 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9500GT, "NVIDIA GeForce 9500 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9600GT, "NVIDIA GeForce 9600 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_9800GT, "NVIDIA GeForce 9800 GT", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX260, "NVIDIA GeForce GTX 260", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX275, "NVIDIA GeForce GTX 275", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GTX280, "NVIDIA GeForce GTX 280", 15, 11, 8618 },
+ {HW_VENDOR_NVIDIA, CARD_NVIDIA_GEFORCE_GT240, "NVIDIA GeForce GT 240", 15, 11, 8618 },
/* ATI cards. The driver versions are somewhat similar, but not quite the same. Let's hardcode. */
- {VENDOR_ATI, CARD_ATI_RADEON_9500, "ATI Radeon 9500", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_X700, "ATI Radeon X700 SE", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_X1600, "ATI Radeon X1600 Series", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD2300, "ATI Mobility Radeon HD 2300", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD2600, "ATI Mobility Radeon HD 2600", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD2900, "ATI Radeon HD 2900 XT", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD4350, "ATI Radeon HD 4350", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD4600, "ATI Radeon HD 4600 Series", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD4700, "ATI Radeon HD 4700 Series", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD4800, "ATI Radeon HD 4800 Series", 14, 10, 6764 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD5700, "ATI Radeon HD 5700 Series", 14, 10, 8681 },
- {VENDOR_ATI, CARD_ATI_RADEON_HD5800, "ATI Radeon HD 5800 Series", 14, 10, 8681 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_9500, "ATI Radeon 9500", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_X700, "ATI Radeon X700 SE", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_X1600, "ATI Radeon X1600 Series", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD2300, "ATI Mobility Radeon HD 2300", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD2600, "ATI Mobility Radeon HD 2600", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD2900, "ATI Radeon HD 2900 XT", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD4350, "ATI Radeon HD 4350", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD4600, "ATI Radeon HD 4600 Series", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD4700, "ATI Radeon HD 4700 Series", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD4800, "ATI Radeon HD 4800 Series", 14, 10, 6764 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD5700, "ATI Radeon HD 5700 Series", 14, 10, 8681 },
+ {HW_VENDOR_ATI, CARD_ATI_RADEON_HD5800, "ATI Radeon HD 5800 Series", 14, 10, 8681 },
/* TODO: Add information about legacy ATI hardware, Intel and other cards. */
};
@@ -995,14 +991,15 @@ static void init_driver_info(struct wined3d_driver_info *driver_info,
switch (vendor)
{
- case VENDOR_ATI:
+ case HW_VENDOR_ATI:
driver_info->name = "ati2dvag.dll";
break;
- case VENDOR_NVIDIA:
+ case HW_VENDOR_NVIDIA:
driver_info->name = "nv4_disp.dll";
break;
+ case HW_VENDOR_INTEL:
default:
FIXME_(d3d_caps)("Unhandled vendor %04x.\n", vendor);
driver_info->name = "Display";
@@ -1077,13 +1074,13 @@ static void init_driver_info(struct wined3d_driver_info *driver_info,
/* Context activation is done by the caller. */
static void fixup_extensions(struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor vendor, enum wined3d_pci_device device)
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
{
unsigned int i;
for (i = 0; i < (sizeof(quirk_table) / sizeof(*quirk_table)); ++i)
{
- if (!quirk_table[i].match(gl_info, gl_renderer, vendor, device)) continue;
+ if (!quirk_table[i].match(gl_info, gl_renderer, gl_vendor, card_vendor, device)) continue;
TRACE_(d3d_caps)("Applying driver quirk \"%s\".\n", quirk_table[i].description);
quirk_table[i].apply(gl_info);
}
@@ -1110,34 +1107,760 @@ static DWORD wined3d_parse_gl_version(const char *gl_version)
return MAKEDWORD_VERSION(major, minor);
}
-static enum wined3d_pci_vendor wined3d_guess_vendor(const char *gl_vendor, const char *gl_renderer)
+static enum wined3d_gl_vendor wined3d_guess_gl_vendor(struct wined3d_gl_info *gl_info, const char *gl_vendor_string, const char *gl_renderer)
{
- if (strstr(gl_vendor, "NVIDIA"))
- return VENDOR_NVIDIA;
- if (strstr(gl_vendor, "ATI"))
- return VENDOR_ATI;
+ /* MacOS has various specialities in the extensions it advertises. Some have to be loaded from
+ * the opengl 1.2+ core, while other extensions are advertised, but software emulated. So try to
+ * detect the Apple OpenGL implementation to apply some extension fixups afterwards.
+ *
+ * Detecting this isn't really easy. The vendor string doesn't mention Apple. Compile-time checks
+ * aren't sufficient either because a Linux binary may display on a macos X server via remote X11.
+ * So try to detect the GL implementation by looking at certain Apple extensions. Some extensions
+ * like client storage might be supported on other implementations too, but GL_APPLE_flush_render
+ * is specific to the Mac OS X window management, and GL_APPLE_ycbcr_422 is QuickTime specific. So
+ * the chance that other implementations support them is rather small since Win32 QuickTime uses
+ * DirectDraw, not OpenGL. */
+ if (gl_info->supported[APPLE_FENCE]
+ && gl_info->supported[APPLE_CLIENT_STORAGE]
+ && gl_info->supported[APPLE_FLUSH_RENDER]
+ && gl_info->supported[APPLE_YCBCR_422])
+ return GL_VENDOR_APPLE;
- if (strstr(gl_vendor, "Intel(R)")
+ if (strstr(gl_vendor_string, "NVIDIA"))
+ return GL_VENDOR_NVIDIA;
+
+ if (strstr(gl_vendor_string, "ATI"))
+ return GL_VENDOR_ATI;
+
+ if (strstr(gl_vendor_string, "Intel(R)")
|| strstr(gl_renderer, "Intel(R)")
- || strstr(gl_vendor, "Intel Inc."))
- return VENDOR_INTEL;
+ || strstr(gl_vendor_string, "Intel Inc."))
+ return GL_VENDOR_INTEL;
- if (strstr(gl_vendor, "Mesa")
- || strstr(gl_vendor, "DRI R300 Project")
- || strstr(gl_vendor, "Tungsten Graphics, Inc")
- || strstr(gl_vendor, "VMware, Inc."))
- return VENDOR_MESA;
+ if (strstr(gl_vendor_string, "Mesa")
+ || strstr(gl_vendor_string, "Advanced Micro Devices, Inc.")
+ || strstr(gl_vendor_string, "DRI R300 Project")
+ || strstr(gl_vendor_string, "X.Org R300 Project")
+ || strstr(gl_vendor_string, "Tungsten Graphics, Inc")
+ || strstr(gl_vendor_string, "VMware, Inc.")
+ || strstr(gl_renderer, "Mesa")
+ || strstr(gl_renderer, "Gallium"))
+ return GL_VENDOR_MESA;
- FIXME_(d3d_caps)("Received unrecognized GL_VENDOR %s. Returning VENDOR_WINE.\n", debugstr_a(gl_vendor));
+ FIXME_(d3d_caps)("Received unrecognized GL_VENDOR %s. Returning GL_VENDOR_WINE.\n", debugstr_a(gl_vendor_string));
- return VENDOR_WINE;
+ return GL_VENDOR_WINE;
}
-static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
- enum wined3d_pci_vendor *vendor, unsigned int *vidmem)
+static enum wined3d_pci_vendor wined3d_guess_card_vendor(const char *gl_vendor_string, const char *gl_renderer)
{
- /* Below is a list of Nvidia and ATI GPUs. Both vendors have dozens of
+ if (strstr(gl_vendor_string, "NVIDIA"))
+ return HW_VENDOR_NVIDIA;
+
+ if (strstr(gl_vendor_string, "ATI")
+ || strstr(gl_vendor_string, "Advanced Micro Devices, Inc.")
+ || strstr(gl_vendor_string, "X.Org R300 Project")
+ || strstr(gl_vendor_string, "DRI R300 Project"))
+ return HW_VENDOR_ATI;
+
+ if (strstr(gl_vendor_string, "Intel(R)")
+ || strstr(gl_renderer, "Intel(R)")
+ || strstr(gl_vendor_string, "Intel Inc."))
+ return HW_VENDOR_INTEL;
+
+ if (strstr(gl_vendor_string, "Mesa")
+ || strstr(gl_vendor_string, "Tungsten Graphics, Inc")
+ || strstr(gl_vendor_string, "VMware, Inc."))
+ return HW_VENDOR_WINE;
+
+ FIXME_(d3d_caps)("Received unrecognized GL_VENDOR %s. Returning HW_VENDOR_NVIDIA.\n", debugstr_a(gl_vendor_string));
+
+ return HW_VENDOR_NVIDIA;
+}
+
+
+
+enum wined3d_pci_device select_card_nvidia_binary(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ unsigned int *vidmem )
+{
+ /* Both the GeforceFX, 6xxx and 7xxx series support D3D9. The last two types have more
+ * shader capabilities, so we use the shader capabilities to distinguish between FX and 6xxx/7xxx.
+ */
+ if (WINE_D3D9_CAPABLE(gl_info) && gl_info->supported[NV_VERTEX_PROGRAM3])
+ {
+ /* Geforce 200 - highend */
+ if (strstr(gl_renderer, "GTX 280")
+ || strstr(gl_renderer, "GTX 285")
+ || strstr(gl_renderer, "GTX 295"))
+ {
+ *vidmem = 1024;
+ return CARD_NVIDIA_GEFORCE_GTX280;
+ }
+
+ /* Geforce 200 - midend high */
+ if (strstr(gl_renderer, "GTX 275"))
+ {
+ *vidmem = 896;
+ return CARD_NVIDIA_GEFORCE_GTX275;
+ }
+
+ /* Geforce 200 - midend */
+ if (strstr(gl_renderer, "GTX 260"))
+ {
+ *vidmem = 1024;
+ return CARD_NVIDIA_GEFORCE_GTX260;
+ }
+ /* Geforce 200 - midend */
+ if (strstr(gl_renderer, "GT 240"))
+ {
+ *vidmem = 512;
+ return CARD_NVIDIA_GEFORCE_GT240;
+ }
+
+ /* Geforce9 - highend / Geforce 200 - midend (GTS 150/250 are based on the same core) */
+ if (strstr(gl_renderer, "9800")
+ || strstr(gl_renderer, "GTS 150")
+ || strstr(gl_renderer, "GTS 250"))
+ {
+ *vidmem = 512;
+ return CARD_NVIDIA_GEFORCE_9800GT;
+ }
+
+ /* Geforce9 - midend */
+ if (strstr(gl_renderer, "9600"))
+ {
+ *vidmem = 384; /* The 9600GSO has 384MB, the 9600GT has 512-1024MB */
+ return CARD_NVIDIA_GEFORCE_9600GT;
+ }
+
+ /* Geforce9 - midend low / Geforce 200 - low */
+ if (strstr(gl_renderer, "9500")
+ || strstr(gl_renderer, "GT 120")
+ || strstr(gl_renderer, "GT 130"))
+ {
+ *vidmem = 256; /* The 9500GT has 256-1024MB */
+ return CARD_NVIDIA_GEFORCE_9500GT;
+ }
+
+ /* Geforce9 - lowend */
+ if (strstr(gl_renderer, "9400"))
+ {
+ *vidmem = 256; /* The 9400GT has 256-1024MB */
+ return CARD_NVIDIA_GEFORCE_9400GT;
+ }
+
+ /* Geforce9 - lowend low */
+ if (strstr(gl_renderer, "9100")
+ || strstr(gl_renderer, "9200")
+ || strstr(gl_renderer, "9300")
+ || strstr(gl_renderer, "G 100"))
+ {
+ *vidmem = 256; /* The 9100-9300 cards have 256MB */
+ return CARD_NVIDIA_GEFORCE_9200;
+ }
+
+ /* Geforce8 - highend */
+ if (strstr(gl_renderer, "8800"))
+ {
+ *vidmem = 320; /* The 8800GTS uses 320MB, a 8800GTX can have 768MB */
+ return CARD_NVIDIA_GEFORCE_8800GTS;
+ }
+
+ /* Geforce8 - midend mobile */
+ if (strstr(gl_renderer, "8600 M"))
+ {
+ *vidmem = 512;
+ return CARD_NVIDIA_GEFORCE_8600MGT;
+ }
+
+ /* Geforce8 - midend */
+ if (strstr(gl_renderer, "8600")
+ || strstr(gl_renderer, "8700"))
+ {
+ *vidmem = 256;
+ return CARD_NVIDIA_GEFORCE_8600GT;
+ }
+
+ /* Geforce8 - lowend */
+ if (strstr(gl_renderer, "8100")
+ || strstr(gl_renderer, "8200")
+ || strstr(gl_renderer, "8300")
+ || strstr(gl_renderer, "8400")
+ || strstr(gl_renderer, "8500"))
+ {
+ *vidmem = 128; /* 128-256MB for a 8300, 256-512MB for a 8400 */
+ return CARD_NVIDIA_GEFORCE_8300GS;
+ }
+
+ /* Geforce7 - highend */
+ if (strstr(gl_renderer, "7800")
+ || strstr(gl_renderer, "7900")
+ || strstr(gl_renderer, "7950")
+ || strstr(gl_renderer, "Quadro FX 4")
+ || strstr(gl_renderer, "Quadro FX 5"))
+ {
+ *vidmem = 256; /* A 7800GT uses 256MB while highend 7900 cards can use 512MB */
+ return CARD_NVIDIA_GEFORCE_7800GT;
+ }
+
+ /* Geforce7 midend */
+ if (strstr(gl_renderer, "7600")
+ || strstr(gl_renderer, "7700"))
+ {
+ *vidmem = 256; /* The 7600 uses 256-512MB */
+ return CARD_NVIDIA_GEFORCE_7600;
+ }
+
+ /* Geforce7 lower medium */
+ if (strstr(gl_renderer, "7400"))
+ {
+ *vidmem = 256; /* The 7400 uses 256-512MB */
+ return CARD_NVIDIA_GEFORCE_7400;
+ }
+
+ /* Geforce7 lowend */
+ if (strstr(gl_renderer, "7300"))
+ {
+ *vidmem = 256; /* Mac Pros with this card have 256 MB */
+ return CARD_NVIDIA_GEFORCE_7300;
+ }
+
+ /* Geforce6 highend */
+ if (strstr(gl_renderer, "6800"))
+ {
+ *vidmem = 128; /* The 6800 uses 128-256MB, the 7600 uses 256-512MB */
+ return CARD_NVIDIA_GEFORCE_6800;
+ }
+
+ /* Geforce6 - midend */
+ if (strstr(gl_renderer, "6600")
+ || strstr(gl_renderer, "6610")
+ || strstr(gl_renderer, "6700"))
+ {
+ *vidmem = 128; /* A 6600GT has 128-256MB */
+ return CARD_NVIDIA_GEFORCE_6600GT;
+ }
+
+ /* Geforce6/7 lowend */
+ *vidmem = 64; /* */
+ return CARD_NVIDIA_GEFORCE_6200; /* Geforce 6100/6150/6200/7300/7400/7500 */
+ }
+
+ if (WINE_D3D9_CAPABLE(gl_info))
+ {
+ /* GeforceFX - highend */
+ if (strstr(gl_renderer, "5800")
+ || strstr(gl_renderer, "5900")
+ || strstr(gl_renderer, "5950")
+ || strstr(gl_renderer, "Quadro FX"))
+ {
+ *vidmem = 256; /* 5800-5900 cards use 256MB */
+ return CARD_NVIDIA_GEFORCEFX_5800;
+ }
+
+ /* GeforceFX - midend */
+ if (strstr(gl_renderer, "5600")
+ || strstr(gl_renderer, "5650")
+ || strstr(gl_renderer, "5700")
+ || strstr(gl_renderer, "5750"))
+ {
+ *vidmem = 128; /* A 5600 uses 128-256MB */
+ return CARD_NVIDIA_GEFORCEFX_5600;
+ }
+
+ /* GeforceFX - lowend */
+ *vidmem = 64; /* Normal FX5200 cards use 64-256MB; laptop (non-standard) can have less */
+ return CARD_NVIDIA_GEFORCEFX_5200; /* GeforceFX 5100/5200/5250/5300/5500 */
+ }
+
+ if (WINE_D3D8_CAPABLE(gl_info))
+ {
+ if (strstr(gl_renderer, "GeForce4 Ti") || strstr(gl_renderer, "Quadro4"))
+ {
+ *vidmem = 64; /* Geforce4 Ti cards have 64-128MB */
+ return CARD_NVIDIA_GEFORCE4_TI4200; /* Geforce4 Ti4200/Ti4400/Ti4600/Ti4800, Quadro4 */
+ }
+
+ *vidmem = 64; /* Geforce3 cards have 64-128MB */
+ return CARD_NVIDIA_GEFORCE3; /* Geforce3 standard/Ti200/Ti500, Quadro DCC */
+ }
+
+ if (WINE_D3D7_CAPABLE(gl_info))
+ {
+ if (strstr(gl_renderer, "GeForce4 MX"))
+ {
+ /* Most Geforce4MX GPUs have at least 64MB of memory, some
+ * early models had 32MB but most have 64MB or even 128MB. */
+ *vidmem = 64;
+ return CARD_NVIDIA_GEFORCE4_MX; /* MX420/MX440/MX460/MX4000 */
+ }
+
+ if (strstr(gl_renderer, "GeForce2 MX") || strstr(gl_renderer, "Quadro2 MXR"))
+ {
+ *vidmem = 32; /* Geforce2MX GPUs have 32-64MB of video memory */
+ return CARD_NVIDIA_GEFORCE2_MX; /* Geforce2 standard/MX100/MX200/MX400, Quadro2 MXR */
+ }
+
+ if (strstr(gl_renderer, "GeForce2") || strstr(gl_renderer, "Quadro2"))
+ {
+ *vidmem = 32; /* Geforce2 GPUs have 32-64MB of video memory */
+ return CARD_NVIDIA_GEFORCE2; /* Geforce2 GTS/Pro/Ti/Ultra, Quadro2 */
+ }
+
+ /* Most Geforce1 cards have 32MB, there are also some rare 16
+ * and 64MB (Dell) models. */
+ *vidmem = 32;
+ return CARD_NVIDIA_GEFORCE; /* Geforce 256/DDR, Quadro */
+ }
+
+ if (strstr(gl_renderer, "TNT2"))
+ {
+ *vidmem = 32; /* Most TNT2 boards have 32MB, though there are 16MB boards too */
+ return CARD_NVIDIA_RIVA_TNT2; /* Riva TNT2 standard/M64/Pro/Ultra */
+ }
+
+ *vidmem = 16; /* Most TNT boards have 16MB, some rare models have 8MB */
+ return CARD_NVIDIA_RIVA_TNT; /* Riva TNT, Vanta */
+
+}
+
+enum wined3d_pci_device select_card_ati_binary(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ unsigned int *vidmem )
+{
+ /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx
+ *
+ * Beware: renderer string do not match exact card model,
+ * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
+ if (WINE_D3D9_CAPABLE(gl_info))
+ {
+ /* Radeon EG CYPRESS XT / PRO HD5800 - highend */
+ if (strstr(gl_renderer, "HD 5800") /* Radeon EG CYPRESS HD58xx generic renderer string */
+ || strstr(gl_renderer, "HD 5850") /* Radeon EG CYPRESS XT */
+ || strstr(gl_renderer, "HD 5870")) /* Radeon EG CYPRESS PRO */
+ {
+ *vidmem = 1024; /* note: HD58xx cards use 1024MB */
+ return CARD_ATI_RADEON_HD5800;
+ }
+
+ /* Radeon EG JUNIPER XT / LE HD5700 - midend */
+ if (strstr(gl_renderer, "HD 5700") /* Radeon EG JUNIPER HD57xx generic renderer string */
+ || strstr(gl_renderer, "HD 5750") /* Radeon EG JUNIPER LE */
+ || strstr(gl_renderer, "HD 5770")) /* Radeon EG JUNIPER XT */
+ {
+ *vidmem = 512; /* note: HD5770 cards use 1024MB and HD5750 cards use 512MB or 1024MB */
+ return CARD_ATI_RADEON_HD5700;
+ }
+
+ /* Radeon R7xx HD4800 - highend */
+ if (strstr(gl_renderer, "HD 4800") /* Radeon RV7xx HD48xx generic renderer string */
+ || strstr(gl_renderer, "HD 4830") /* Radeon RV770 */
+ || strstr(gl_renderer, "HD 4850") /* Radeon RV770 */
+ || strstr(gl_renderer, "HD 4870") /* Radeon RV770 */
+ || strstr(gl_renderer, "HD 4890")) /* Radeon RV790 */
+ {
+ *vidmem = 512; /* note: HD4890 cards use 1024MB */
+ return CARD_ATI_RADEON_HD4800;
+ }
+
+ /* Radeon R740 HD4700 - midend */
+ if (strstr(gl_renderer, "HD 4700") /* Radeon RV770 */
+ || strstr(gl_renderer, "HD 4770")) /* Radeon RV740 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4700;
+ }
+
+ /* Radeon R730 HD4600 - midend */
+ if (strstr(gl_renderer, "HD 4600") /* Radeon RV730 */
+ || strstr(gl_renderer, "HD 4650") /* Radeon RV730 */
+ || strstr(gl_renderer, "HD 4670")) /* Radeon RV730 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4600;
+ }
+
+ /* Radeon R710 HD4500/HD4350 - lowend */
+ if (strstr(gl_renderer, "HD 4350") /* Radeon RV710 */
+ || strstr(gl_renderer, "HD 4550")) /* Radeon RV710 */
+ {
+ *vidmem = 256;
+ return CARD_ATI_RADEON_HD4350;
+ }
+
+ /* Radeon R6xx HD2900/HD3800 - highend */
+ if (strstr(gl_renderer, "HD 2900")
+ || strstr(gl_renderer, "HD 3870")
+ || strstr(gl_renderer, "HD 3850"))
+ {
+ *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+ return CARD_ATI_RADEON_HD2900;
+ }
+
+ /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+ if (strstr(gl_renderer, "HD 2600")
+ || strstr(gl_renderer, "HD 3830")
+ || strstr(gl_renderer, "HD 3690")
+ || strstr(gl_renderer, "HD 3650"))
+ {
+ *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+ return CARD_ATI_RADEON_HD2600;
+ }
+
+ /* Radeon R6xx HD2300/HD2400/HD3400 - lowend */
+ if (strstr(gl_renderer, "HD 2300")
+ || strstr(gl_renderer, "HD 2400")
+ || strstr(gl_renderer, "HD 3470")
+ || strstr(gl_renderer, "HD 3450")
+ || strstr(gl_renderer, "HD 3430")
+ || strstr(gl_renderer, "HD 3400"))
+ {
+ *vidmem = 128; /* HD2300 uses at least 128MB, HD2400 uses 256MB */
+ return CARD_ATI_RADEON_HD2300;
+ }
+
+ /* Radeon R6xx/R7xx integrated */
+ if (strstr(gl_renderer, "HD 3100")
+ || strstr(gl_renderer, "HD 3200")
+ || strstr(gl_renderer, "HD 3300"))
+ {
+ *vidmem = 128; /* 128MB */
+ return CARD_ATI_RADEON_HD3200;
+ }
+
+ /* Radeon R5xx */
+ if (strstr(gl_renderer, "X1600")
+ || strstr(gl_renderer, "X1650")
+ || strstr(gl_renderer, "X1800")
+ || strstr(gl_renderer, "X1900")
+ || strstr(gl_renderer, "X1950"))
+ {
+ *vidmem = 128; /* X1600 uses 128-256MB, >=X1800 uses 256MB */
+ return CARD_ATI_RADEON_X1600;
+ }
+
+ /* Radeon R4xx + X1300/X1400/X1450/X1550/X2300 (lowend R5xx) */
+ if (strstr(gl_renderer, "X700")
+ || strstr(gl_renderer, "X800")
+ || strstr(gl_renderer, "X850")
+ || strstr(gl_renderer, "X1300")
+ || strstr(gl_renderer, "X1400")
+ || strstr(gl_renderer, "X1450")
+ || strstr(gl_renderer, "X1550"))
+ {
+ *vidmem = 128; /* x700/x8*0 use 128-256MB, >=x1300 128-512MB */
+ return CARD_ATI_RADEON_X700;
+ }
+
+ /* Radeon Xpress Series - onboard, DX9b, Shader 2.0, 300-400MHz */
+ if (strstr(gl_renderer, "Radeon Xpress"))
+ {
+ *vidmem = 64; /* Shared RAM, BIOS configurable, 64-256M */
+ return CARD_ATI_RADEON_XPRESS_200M;
+ }
+
+ /* Radeon R3xx */
+ *vidmem = 64; /* Radeon 9500 uses 64MB, higher models use up to 256MB */
+ return CARD_ATI_RADEON_9500; /* Radeon 9500/9550/9600/9700/9800/X300/X550/X600 */
+ }
+
+ if (WINE_D3D8_CAPABLE(gl_info))
+ {
+ *vidmem = 64; /* 8500/9000 cards use mostly 64MB, though there are 32MB and 128MB models */
+ return CARD_ATI_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */
+ }
+
+ if (WINE_D3D7_CAPABLE(gl_info))
+ {
+ *vidmem = 32; /* There are models with up to 64MB */
+ return CARD_ATI_RADEON_7200; /* Radeon 7000/7100/7200/7500 */
+ }
+
+ *vidmem = 16; /* There are 16-32MB models */
+ return CARD_ATI_RAGE_128PRO;
+
+}
+
+enum wined3d_pci_device select_card_intel_binary(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ unsigned int *vidmem )
+{
+ if (strstr(gl_renderer, "X3100"))
+ {
+ /* MacOS calls the card GMA X3100, Google findings also suggest the name GM965 */
+ *vidmem = 128;
+ return CARD_INTEL_X3100;
+ }
+
+ if (strstr(gl_renderer, "GMA 950") || strstr(gl_renderer, "945GM"))
+ {
+ /* MacOS calls the card GMA 950, but everywhere else the PCI ID is named 945GM */
+ *vidmem = 64;
+ return CARD_INTEL_I945GM;
+ }
+
+ if (strstr(gl_renderer, "915GM")) return CARD_INTEL_I915GM;
+ if (strstr(gl_renderer, "915G")) return CARD_INTEL_I915G;
+ if (strstr(gl_renderer, "865G")) return CARD_INTEL_I865G;
+ if (strstr(gl_renderer, "855G")) return CARD_INTEL_I855G;
+ if (strstr(gl_renderer, "830G")) return CARD_INTEL_I830G;
+ return CARD_INTEL_I915G;
+
+}
+
+enum wined3d_pci_device (select_card_ati_mesa)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ unsigned int *vidmem )
+{
+ /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx
+ *
+ * Beware: renderer string do not match exact card model,
+ * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
+ if (strstr(gl_renderer, "Gallium"))
+ {
+ /* Radeon R7xx HD4800 - highend */
+ if (strstr(gl_renderer, "R700") /* Radeon R7xx HD48xx generic renderer string */
+ || strstr(gl_renderer, "RV770") /* Radeon RV770 */
+ || strstr(gl_renderer, "RV790")) /* Radeon RV790 */
+ {
+ *vidmem = 512; /* note: HD4890 cards use 1024MB */
+ return CARD_ATI_RADEON_HD4800;
+ }
+
+ /* Radeon R740 HD4700 - midend */
+ if (strstr(gl_renderer, "RV740")) /* Radeon RV740 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4700;
+ }
+
+ /* Radeon R730 HD4600 - midend */
+ if (strstr(gl_renderer, "RV730")) /* Radeon RV730 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4600;
+ }
+
+ /* Radeon R710 HD4500/HD4350 - lowend */
+ if (strstr(gl_renderer, "RV710")) /* Radeon RV710 */
+ {
+ *vidmem = 256;
+ return CARD_ATI_RADEON_HD4350;
+ }
+
+ /* Radeon R6xx HD2900/HD3800 - highend */
+ if (strstr(gl_renderer, "R600")
+ || strstr(gl_renderer, "RV670")
+ || strstr(gl_renderer, "R680"))
+ {
+ *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+ return CARD_ATI_RADEON_HD2900;
+ }
+
+ /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+ if (strstr(gl_renderer, "RV630")
+ || strstr(gl_renderer, "RV635"))
+ {
+ *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+ return CARD_ATI_RADEON_HD2600;
+ }
+
+ /* Radeon R6xx HD2300/HD2400/HD3400 - lowend */
+ if (strstr(gl_renderer, "RV610")
+ || strstr(gl_renderer, "RV620"))
+ {
+ *vidmem = 128; /* HD2300 uses at least 128MB, HD2400 uses 256MB */
+ return CARD_ATI_RADEON_HD2300;
+ }
+
+ /* Radeon R6xx/R7xx integrated */
+ if (strstr(gl_renderer, "RS780")
+ || strstr(gl_renderer, "RS880"))
+ {
+ *vidmem = 128; /* 128MB */
+ return CARD_ATI_RADEON_HD3200;
+ }
+
+ /* Radeon R5xx */
+ if (strstr(gl_renderer, "RV530")
+ || strstr(gl_renderer, "RV535")
+ || strstr(gl_renderer, "RV560")
+ || strstr(gl_renderer, "R520")
+ || strstr(gl_renderer, "RV570")
+ || strstr(gl_renderer, "R580"))
+ {
+ *vidmem = 128; /* X1600 uses 128-256MB, >=X1800 uses 256MB */
+ return CARD_ATI_RADEON_X1600;
+ }
+
+ /* Radeon R4xx + X1300/X1400/X1450/X1550/X2300 (lowend R5xx) */
+ if (strstr(gl_renderer, "R410")
+ || strstr(gl_renderer, "R420")
+ || strstr(gl_renderer, "R423")
+ || strstr(gl_renderer, "R430")
+ || strstr(gl_renderer, "R480")
+ || strstr(gl_renderer, "R481")
+ || strstr(gl_renderer, "RV410")
+ || strstr(gl_renderer, "RV515")
+ || strstr(gl_renderer, "RV516"))
+ {
+ *vidmem = 128; /* x700/x8*0 use 128-256MB, >=x1300 128-512MB */
+ return CARD_ATI_RADEON_X700;
+ }
+
+ /* Radeon Xpress Series - onboard, DX9b, Shader 2.0, 300-400MHz */
+ if (strstr(gl_renderer, "RS400")
+ || strstr(gl_renderer, "RS480")
+ || strstr(gl_renderer, "RS482")
+ || strstr(gl_renderer, "RS485")
+ || strstr(gl_renderer, "RS600")
+ || strstr(gl_renderer, "RS690")
+ || strstr(gl_renderer, "RS740"))
+ {
+ *vidmem = 64; /* Shared RAM, BIOS configurable, 64-256M */
+ return CARD_ATI_RADEON_XPRESS_200M;
+ }
+
+ /* Radeon R3xx */
+ if (strstr(gl_renderer, "R300")
+ || strstr(gl_renderer, "RV350")
+ || strstr(gl_renderer, "RV351")
+ || strstr(gl_renderer, "RV360")
+ || strstr(gl_renderer, "RV370")
+ || strstr(gl_renderer, "R350")
+ || strstr(gl_renderer, "R360"))
+ {
+ *vidmem = 64; /* Radeon 9500 uses 64MB, higher models use up to 256MB */
+ return CARD_ATI_RADEON_9500; /* Radeon 9500/9550/9600/9700/9800/X300/X550/X600 */
+ }
+ }
+
+ if (WINE_D3D9_CAPABLE(gl_info))
+ {
+ /* Radeon R7xx HD4800 - highend */
+ if (strstr(gl_renderer, "(R700") /* Radeon R7xx HD48xx generic renderer string */
+ || strstr(gl_renderer, "(RV770") /* Radeon RV770 */
+ || strstr(gl_renderer, "(RV790")) /* Radeon RV790 */
+ {
+ *vidmem = 512; /* note: HD4890 cards use 1024MB */
+ return CARD_ATI_RADEON_HD4800;
+ }
+
+ /* Radeon R740 HD4700 - midend */
+ if (strstr(gl_renderer, "(RV740")) /* Radeon RV740 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4700;
+ }
+
+ /* Radeon R730 HD4600 - midend */
+ if (strstr(gl_renderer, "(RV730")) /* Radeon RV730 */
+ {
+ *vidmem = 512;
+ return CARD_ATI_RADEON_HD4600;
+ }
+
+ /* Radeon R710 HD4500/HD4350 - lowend */
+ if (strstr(gl_renderer, "(RV710")) /* Radeon RV710 */
+ {
+ *vidmem = 256;
+ return CARD_ATI_RADEON_HD4350;
+ }
+
+ /* Radeon R6xx HD2900/HD3800 - highend */
+ if (strstr(gl_renderer, "(R600")
+ || strstr(gl_renderer, "(RV670")
+ || strstr(gl_renderer, "(R680"))
+ {
+ *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
+ return CARD_ATI_RADEON_HD2900;
+ }
+
+ /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
+ if (strstr(gl_renderer, "(RV630")
+ || strstr(gl_renderer, "(RV635"))
+ {
+ *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
+ return CARD_ATI_RADEON_HD2600;
+ }
+
+ /* Radeon R6xx HD2300/HD2400/HD3400 - lowend */
+ if (strstr(gl_renderer, "(RV610")
+ || strstr(gl_renderer, "(RV620"))
+ {
+ *vidmem = 128; /* HD2300 uses at least 128MB, HD2400 uses 256MB */
+ return CARD_ATI_RADEON_HD2300;
+ }
+
+ /* Radeon R6xx/R7xx integrated */
+ if (strstr(gl_renderer, "(RS780")
+ || strstr(gl_renderer, "(RS880"))
+ {
+ *vidmem = 128; /* 128MB */
+ return CARD_ATI_RADEON_HD3200;
+ }
+ }
+
+ if (WINE_D3D8_CAPABLE(gl_info))
+ {
+ *vidmem = 64; /* 8500/9000 cards use mostly 64MB, though there are 32MB and 128MB models */
+ return CARD_ATI_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */
+ }
+
+ if (WINE_D3D7_CAPABLE(gl_info))
+ {
+ *vidmem = 32; /* There are models with up to 64MB */
+ return CARD_ATI_RADEON_7200; /* Radeon 7000/7100/7200/7500 */
+ }
+
+ *vidmem = 16; /* There are 16-32MB models */
+ return CARD_ATI_RAGE_128PRO;
+
+}
+
+enum wined3d_pci_device (select_card_nvidia_mesa)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ unsigned int *vidmem )
+{
+ FIXME_(d3d_caps)("Card selection not handled for Mesa Nouveau driver\n");
+ if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCEFX_5600;
+ if (WINE_D3D8_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE3;
+ if (WINE_D3D7_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE;
+ if (WINE_D3D6_CAPABLE(gl_info)) return CARD_NVIDIA_RIVA_TNT;
+ return CARD_NVIDIA_RIVA_128;
+}
+
+enum wined3d_pci_device (select_card_intel_mesa)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ unsigned int *vidmem )
+{
+ FIXME_(d3d_caps)("Card selection not handled for Mesa Intel driver\n");
+ return CARD_INTEL_I915G;
+}
+
+
+struct vendor_card_selection
+{
+ enum wined3d_gl_vendor gl_vendor;
+ enum wined3d_pci_vendor card_vendor;
+ const char *description; /* Description of the card selector i.e. Apple OS/X Intel */
+ enum wined3d_pci_device (*select_card)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ unsigned int *vidmem );
+};
+
+static const struct vendor_card_selection vendor_card_select_table[] =
+{
+ {GL_VENDOR_NVIDIA, HW_VENDOR_NVIDIA, "Nvidia binary driver", select_card_nvidia_binary},
+ {GL_VENDOR_APPLE, HW_VENDOR_NVIDIA, "Apple OSX NVidia binary driver", select_card_nvidia_binary},
+ {GL_VENDOR_APPLE, HW_VENDOR_ATI, "Apple OSX AMD/ATI binary driver", select_card_ati_binary},
+ {GL_VENDOR_APPLE, HW_VENDOR_INTEL, "Apple OSX Intel binary driver", select_card_intel_binary},
+ {GL_VENDOR_ATI, HW_VENDOR_ATI, "AMD/ATI binary driver", select_card_ati_binary},
+ {GL_VENDOR_MESA, HW_VENDOR_ATI, "Mesa AMD/ATI driver", select_card_ati_mesa},
+ {GL_VENDOR_MESA, HW_VENDOR_NVIDIA, "Mesa Nouveau driver", select_card_nvidia_mesa},
+ {GL_VENDOR_MESA, HW_VENDOR_INTEL, "Mesa Intel driver", select_card_intel_mesa}
+};
+
+
+static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor *gl_vendor, enum wined3d_pci_vendor *card_vendor, unsigned int *vidmem)
+{
+ /* Above is a list of Nvidia and ATI GPUs. Both vendors have dozens of
* different GPUs with roughly the same features. In most cases GPUs from a
* certain family differ in clockspeeds, the amount of video memory and the
* number of shader pipelines.
@@ -1192,451 +1915,84 @@ static enum wined3d_pci_device wined3d_guess_card(const struct wined3d_gl_info *
* memory behind our backs if really needed. Note that the amount of video
* memory can be overruled using a registry setting. */
- switch (*vendor)
+ int i;
+
+ for (i = 0; i < (sizeof(vendor_card_select_table) / sizeof(*vendor_card_select_table)); ++i)
{
- case VENDOR_NVIDIA:
- /* Both the GeforceFX, 6xxx and 7xxx series support D3D9. The last two types have more
- * shader capabilities, so we use the shader capabilities to distinguish between FX and 6xxx/7xxx.
- */
- if (WINE_D3D9_CAPABLE(gl_info) && gl_info->supported[NV_VERTEX_PROGRAM3])
- {
- /* Geforce 200 - highend */
- if (strstr(gl_renderer, "GTX 280")
- || strstr(gl_renderer, "GTX 285")
- || strstr(gl_renderer, "GTX 295"))
- {
- *vidmem = 1024;
- return CARD_NVIDIA_GEFORCE_GTX280;
- }
-
- /* Geforce 200 - midend high */
- if (strstr(gl_renderer, "GTX 275"))
- {
- *vidmem = 896;
- return CARD_NVIDIA_GEFORCE_GTX275;
- }
-
- /* Geforce 200 - midend */
- if (strstr(gl_renderer, "GTX 260"))
- {
- *vidmem = 1024;
- return CARD_NVIDIA_GEFORCE_GTX260;
- }
- /* Geforce 200 - midend */
- if (strstr(gl_renderer, "GT 240"))
- {
- *vidmem = 512;
- return CARD_NVIDIA_GEFORCE_GT240;
- }
-
- /* Geforce9 - highend / Geforce 200 - midend (GTS 150/250 are based on the same core) */
- if (strstr(gl_renderer, "9800")
- || strstr(gl_renderer, "GTS 150")
- || strstr(gl_renderer, "GTS 250"))
- {
- *vidmem = 512;
- return CARD_NVIDIA_GEFORCE_9800GT;
- }
-
- /* Geforce9 - midend */
- if (strstr(gl_renderer, "9600"))
- {
- *vidmem = 384; /* The 9600GSO has 384MB, the 9600GT has 512-1024MB */
- return CARD_NVIDIA_GEFORCE_9600GT;
- }
-
- /* Geforce9 - midend low / Geforce 200 - low */
- if (strstr(gl_renderer, "9500")
- || strstr(gl_renderer, "GT 120")
- || strstr(gl_renderer, "GT 130"))
- {
- *vidmem = 256; /* The 9500GT has 256-1024MB */
- return CARD_NVIDIA_GEFORCE_9500GT;
- }
-
- /* Geforce9 - lowend */
- if (strstr(gl_renderer, "9400"))
- {
- *vidmem = 256; /* The 9400GT has 256-1024MB */
- return CARD_NVIDIA_GEFORCE_9400GT;
- }
-
- /* Geforce9 - lowend low */
- if (strstr(gl_renderer, "9100")
- || strstr(gl_renderer, "9200")
- || strstr(gl_renderer, "9300")
- || strstr(gl_renderer, "G 100"))
- {
- *vidmem = 256; /* The 9100-9300 cards have 256MB */
- return CARD_NVIDIA_GEFORCE_9200;
- }
-
- /* Geforce8 - highend */
- if (strstr(gl_renderer, "8800"))
- {
- *vidmem = 320; /* The 8800GTS uses 320MB, a 8800GTX can have 768MB */
- return CARD_NVIDIA_GEFORCE_8800GTS;
- }
-
- /* Geforce8 - midend mobile */
- if (strstr(gl_renderer, "8600 M"))
- {
- *vidmem = 512;
- return CARD_NVIDIA_GEFORCE_8600MGT;
- }
-
- /* Geforce8 - midend */
- if (strstr(gl_renderer, "8600")
- || strstr(gl_renderer, "8700"))
- {
- *vidmem = 256;
- return CARD_NVIDIA_GEFORCE_8600GT;
- }
-
- /* Geforce8 - lowend */
- if (strstr(gl_renderer, "8100")
- || strstr(gl_renderer, "8200")
- || strstr(gl_renderer, "8300")
- || strstr(gl_renderer, "8400")
- || strstr(gl_renderer, "8500"))
- {
- *vidmem = 128; /* 128-256MB for a 8300, 256-512MB for a 8400 */
- return CARD_NVIDIA_GEFORCE_8300GS;
- }
-
- /* Geforce7 - highend */
- if (strstr(gl_renderer, "7800")
- || strstr(gl_renderer, "7900")
- || strstr(gl_renderer, "7950")
- || strstr(gl_renderer, "Quadro FX 4")
- || strstr(gl_renderer, "Quadro FX 5"))
- {
- *vidmem = 256; /* A 7800GT uses 256MB while highend 7900 cards can use 512MB */
- return CARD_NVIDIA_GEFORCE_7800GT;
- }
-
- /* Geforce7 midend */
- if (strstr(gl_renderer, "7600")
- || strstr(gl_renderer, "7700"))
- {
- *vidmem = 256; /* The 7600 uses 256-512MB */
- return CARD_NVIDIA_GEFORCE_7600;
- }
-
- /* Geforce7 lower medium */
- if (strstr(gl_renderer, "7400"))
- {
- *vidmem = 256; /* The 7400 uses 256-512MB */
- return CARD_NVIDIA_GEFORCE_7400;
- }
-
- /* Geforce7 lowend */
- if (strstr(gl_renderer, "7300"))
- {
- *vidmem = 256; /* Mac Pros with this card have 256 MB */
- return CARD_NVIDIA_GEFORCE_7300;
- }
-
- /* Geforce6 highend */
- if (strstr(gl_renderer, "6800"))
- {
- *vidmem = 128; /* The 6800 uses 128-256MB, the 7600 uses 256-512MB */
- return CARD_NVIDIA_GEFORCE_6800;
- }
-
- /* Geforce6 - midend */
- if (strstr(gl_renderer, "6600")
- || strstr(gl_renderer, "6610")
- || strstr(gl_renderer, "6700"))
- {
- *vidmem = 128; /* A 6600GT has 128-256MB */
- return CARD_NVIDIA_GEFORCE_6600GT;
- }
-
- /* Geforce6/7 lowend */
- *vidmem = 64; /* */
- return CARD_NVIDIA_GEFORCE_6200; /* Geforce 6100/6150/6200/7300/7400/7500 */
- }
-
- if (WINE_D3D9_CAPABLE(gl_info))
- {
- /* GeforceFX - highend */
- if (strstr(gl_renderer, "5800")
- || strstr(gl_renderer, "5900")
- || strstr(gl_renderer, "5950")
- || strstr(gl_renderer, "Quadro FX"))
- {
- *vidmem = 256; /* 5800-5900 cards use 256MB */
- return CARD_NVIDIA_GEFORCEFX_5800;
- }
-
- /* GeforceFX - midend */
- if (strstr(gl_renderer, "5600")
- || strstr(gl_renderer, "5650")
- || strstr(gl_renderer, "5700")
- || strstr(gl_renderer, "5750"))
- {
- *vidmem = 128; /* A 5600 uses 128-256MB */
- return CARD_NVIDIA_GEFORCEFX_5600;
- }
-
- /* GeforceFX - lowend */
- *vidmem = 64; /* Normal FX5200 cards use 64-256MB; laptop (non-standard) can have less */
- return CARD_NVIDIA_GEFORCEFX_5200; /* GeforceFX 5100/5200/5250/5300/5500 */
- }
-
- if (WINE_D3D8_CAPABLE(gl_info))
- {
- if (strstr(gl_renderer, "GeForce4 Ti") || strstr(gl_renderer, "Quadro4"))
- {
- *vidmem = 64; /* Geforce4 Ti cards have 64-128MB */
- return CARD_NVIDIA_GEFORCE4_TI4200; /* Geforce4 Ti4200/Ti4400/Ti4600/Ti4800, Quadro4 */
- }
-
- *vidmem = 64; /* Geforce3 cards have 64-128MB */
- return CARD_NVIDIA_GEFORCE3; /* Geforce3 standard/Ti200/Ti500, Quadro DCC */
- }
-
- if (WINE_D3D7_CAPABLE(gl_info))
- {
- if (strstr(gl_renderer, "GeForce4 MX"))
- {
- /* Most Geforce4MX GPUs have at least 64MB of memory, some
- * early models had 32MB but most have 64MB or even 128MB. */
- *vidmem = 64;
- return CARD_NVIDIA_GEFORCE4_MX; /* MX420/MX440/MX460/MX4000 */
- }
-
- if (strstr(gl_renderer, "GeForce2 MX") || strstr(gl_renderer, "Quadro2 MXR"))
- {
- *vidmem = 32; /* Geforce2MX GPUs have 32-64MB of video memory */
- return CARD_NVIDIA_GEFORCE2_MX; /* Geforce2 standard/MX100/MX200/MX400, Quadro2 MXR */
- }
-
- if (strstr(gl_renderer, "GeForce2") || strstr(gl_renderer, "Quadro2"))
- {
- *vidmem = 32; /* Geforce2 GPUs have 32-64MB of video memory */
- return CARD_NVIDIA_GEFORCE2; /* Geforce2 GTS/Pro/Ti/Ultra, Quadro2 */
- }
-
- /* Most Geforce1 cards have 32MB, there are also some rare 16
- * and 64MB (Dell) models. */
- *vidmem = 32;
- return CARD_NVIDIA_GEFORCE; /* Geforce 256/DDR, Quadro */
- }
-
- if (strstr(gl_renderer, "TNT2"))
- {
- *vidmem = 32; /* Most TNT2 boards have 32MB, though there are 16MB boards too */
- return CARD_NVIDIA_RIVA_TNT2; /* Riva TNT2 standard/M64/Pro/Ultra */
- }
-
- *vidmem = 16; /* Most TNT boards have 16MB, some rare models have 8MB */
- return CARD_NVIDIA_RIVA_TNT; /* Riva TNT, Vanta */
-
- case VENDOR_ATI:
- /* See http://developer.amd.com/drivers/pc_vendor_id/Pages/default.aspx
- *
- * Beware: renderer string do not match exact card model,
- * eg HD 4800 is returned for multiple cards, even for RV790 based ones. */
- if (WINE_D3D9_CAPABLE(gl_info))
- {
- /* Radeon EG CYPRESS XT / PRO HD5800 - highend */
- if (strstr(gl_renderer, "HD 5800") /* Radeon EG CYPRESS HD58xx generic renderer string */
- || strstr(gl_renderer, "HD 5850") /* Radeon EG CYPRESS XT */
- || strstr(gl_renderer, "HD 5870")) /* Radeon EG CYPRESS PRO */
- {
- *vidmem = 1024; /* note: HD58xx cards use 1024MB */
- return CARD_ATI_RADEON_HD5800;
- }
-
- /* Radeon EG JUNIPER XT / LE HD5700 - midend */
- if (strstr(gl_renderer, "HD 5700") /* Radeon EG JUNIPER HD57xx generic renderer string */
- || strstr(gl_renderer, "HD 5750") /* Radeon EG JUNIPER LE */
- || strstr(gl_renderer, "HD 5770")) /* Radeon EG JUNIPER XT */
- {
- *vidmem = 512; /* note: HD5770 cards use 1024MB and HD5750 cards use 512MB or 1024MB */
- return CARD_ATI_RADEON_HD5700;
- }
-
- /* Radeon R7xx HD4800 - highend */
- if (strstr(gl_renderer, "HD 4800") /* Radeon RV7xx HD48xx generic renderer string */
- || strstr(gl_renderer, "HD 4830") /* Radeon RV770 */
- || strstr(gl_renderer, "HD 4850") /* Radeon RV770 */
- || strstr(gl_renderer, "HD 4870") /* Radeon RV770 */
- || strstr(gl_renderer, "HD 4890")) /* Radeon RV790 */
- {
- *vidmem = 512; /* note: HD4890 cards use 1024MB */
- return CARD_ATI_RADEON_HD4800;
- }
-
- /* Radeon R740 HD4700 - midend */
- if (strstr(gl_renderer, "HD 4700") /* Radeon RV770 */
- || strstr(gl_renderer, "HD 4770")) /* Radeon RV740 */
- {
- *vidmem = 512;
- return CARD_ATI_RADEON_HD4700;
- }
-
- /* Radeon R730 HD4600 - midend */
- if (strstr(gl_renderer, "HD 4600") /* Radeon RV730 */
- || strstr(gl_renderer, "HD 4650") /* Radeon RV730 */
- || strstr(gl_renderer, "HD 4670")) /* Radeon RV730 */
- {
- *vidmem = 512;
- return CARD_ATI_RADEON_HD4600;
- }
-
- /* Radeon R710 HD4500/HD4350 - lowend */
- if (strstr(gl_renderer, "HD 4350") /* Radeon RV710 */
- || strstr(gl_renderer, "HD 4550")) /* Radeon RV710 */
- {
- *vidmem = 256;
- return CARD_ATI_RADEON_HD4350;
- }
-
- /* Radeon R6xx HD2900/HD3800 - highend */
- if (strstr(gl_renderer, "HD 2900")
- || strstr(gl_renderer, "HD 3870")
- || strstr(gl_renderer, "HD 3850"))
- {
- *vidmem = 512; /* HD2900/HD3800 uses 256-1024MB */
- return CARD_ATI_RADEON_HD2900;
- }
-
- /* Radeon R6xx HD2600/HD3600 - midend; HD3830 is China-only midend */
- if (strstr(gl_renderer, "HD 2600")
- || strstr(gl_renderer, "HD 3830")
- || strstr(gl_renderer, "HD 3690")
- || strstr(gl_renderer, "HD 3650"))
- {
- *vidmem = 256; /* HD2600/HD3600 uses 256-512MB */
- return CARD_ATI_RADEON_HD2600;
- }
-
- /* Radeon R6xx HD2300/HD2400/HD3400 - lowend */
- if (strstr(gl_renderer, "HD 2300")
- || strstr(gl_renderer, "HD 2400")
- || strstr(gl_renderer, "HD 3470")
- || strstr(gl_renderer, "HD 3450")
- || strstr(gl_renderer, "HD 3430")
- || strstr(gl_renderer, "HD 3400"))
- {
- *vidmem = 128; /* HD2300 uses at least 128MB, HD2400 uses 256MB */
- return CARD_ATI_RADEON_HD2300;
- }
-
- /* Radeon R6xx/R7xx integrated */
- if (strstr(gl_renderer, "HD 3100")
- || strstr(gl_renderer, "HD 3200")
- || strstr(gl_renderer, "HD 3300"))
- {
- *vidmem = 128; /* 128MB */
- return CARD_ATI_RADEON_HD3200;
- }
-
- /* Radeon R5xx */
- if (strstr(gl_renderer, "X1600")
- || strstr(gl_renderer, "X1650")
- || strstr(gl_renderer, "X1800")
- || strstr(gl_renderer, "X1900")
- || strstr(gl_renderer, "X1950"))
- {
- *vidmem = 128; /* X1600 uses 128-256MB, >=X1800 uses 256MB */
- return CARD_ATI_RADEON_X1600;
- }
-
- /* Radeon R4xx + X1300/X1400/X1450/X1550/X2300 (lowend R5xx) */
- if (strstr(gl_renderer, "X700")
- || strstr(gl_renderer, "X800")
- || strstr(gl_renderer, "X850")
- || strstr(gl_renderer, "X1300")
- || strstr(gl_renderer, "X1400")
- || strstr(gl_renderer, "X1450")
- || strstr(gl_renderer, "X1550"))
- {
- *vidmem = 128; /* x700/x8*0 use 128-256MB, >=x1300 128-512MB */
- return CARD_ATI_RADEON_X700;
- }
-
- /* Radeon Xpress Series - onboard, DX9b, Shader 2.0, 300-400MHz */
- if (strstr(gl_renderer, "Radeon Xpress"))
- {
- *vidmem = 64; /* Shared RAM, BIOS configurable, 64-256M */
- return CARD_ATI_RADEON_XPRESS_200M;
- }
-
- /* Radeon R3xx */
- *vidmem = 64; /* Radeon 9500 uses 64MB, higher models use up to 256MB */
- return CARD_ATI_RADEON_9500; /* Radeon 9500/9550/9600/9700/9800/X300/X550/X600 */
- }
-
- if (WINE_D3D8_CAPABLE(gl_info))
- {
- *vidmem = 64; /* 8500/9000 cards use mostly 64MB, though there are 32MB and 128MB models */
- return CARD_ATI_RADEON_8500; /* Radeon 8500/9000/9100/9200/9300 */
- }
-
- if (WINE_D3D7_CAPABLE(gl_info))
- {
- *vidmem = 32; /* There are models with up to 64MB */
- return CARD_ATI_RADEON_7200; /* Radeon 7000/7100/7200/7500 */
- }
-
- *vidmem = 16; /* There are 16-32MB models */
- return CARD_ATI_RAGE_128PRO;
-
- case VENDOR_INTEL:
- if (strstr(gl_renderer, "X3100"))
- {
- /* MacOS calls the card GMA X3100, Google findings also suggest the name GM965 */
- *vidmem = 128;
- return CARD_INTEL_X3100;
- }
-
- if (strstr(gl_renderer, "GMA 950") || strstr(gl_renderer, "945GM"))
- {
- /* MacOS calls the card GMA 950, but everywhere else the PCI ID is named 945GM */
- *vidmem = 64;
- return CARD_INTEL_I945GM;
- }
-
- if (strstr(gl_renderer, "915GM")) return CARD_INTEL_I915GM;
- if (strstr(gl_renderer, "915G")) return CARD_INTEL_I915G;
- if (strstr(gl_renderer, "865G")) return CARD_INTEL_I865G;
- if (strstr(gl_renderer, "855G")) return CARD_INTEL_I855G;
- if (strstr(gl_renderer, "830G")) return CARD_INTEL_I830G;
- return CARD_INTEL_I915G;
-
- case VENDOR_MESA:
- case VENDOR_WINE:
- default:
- /* Default to generic Nvidia hardware based on the supported OpenGL extensions. The choice
- * for Nvidia was because the hardware and drivers they make are of good quality. This makes
- * them a good generic choice. */
- *vendor = VENDOR_NVIDIA;
- if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCEFX_5600;
- if (WINE_D3D8_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE3;
- if (WINE_D3D7_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE;
- if (WINE_D3D6_CAPABLE(gl_info)) return CARD_NVIDIA_RIVA_TNT;
- return CARD_NVIDIA_RIVA_128;
+ if ((vendor_card_select_table[i].gl_vendor != *gl_vendor)
+ || (vendor_card_select_table[i].card_vendor != *card_vendor))
+ continue;
+ TRACE_(d3d_caps)("Applying card_selector \"%s\".\n", vendor_card_select_table[i].description);
+ return vendor_card_select_table[i].select_card(gl_info, gl_renderer, vidmem);
}
+
+ FIXME_(d3d_caps)("No card selector available for GL vendor %d and card vendor %04x.\n",
+ *gl_vendor, *card_vendor);
+
+ /* Default to generic Nvidia hardware based on the supported OpenGL extensions. The choice
+ * for Nvidia was because the hardware and drivers they make are of good quality. This makes
+ * them a good generic choice. */
+ *card_vendor = HW_VENDOR_NVIDIA;
+ if (WINE_D3D9_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCEFX_5600;
+ if (WINE_D3D8_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE3;
+ if (WINE_D3D7_CAPABLE(gl_info)) return CARD_NVIDIA_GEFORCE;
+ if (WINE_D3D6_CAPABLE(gl_info)) return CARD_NVIDIA_RIVA_TNT;
+ return CARD_NVIDIA_RIVA_128;
+}
+
+static const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter)
+{
+ const struct wined3d_gl_info *gl_info = &adapter->gl_info;
+ int vs_selected_mode, ps_selected_mode;
+
+ select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+ if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
+ && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_fragment_pipeline;
+ else if (ps_selected_mode == SHADER_ATI) return &atifs_fragment_pipeline;
+ else if (gl_info->supported[NV_REGISTER_COMBINERS]
+ && gl_info->supported[NV_TEXTURE_SHADER2]) return &nvts_fragment_pipeline;
+ else if (gl_info->supported[NV_REGISTER_COMBINERS]) return &nvrc_fragment_pipeline;
+ else return &ffp_fragment_pipeline;
+}
+
+static const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter)
+{
+ int vs_selected_mode, ps_selected_mode;
+
+ select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
+ if (vs_selected_mode == SHADER_GLSL || ps_selected_mode == SHADER_GLSL) return &glsl_shader_backend;
+ if (vs_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_ARB) return &arb_program_shader_backend;
+ return &none_shader_backend;
+}
+
+static const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter)
+{
+ const struct wined3d_gl_info *gl_info = &adapter->gl_info;
+ int vs_selected_mode, ps_selected_mode;
+
+ select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
+ if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
+ && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_blit;
+ else return &ffp_blit;
}
/* Context activation is done by the caller. */
-static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, struct wined3d_gl_info *gl_info)
+static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_adapter *adapter)
{
+ struct wined3d_driver_info *driver_info = &adapter->driver_info;
+ struct wined3d_gl_info *gl_info = &adapter->gl_info;
const char *GL_Extensions = NULL;
const char *WGL_Extensions = NULL;
- const char *gl_string = NULL;
- enum wined3d_pci_vendor vendor;
+ const char *gl_vendor_str, *gl_renderer_str, *gl_version_str;
+ struct fragment_caps fragment_caps;
+ enum wined3d_gl_vendor gl_vendor;
+ enum wined3d_pci_vendor card_vendor;
enum wined3d_pci_device device;
GLint gl_max;
GLfloat gl_floatv[2];
unsigned i;
HDC hdc;
unsigned int vidmem=0;
- char *gl_renderer;
DWORD gl_version;
size_t len;
@@ -1644,48 +2000,34 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
ENTER_GL();
- gl_string = (const char *)glGetString(GL_RENDERER);
- TRACE_(d3d_caps)("GL_RENDERER: %s.\n", debugstr_a(gl_string));
- if (!gl_string)
+ gl_renderer_str = (const char *)glGetString(GL_RENDERER);
+ TRACE_(d3d_caps)("GL_RENDERER: %s.\n", debugstr_a(gl_renderer_str));
+ if (!gl_renderer_str)
{
LEAVE_GL();
ERR_(d3d_caps)("Received a NULL GL_RENDERER.\n");
return FALSE;
}
- len = strlen(gl_string) + 1;
- gl_renderer = HeapAlloc(GetProcessHeap(), 0, len);
- if (!gl_renderer)
- {
- LEAVE_GL();
- ERR_(d3d_caps)("Failed to allocate gl_renderer memory.\n");
- return FALSE;
- }
- memcpy(gl_renderer, gl_string, len);
-
- gl_string = (const char *)glGetString(GL_VENDOR);
- TRACE_(d3d_caps)("GL_VENDOR: %s.\n", debugstr_a(gl_string));
- if (!gl_string)
+ gl_vendor_str = (const char *)glGetString(GL_VENDOR);
+ TRACE_(d3d_caps)("GL_VENDOR: %s.\n", debugstr_a(gl_vendor_str));
+ if (!gl_vendor_str)
{
LEAVE_GL();
ERR_(d3d_caps)("Received a NULL GL_VENDOR.\n");
- HeapFree(GetProcessHeap(), 0, gl_renderer);
return FALSE;
}
- vendor = wined3d_guess_vendor(gl_string, gl_renderer);
- TRACE_(d3d_caps)("found GL_VENDOR (%s)->(0x%04x)\n", debugstr_a(gl_string), vendor);
/* Parse the GL_VERSION field into major and minor information */
- gl_string = (const char *)glGetString(GL_VERSION);
- TRACE_(d3d_caps)("GL_VERSION: %s.\n", debugstr_a(gl_string));
- if (!gl_string)
+ gl_version_str = (const char *)glGetString(GL_VERSION);
+ TRACE_(d3d_caps)("GL_VERSION: %s.\n", debugstr_a(gl_version_str));
+ if (!gl_version_str)
{
LEAVE_GL();
ERR_(d3d_caps)("Received a NULL GL_VERSION.\n");
- HeapFree(GetProcessHeap(), 0, gl_renderer);
return FALSE;
}
- gl_version = wined3d_parse_gl_version(gl_string);
+ gl_version = wined3d_parse_gl_version(gl_version_str);
/*
* Initialize openGL extension related variables
@@ -1694,7 +2036,6 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
memset(gl_info->supported, 0, sizeof(gl_info->supported));
gl_info->limits.buffers = 1;
gl_info->limits.textures = 1;
- gl_info->limits.texture_stages = 1;
gl_info->limits.fragment_samplers = 1;
gl_info->limits.vertex_samplers = 0;
gl_info->limits.combined_samplers = gl_info->limits.fragment_samplers + gl_info->limits.vertex_samplers;
@@ -1734,7 +2075,6 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
{
LEAVE_GL();
ERR_(d3d_caps)("Received a NULL GL_EXTENSIONS.\n");
- HeapFree(GetProcessHeap(), 0, gl_renderer);
return FALSE;
}
@@ -1831,6 +2171,12 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
gl_info->supported[ARB_HALF_FLOAT_PIXEL] = TRUE;
}
}
+ if (gl_info->supported[ARB_MAP_BUFFER_RANGE])
+ {
+ /* GL_ARB_map_buffer_range and GL_APPLE_flush_buffer_range provide the same
+ * functionality. Prefer the ARB extension */
+ gl_info->supported[APPLE_FLUSH_BUFFER_RANGE] = FALSE;
+ }
if (gl_info->supported[ARB_TEXTURE_CUBE_MAP])
{
TRACE_(d3d_caps)(" IMPLIED: NVIDIA (NV) Texture Gen Reflection support.\n");
@@ -1841,6 +2187,11 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
TRACE_(d3d_caps)(" IMPLIED: ARB_depth_clamp support (by NV_depth_clamp).\n");
gl_info->supported[ARB_DEPTH_CLAMP] = TRUE;
}
+ if (!gl_info->supported[ARB_VERTEX_ARRAY_BGRA] && gl_info->supported[EXT_VERTEX_ARRAY_BGRA])
+ {
+ TRACE_(d3d_caps)(" IMPLIED: ARB_vertex_array_bgra support (by EXT_vertex_array_bgra).\n");
+ gl_info->supported[ARB_VERTEX_ARRAY_BGRA] = TRUE;
+ }
if (gl_info->supported[NV_TEXTURE_SHADER2])
{
if (gl_info->supported[NV_REGISTER_COMBINERS])
@@ -1851,6 +2202,13 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
gl_info->supported[ATI_FRAGMENT_SHADER] = FALSE;
}
}
+
+ if (gl_info->supported[NV_REGISTER_COMBINERS])
+ {
+ glGetIntegerv(GL_MAX_GENERAL_COMBINERS_NV, &gl_max);
+ gl_info->limits.general_combiners = gl_max;
+ TRACE_(d3d_caps)("Max general combiners: %d.\n", gl_max);
+ }
if (gl_info->supported[ARB_DRAW_BUFFERS])
{
glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &gl_max);
@@ -1863,18 +2221,6 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
gl_info->limits.textures = min(MAX_TEXTURES, gl_max);
TRACE_(d3d_caps)("Max textures: %d.\n", gl_info->limits.textures);
- if (gl_info->supported[NV_REGISTER_COMBINERS])
- {
- GLint tmp;
- glGetIntegerv(GL_MAX_GENERAL_COMBINERS_NV, &tmp);
- gl_info->limits.texture_stages = min(MAX_TEXTURES, tmp);
- }
- else
- {
- gl_info->limits.texture_stages = min(MAX_TEXTURES, gl_max);
- }
- TRACE_(d3d_caps)("Max texture stages: %d.\n", gl_info->limits.texture_stages);
-
if (gl_info->supported[ARB_FRAGMENT_PROGRAM])
{
GLint tmp;
@@ -1998,6 +2344,11 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
gl_info->limits.glsl_varyings = gl_max;
TRACE_(d3d_caps)("Max GLSL varyings: %u (%u 4 component varyings).\n", gl_max, gl_max / 4);
}
+ if (gl_info->supported[ARB_SHADING_LANGUAGE_100])
+ {
+ const char *str = (const char *)glGetString(GL_SHADING_LANGUAGE_VERSION_ARB);
+ TRACE_(d3d_caps)("GLSL version string: %s.\n", debugstr_a(str));
+ }
if (gl_info->supported[NV_LIGHT_MAX_EXPONENT])
{
glGetFloatv(GL_MAX_SHININESS_NV, &gl_info->limits.shininess);
@@ -2024,7 +2375,6 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
gl_info->supported[NV_REGISTER_COMBINERS2] = FALSE;
gl_info->supported[NV_TEXTURE_SHADER] = FALSE;
gl_info->supported[NV_TEXTURE_SHADER2] = FALSE;
- gl_info->supported[NV_TEXTURE_SHADER3] = FALSE;
}
if (gl_info->supported[NV_HALF_FLOAT])
{
@@ -2043,6 +2393,14 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
LEAVE_GL();
+ adapter->fragment_pipe = select_fragment_implementation(adapter);
+ adapter->shader_backend = select_shader_backend(adapter);
+ adapter->blitter = select_blit_implementation(adapter);
+
+ adapter->fragment_pipe->get_caps(gl_info, &fragment_caps);
+ gl_info->limits.texture_stages = fragment_caps.MaxTextureBlendStages;
+ TRACE_(d3d_caps)("Max texture stages: %u.\n", gl_info->limits.texture_stages);
+
/* In some cases the number of texture stages can be larger than the number
* of samplers. The GF4 for example can use only 2 samplers (no fragment
* shaders), but 8 texture stages (register combiners). */
@@ -2113,8 +2471,12 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
gl_info->limits.buffers = 1;
}
- device = wined3d_guess_card(gl_info, gl_renderer, &vendor, &vidmem);
- TRACE_(d3d_caps)("FOUND (fake) card: 0x%x (vendor id), 0x%x (device id)\n", vendor, device);
+ gl_vendor = wined3d_guess_gl_vendor(gl_info, gl_vendor_str, gl_renderer_str);
+ card_vendor = wined3d_guess_card_vendor(gl_vendor_str, gl_renderer_str);
+ TRACE_(d3d_caps)("found GL_VENDOR (%s)->(0x%04x/0x%04x)\n", debugstr_a(gl_vendor_str), gl_vendor, card_vendor);
+
+ device = wined3d_guess_card(gl_info, gl_renderer_str, &gl_vendor, &card_vendor, &vidmem);
+ TRACE_(d3d_caps)("FOUND (fake) card: 0x%x (vendor id), 0x%x (device id)\n", card_vendor, device);
/* If we have an estimate use it, else default to 64MB; */
if(vidmem)
@@ -2176,11 +2538,10 @@ static BOOL IWineD3DImpl_FillGLCaps(struct wined3d_driver_info *driver_info, str
}
}
- fixup_extensions(gl_info, gl_renderer, vendor, device);
- init_driver_info(driver_info, vendor, device);
+ fixup_extensions(gl_info, gl_renderer_str, gl_vendor, card_vendor, device);
+ init_driver_info(driver_info, card_vendor, device);
add_gl_compat_wrappers(gl_info);
- HeapFree(GetProcessHeap(), 0, gl_renderer);
return TRUE;
}
@@ -2644,7 +3005,10 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceMultiSampleType(IWineD3D *iface, U
continue;
if(cfgs[i].blueSize != blueSize)
continue;
- if(cfgs[i].alphaSize != alphaSize)
+ /* Not all drivers report alpha-less formats since they use 32-bit anyway, so accept alpha even if we didn't ask for it. */
+ if(alphaSize && cfgs[i].alphaSize != alphaSize)
+ continue;
+ if(cfgs[i].colorSize != (glDesc->byte_count << 3))
continue;
TRACE("Found iPixelFormat=%d to support MultiSampleType=%d for format %s\n", cfgs[i].iPixelFormat, MultiSampleType, debug_d3dformat(SurfaceFormat));
@@ -2748,8 +3112,6 @@ static HRESULT WINAPI IWineD3DImpl_CheckDeviceType(IWineD3D *iface, UINT Adapter
static BOOL CheckBumpMapCapability(struct wined3d_adapter *adapter,
WINED3DDEVTYPE DeviceType, const struct GlPixelFormatDesc *format_desc)
{
- const struct fragment_pipeline *fp;
-
switch(format_desc->format)
{
case WINED3DFMT_R8G8_SNORM:
@@ -2760,8 +3122,7 @@ static BOOL CheckBumpMapCapability(struct wined3d_adapter *adapter,
/* Ask the fixed function pipeline implementation if it can deal
* with the conversion. If we've got a GL extension giving native
* support this will be an identity conversion. */
- fp = select_fragment_implementation(adapter, DeviceType);
- if (fp->color_fixup_supported(format_desc->color_fixup))
+ if (adapter->fragment_pipe->color_fixup_supported(format_desc->color_fixup))
{
TRACE_(d3d_caps)("[OK]\n");
return TRUE;
@@ -2951,8 +3312,6 @@ static BOOL CheckTextureCapability(struct wined3d_adapter *adapter,
WINED3DDEVTYPE DeviceType, const struct GlPixelFormatDesc *format_desc)
{
const struct wined3d_gl_info *gl_info = &adapter->gl_info;
- const shader_backend_t *shader_backend;
- const struct fragment_pipeline *fp;
switch (format_desc->format)
{
@@ -3030,8 +3389,7 @@ static BOOL CheckTextureCapability(struct wined3d_adapter *adapter,
/* Ask the shader backend if it can deal with the conversion. If
* we've got a GL extension giving native support this will be an
* identity conversion. */
- shader_backend = select_shader_backend(adapter, DeviceType);
- if (shader_backend->shader_color_fixup_supported(format_desc->color_fixup))
+ if (adapter->shader_backend->shader_color_fixup_supported(format_desc->color_fixup))
{
TRACE_(d3d_caps)("[OK]\n");
return TRUE;
@@ -3147,10 +3505,8 @@ static BOOL CheckTextureCapability(struct wined3d_adapter *adapter,
if (gl_info->supported[ATI_TEXTURE_COMPRESSION_3DC]
|| gl_info->supported[EXT_TEXTURE_COMPRESSION_RGTC])
{
- shader_backend = select_shader_backend(adapter, DeviceType);
- fp = select_fragment_implementation(adapter, DeviceType);
- if (shader_backend->shader_color_fixup_supported(format_desc->color_fixup)
- && fp->color_fixup_supported(format_desc->color_fixup))
+ if (adapter->shader_backend->shader_color_fixup_supported(format_desc->color_fixup)
+ && adapter->fragment_pipe->color_fixup_supported(format_desc->color_fixup))
{
TRACE_(d3d_caps)("[OK]\n");
return TRUE;
@@ -3186,8 +3542,6 @@ static BOOL CheckTextureCapability(struct wined3d_adapter *adapter,
static BOOL CheckSurfaceCapability(struct wined3d_adapter *adapter, const struct GlPixelFormatDesc *adapter_format_desc,
WINED3DDEVTYPE DeviceType, const struct GlPixelFormatDesc *check_format_desc, WINED3DSURFTYPE SurfaceType)
{
- const struct blit_shader *blitter;
-
if(SurfaceType == SURFACE_GDI) {
switch(check_format_desc->format)
{
@@ -3223,8 +3577,7 @@ static BOOL CheckSurfaceCapability(struct wined3d_adapter *adapter, const struct
if (CheckDepthStencilCapability(adapter, adapter_format_desc, check_format_desc)) return TRUE;
/* If opengl can't process the format natively, the blitter may be able to convert it */
- blitter = select_blit_implementation(adapter, DeviceType);
- if (blitter->color_fixup_supported(check_format_desc->color_fixup))
+ if (adapter->blitter->color_fixup_supported(check_format_desc->color_fixup))
{
TRACE_(d3d_caps)("[OK]\n");
return TRUE;
@@ -3789,8 +4142,6 @@ static HRESULT WINAPI IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter,
int ps_selected_mode;
struct shader_caps shader_caps;
struct fragment_caps fragment_caps;
- const shader_backend_t *shader_backend;
- const struct fragment_pipeline *frag_pipeline = NULL;
DWORD ckey_caps, blit_caps, fx_caps;
TRACE_(d3d_caps)("(%p)->(Adptr:%d, DevType: %x, pCaps: %p)\n", This, Adapter, DeviceType, pCaps);
@@ -4167,12 +4518,10 @@ static HRESULT WINAPI IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter,
pCaps->VertexTextureFilterCaps = 0;
memset(&shader_caps, 0, sizeof(shader_caps));
- shader_backend = select_shader_backend(adapter, DeviceType);
- shader_backend->shader_get_caps(DeviceType, &adapter->gl_info, &shader_caps);
+ adapter->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps);
memset(&fragment_caps, 0, sizeof(fragment_caps));
- frag_pipeline = select_fragment_implementation(adapter, DeviceType);
- frag_pipeline->get_caps(DeviceType, &adapter->gl_info, &fragment_caps);
+ adapter->fragment_pipe->get_caps(&adapter->gl_info, &fragment_caps);
/* Add shader misc caps. Only some of them belong to the shader parts of the pipeline */
pCaps->PrimitiveMiscCaps |= fragment_caps.PrimitiveMiscCaps;
@@ -4697,7 +5046,7 @@ BOOL InitAdapters(IWineD3DImpl *This)
goto nogl_adapter;
}
- ret = IWineD3DImpl_FillGLCaps(&adapter->driver_info, &adapter->gl_info);
+ ret = IWineD3DImpl_FillGLCaps(adapter);
if(!ret) {
ERR("Failed to initialize gl caps for default adapter\n");
WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
@@ -4729,8 +5078,8 @@ BOOL InitAdapters(IWineD3DImpl *This)
if (gl_info->supported[WGL_ARB_PIXEL_FORMAT])
{
int attribute;
- int attribs[10];
- int values[10];
+ int attribs[11];
+ int values[11];
int nAttribs = 0;
attribute = WGL_NUMBER_PIXEL_FORMATS_ARB;
@@ -4742,6 +5091,7 @@ BOOL InitAdapters(IWineD3DImpl *This)
attribs[nAttribs++] = WGL_GREEN_BITS_ARB;
attribs[nAttribs++] = WGL_BLUE_BITS_ARB;
attribs[nAttribs++] = WGL_ALPHA_BITS_ARB;
+ attribs[nAttribs++] = WGL_COLOR_BITS_ARB;
attribs[nAttribs++] = WGL_DEPTH_BITS_ARB;
attribs[nAttribs++] = WGL_STENCIL_BITS_ARB;
attribs[nAttribs++] = WGL_DRAW_TO_WINDOW_ARB;
@@ -4762,12 +5112,13 @@ BOOL InitAdapters(IWineD3DImpl *This)
cfgs->greenSize = values[1];
cfgs->blueSize = values[2];
cfgs->alphaSize = values[3];
- cfgs->depthSize = values[4];
- cfgs->stencilSize = values[5];
- cfgs->windowDrawable = values[6];
- cfgs->iPixelType = values[7];
- cfgs->doubleBuffer = values[8];
- cfgs->auxBuffers = values[9];
+ cfgs->colorSize = values[4];
+ cfgs->depthSize = values[5];
+ cfgs->stencilSize = values[6];
+ cfgs->windowDrawable = values[7];
+ cfgs->iPixelType = values[8];
+ cfgs->doubleBuffer = values[9];
+ cfgs->auxBuffers = values[10];
cfgs->pbufferDrawable = FALSE;
/* Check for pbuffer support when it is around as
@@ -4794,7 +5145,7 @@ BOOL InitAdapters(IWineD3DImpl *This)
}
}
- TRACE("iPixelFormat=%d, iPixelType=%#x, doubleBuffer=%d, RGBA=%d/%d/%d/%d, depth=%d, stencil=%d, windowDrawable=%d, pbufferDrawable=%d\n", cfgs->iPixelFormat, cfgs->iPixelType, cfgs->doubleBuffer, cfgs->redSize, cfgs->greenSize, cfgs->blueSize, cfgs->alphaSize, cfgs->depthSize, cfgs->stencilSize, cfgs->windowDrawable, cfgs->pbufferDrawable);
+ TRACE("iPixelFormat=%d, iPixelType=%#x, doubleBuffer=%d, RGBA=%d/%d/%d/%d, depth=%d, stencil=%d, samples=%d, windowDrawable=%d, pbufferDrawable=%d\n", cfgs->iPixelFormat, cfgs->iPixelType, cfgs->doubleBuffer, cfgs->redSize, cfgs->greenSize, cfgs->blueSize, cfgs->alphaSize, cfgs->depthSize, cfgs->stencilSize, cfgs->numSamples, cfgs->windowDrawable, cfgs->pbufferDrawable);
cfgs++;
}
}
@@ -4828,6 +5179,7 @@ BOOL InitAdapters(IWineD3DImpl *This)
cfgs->greenSize = ppfd.cGreenBits;
cfgs->blueSize = ppfd.cBlueBits;
cfgs->alphaSize = ppfd.cAlphaBits;
+ cfgs->colorSize = ppfd.cColorBits;
cfgs->depthSize = ppfd.cDepthBits;
cfgs->stencilSize = ppfd.cStencilBits;
cfgs->pbufferDrawable = 0;
diff --git a/reactos/dll/directx/wine/wined3d/drawprim.c b/reactos/dll/directx/wine/wined3d/drawprim.c
index dbeb7993f9f..b29d012b9d1 100644
--- a/reactos/dll/directx/wine/wined3d/drawprim.c
+++ b/reactos/dll/directx/wine/wined3d/drawprim.c
@@ -334,7 +334,7 @@ static inline void send_attribute(IWineD3DDeviceImpl *This, WINED3DFORMAT format
GL_EXTCALL(glVertexAttrib4ubvARB(index, ptr));
break;
case WINED3DFMT_B8G8R8A8_UNORM:
- if (gl_info->supported[EXT_VERTEX_ARRAY_BGRA])
+ if (gl_info->supported[ARB_VERTEX_ARRAY_BGRA])
{
const DWORD *src = ptr;
DWORD c = *src & 0xff00ff00;
@@ -690,6 +690,9 @@ void drawPrimitive(IWineD3DDevice *iface, UINT index_count, UINT StartIdx, UINT
/* Finished updating the screen, restore lock */
LEAVE_GL();
+
+ wglFlush(); /* Flush to ensure ordering across contexts. */
+
context_release(context);
TRACE("Done all gl drawing\n");
@@ -1100,7 +1103,7 @@ HRESULT tesselate_rectpatch(IWineD3DDeviceImpl *This,
if(patch->has_texcoords) {
vtxStride += 4 * sizeof(float);
}
- memset(&patch->strided, 0, sizeof(&patch->strided));
+ memset(&patch->strided, 0, sizeof(patch->strided));
patch->strided.position.format = WINED3DFMT_R32G32B32_FLOAT;
patch->strided.position.lpData = (BYTE *) patch->mem;
patch->strided.position.dwStride = vtxStride;
diff --git a/reactos/dll/directx/wine/wined3d/glsl_shader.c b/reactos/dll/directx/wine/wined3d/glsl_shader.c
index 90b5092d38f..cb23ee6aa0e 100644
--- a/reactos/dll/directx/wine/wined3d/glsl_shader.c
+++ b/reactos/dll/directx/wine/wined3d/glsl_shader.c
@@ -156,6 +156,20 @@ struct glsl_vshader_private
UINT num_gl_shaders, shader_array_size;
};
+static const char *debug_gl_shader_type(GLenum type)
+{
+ switch (type)
+ {
+#define WINED3D_TO_STR(u) case u: return #u
+ WINED3D_TO_STR(GL_VERTEX_SHADER_ARB);
+ WINED3D_TO_STR(GL_GEOMETRY_SHADER_ARB);
+ WINED3D_TO_STR(GL_FRAGMENT_SHADER_ARB);
+#undef WINED3D_TO_STR
+ default:
+ return wine_dbg_sprintf("UNKNOWN(%#x)", type);
+ }
+}
+
/* Extract a line from the info log.
* Note that this modifies the source string. */
static char *get_info_log_line(char **ptr)
@@ -238,6 +252,81 @@ static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleA
}
}
+/* GL locking is done by the caller. */
+static void shader_glsl_dump_program_source(const struct wined3d_gl_info *gl_info, GLhandleARB program)
+{
+ GLint i, object_count, source_size;
+ GLhandleARB *objects;
+ char *source = NULL;
+
+ GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_ATTACHED_OBJECTS_ARB, &object_count));
+ objects = HeapAlloc(GetProcessHeap(), 0, object_count * sizeof(*objects));
+ if (!objects)
+ {
+ ERR("Failed to allocate object array memory.\n");
+ return;
+ }
+
+ GL_EXTCALL(glGetAttachedObjectsARB(program, object_count, NULL, objects));
+ for (i = 0; i < object_count; ++i)
+ {
+ char *ptr, *line;
+ GLint tmp;
+
+ GL_EXTCALL(glGetObjectParameterivARB(objects[i], GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &tmp));
+
+ if (!source || source_size < tmp)
+ {
+ HeapFree(GetProcessHeap(), 0, source);
+
+ source = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, tmp);
+ if (!source)
+ {
+ ERR("Failed to allocate %d bytes for shader source.\n", tmp);
+ HeapFree(GetProcessHeap(), 0, objects);
+ return;
+ }
+ source_size = tmp;
+ }
+
+ FIXME("Object %u:\n", objects[i]);
+ GL_EXTCALL(glGetObjectParameterivARB(objects[i], GL_OBJECT_SUBTYPE_ARB, &tmp));
+ FIXME(" GL_OBJECT_SUBTYPE_ARB: %s.\n", debug_gl_shader_type(tmp));
+ GL_EXTCALL(glGetObjectParameterivARB(objects[i], GL_OBJECT_COMPILE_STATUS_ARB, &tmp));
+ FIXME(" GL_OBJECT_COMPILE_STATUS_ARB: %d.\n", tmp);
+ FIXME("\n");
+
+ ptr = source;
+ GL_EXTCALL(glGetShaderSourceARB(objects[i], source_size, NULL, source));
+ while ((line = get_info_log_line(&ptr))) FIXME(" %s\n", line);
+ FIXME("\n");
+ }
+
+ HeapFree(GetProcessHeap(), 0, source);
+ HeapFree(GetProcessHeap(), 0, objects);
+}
+
+/* GL locking is done by the caller. */
+static void shader_glsl_validate_link(const struct wined3d_gl_info *gl_info, GLhandleARB program)
+{
+ GLint tmp;
+
+ if (!TRACE_ON(d3d_shader) && !FIXME_ON(d3d_shader)) return;
+
+ GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_TYPE_ARB, &tmp));
+ if (tmp == GL_PROGRAM_OBJECT_ARB)
+ {
+ GL_EXTCALL(glGetObjectParameterivARB(program, GL_OBJECT_LINK_STATUS_ARB, &tmp));
+ if (!tmp)
+ {
+ FIXME("Program %u link status invalid.\n", program);
+ shader_glsl_dump_program_source(gl_info, program);
+ }
+ }
+
+ print_glsl_info_log(gl_info, program);
+}
+
/**
* Loads (pixel shader) samplers
*/
@@ -1083,6 +1172,8 @@ static void shader_generate_glsl_declarations(const struct wined3d_context *cont
}
}
+ shader_addline(buffer, "const float FLT_MAX = 1e38;\n");
+
/* Start the main program */
shader_addline(buffer, "void main() {\n");
if(pshader && reg_maps->vpos) {
@@ -1194,8 +1285,7 @@ static void shader_glsl_get_register_name(const struct wined3d_shader_register *
static const char * const hwrastout_reg_names[] = { "gl_Position", "gl_FogFragCoord", "gl_PointSize" };
IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
- const struct wined3d_gl_info *gl_info = &deviceImpl->adapter->gl_info;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
char pshader = shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type);
*is_color = FALSE;
@@ -1552,7 +1642,8 @@ static inline const char *shader_get_comp_op(DWORD op)
}
}
-static void shader_glsl_get_sample_function(DWORD sampler_type, DWORD flags, glsl_sample_function_t *sample_function)
+static void shader_glsl_get_sample_function(const struct wined3d_gl_info *gl_info,
+ DWORD sampler_type, DWORD flags, glsl_sample_function_t *sample_function)
{
BOOL projected = flags & WINED3D_GLSL_SAMPLE_PROJECTED;
BOOL texrect = flags & WINED3D_GLSL_SAMPLE_RECT;
@@ -1564,9 +1655,21 @@ static void shader_glsl_get_sample_function(DWORD sampler_type, DWORD flags, gls
case WINED3DSTT_1D:
if(lod) {
sample_function->name = projected ? "texture1DProjLod" : "texture1DLod";
- } else if(grad) {
- sample_function->name = projected ? "texture1DProjGradARB" : "texture1DGradARB";
- } else {
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = projected ? "texture1DProjGrad" : "texture1DGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = projected ? "texture1DProjGradARB" : "texture1DGradARB";
+ else
+ {
+ FIXME("Unsupported 1D grad function.\n");
+ sample_function->name = "unsupported1DGrad";
+ }
+ }
+ else
+ {
sample_function->name = projected ? "texture1DProj" : "texture1D";
}
sample_function->coord_mask = WINED3DSP_WRITEMASK_0;
@@ -1575,20 +1678,41 @@ static void shader_glsl_get_sample_function(DWORD sampler_type, DWORD flags, gls
if(texrect) {
if(lod) {
sample_function->name = projected ? "texture2DRectProjLod" : "texture2DRectLod";
- } else if(grad) {
- /* What good are texrect grad functions? I don't know, but GL_EXT_gpu_shader4 defines them.
- * There is no GL_ARB_shader_texture_lod spec yet, so I don't know if they're defined there
- */
- sample_function->name = projected ? "shadow2DRectProjGradARB" : "shadow2DRectGradARB";
- } else {
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = projected ? "texture2DRectProjGrad" : "texture2DRectGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = projected ? "texture2DRectProjGradARB" : "texture2DRectGradARB";
+ else
+ {
+ FIXME("Unsupported RECT grad function.\n");
+ sample_function->name = "unsupported2DRectGrad";
+ }
+ }
+ else
+ {
sample_function->name = projected ? "texture2DRectProj" : "texture2DRect";
}
} else {
if(lod) {
sample_function->name = projected ? "texture2DProjLod" : "texture2DLod";
- } else if(grad) {
- sample_function->name = projected ? "texture2DProjGradARB" : "texture2DGradARB";
- } else {
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = projected ? "texture2DProjGrad" : "texture2DGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = projected ? "texture2DProjGradARB" : "texture2DGradARB";
+ else
+ {
+ FIXME("Unsupported 2D grad function.\n");
+ sample_function->name = "unsupported2DGrad";
+ }
+ }
+ else
+ {
sample_function->name = projected ? "texture2DProj" : "texture2D";
}
}
@@ -1597,9 +1721,21 @@ static void shader_glsl_get_sample_function(DWORD sampler_type, DWORD flags, gls
case WINED3DSTT_CUBE:
if(lod) {
sample_function->name = "textureCubeLod";
- } else if(grad) {
- sample_function->name = "textureCubeGradARB";
- } else {
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = "textureCubeGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = "textureCubeGradARB";
+ else
+ {
+ FIXME("Unsupported Cube grad function.\n");
+ sample_function->name = "unsupportedCubeGrad";
+ }
+ }
+ else
+ {
sample_function->name = "textureCube";
}
sample_function->coord_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
@@ -1607,9 +1743,21 @@ static void shader_glsl_get_sample_function(DWORD sampler_type, DWORD flags, gls
case WINED3DSTT_VOLUME:
if(lod) {
sample_function->name = projected ? "texture3DProjLod" : "texture3DLod";
- } else if(grad) {
- sample_function->name = projected ? "texture3DProjGradARB" : "texture3DGradARB";
- } else {
+ }
+ else if (grad)
+ {
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ sample_function->name = projected ? "texture3DProjGrad" : "texture3DGrad";
+ else if (gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ sample_function->name = projected ? "texture3DProjGradARB" : "texture3DGradARB";
+ else
+ {
+ FIXME("Unsupported 3D grad function.\n");
+ sample_function->name = "unsupported3DGrad";
+ }
+ }
+ else
+ {
sample_function->name = projected ? "texture3DProj" : "texture3D";
}
sample_function->coord_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
@@ -1681,10 +1829,10 @@ static void shader_glsl_color_correction(const struct wined3d_shader_instruction
if (!mask) return; /* Nothing to do */
- if (is_yuv_fixup(fixup))
+ if (is_complex_fixup(fixup))
{
- enum yuv_fixup yuv_fixup = get_yuv_fixup(fixup);
- FIXME("YUV fixup (%#x) not supported\n", yuv_fixup);
+ enum complex_fixup complex_fixup = get_complex_fixup(fixup);
+ FIXME("Complex fixup (%#x) not supported\n",complex_fixup);
return;
}
@@ -1822,6 +1970,7 @@ static void shader_glsl_arith(const struct wined3d_shader_instruction *ins)
/* Process the WINED3DSIO_MOV opcode using GLSL (dst = src) */
static void shader_glsl_mov(const struct wined3d_shader_instruction *ins)
{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
glsl_src_param_t src0_param;
DWORD write_mask;
@@ -1847,12 +1996,26 @@ static void shader_glsl_mov(const struct wined3d_shader_instruction *ins)
{
/* We need to *round* to the nearest int here. */
unsigned int mask_size = shader_glsl_get_write_mask_size(write_mask);
- if (mask_size > 1) {
- shader_addline(buffer, "ivec%d(floor(abs(%s) + vec%d(0.5)) * sign(%s)));\n", mask_size, src0_param.param_str, mask_size, src0_param.param_str);
- } else {
- shader_addline(buffer, "int(floor(abs(%s) + 0.5) * sign(%s)));\n", src0_param.param_str, src0_param.param_str);
+
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ {
+ if (mask_size > 1)
+ shader_addline(buffer, "ivec%d(round(%s)));\n", mask_size, src0_param.param_str);
+ else
+ shader_addline(buffer, "int(round(%s)));\n", src0_param.param_str);
}
- } else {
+ else
+ {
+ if (mask_size > 1)
+ shader_addline(buffer, "ivec%d(floor(abs(%s) + vec%d(0.5)) * sign(%s)));\n",
+ mask_size, src0_param.param_str, mask_size, src0_param.param_str);
+ else
+ shader_addline(buffer, "int(floor(abs(%s) + 0.5) * sign(%s)));\n",
+ src0_param.param_str, src0_param.param_str);
+ }
+ }
+ else
+ {
shader_addline(buffer, "%s);\n", src0_param.param_str);
}
}
@@ -1942,10 +2105,15 @@ static void shader_glsl_log(const struct wined3d_shader_instruction *ins)
shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_0, &src0_param);
- if (dst_size > 1) {
- shader_addline(buffer, "vec%d(log2(abs(%s))));\n", dst_size, src0_param.param_str);
- } else {
- shader_addline(buffer, "log2(abs(%s)));\n", src0_param.param_str);
+ if (dst_size > 1)
+ {
+ shader_addline(buffer, "vec%d(%s == 0.0 ? -FLT_MAX : log2(abs(%s))));\n",
+ dst_size, src0_param.param_str, src0_param.param_str);
+ }
+ else
+ {
+ shader_addline(buffer, "%s == 0.0 ? -FLT_MAX : log2(abs(%s)));\n",
+ src0_param.param_str, src0_param.param_str);
}
}
@@ -1966,7 +2134,6 @@ static void shader_glsl_map2gl(const struct wined3d_shader_instruction *ins)
case WINED3DSIH_MAX: instruction = "max"; break;
case WINED3DSIH_ABS: instruction = "abs"; break;
case WINED3DSIH_FRC: instruction = "fract"; break;
- case WINED3DSIH_NRM: instruction = "normalize"; break;
case WINED3DSIH_EXP: instruction = "exp2"; break;
case WINED3DSIH_DSX: instruction = "dFdx"; break;
case WINED3DSIH_DSY: instruction = "ycorrection.y * dFdy"; break;
@@ -1993,6 +2160,22 @@ static void shader_glsl_map2gl(const struct wined3d_shader_instruction *ins)
shader_addline(buffer, "));\n");
}
+static void shader_glsl_nrm(const struct wined3d_shader_instruction *ins)
+{
+ struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
+ glsl_src_param_t src_param;
+ DWORD write_mask;
+ char dst_mask[6];
+
+ write_mask = shader_glsl_get_write_mask(ins->dst, dst_mask);
+ shader_glsl_add_src_param(ins, &ins->src[0], write_mask, &src_param);
+
+ shader_addline(buffer, "tmp0.x = length(%s);\n", src_param.param_str);
+ shader_glsl_append_dst(buffer, ins);
+ shader_addline(buffer, "tmp0.x == 0.0 ? (%s * FLT_MAX) : (%s / tmp0.x));",
+ src_param.param_str, src_param.param_str);
+}
+
/** Process the WINED3DSIO_EXPP instruction in GLSL:
* For shader model 1.x, do the following (and honor the writemask, so use a temporary variable):
* dst.x = 2^(floor(src))
@@ -2046,10 +2229,15 @@ static void shader_glsl_rcp(const struct wined3d_shader_instruction *ins)
mask_size = shader_glsl_get_write_mask_size(write_mask);
shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &src_param);
- if (mask_size > 1) {
- shader_addline(ins->ctx->buffer, "vec%d(1.0 / %s));\n", mask_size, src_param.param_str);
- } else {
- shader_addline(ins->ctx->buffer, "1.0 / %s);\n", src_param.param_str);
+ if (mask_size > 1)
+ {
+ shader_addline(ins->ctx->buffer, "vec%d(%s == 0.0 ? FLT_MAX : 1.0 / %s));\n",
+ mask_size, src_param.param_str, src_param.param_str);
+ }
+ else
+ {
+ shader_addline(ins->ctx->buffer, "%s == 0.0 ? FLT_MAX : 1.0 / %s);\n",
+ src_param.param_str, src_param.param_str);
}
}
@@ -2065,10 +2253,15 @@ static void shader_glsl_rsq(const struct wined3d_shader_instruction *ins)
shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &src_param);
- if (mask_size > 1) {
- shader_addline(buffer, "vec%d(inversesqrt(%s)));\n", mask_size, src_param.param_str);
- } else {
- shader_addline(buffer, "inversesqrt(%s));\n", src_param.param_str);
+ if (mask_size > 1)
+ {
+ shader_addline(buffer, "vec%d(%s == 0.0 ? FLT_MAX : inversesqrt(abs(%s))));\n",
+ mask_size, src_param.param_str, src_param.param_str);
+ }
+ else
+ {
+ shader_addline(buffer, "%s == 0.0 ? FLT_MAX : inversesqrt(abs(%s)));\n",
+ src_param.param_str, src_param.param_str);
}
}
@@ -2671,10 +2864,11 @@ static void shader_glsl_ret(const struct wined3d_shader_instruction *ins)
********************************************/
static void shader_glsl_tex(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
DWORD shader_version = WINED3D_SHADER_VERSION(ins->ctx->reg_maps->shader_version.major,
ins->ctx->reg_maps->shader_version.minor);
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_sample_function_t sample_function;
DWORD sample_flags = 0;
WINED3DSAMPLER_TEXTURE_TYPE sampler_type;
@@ -2728,7 +2922,7 @@ static void shader_glsl_tex(const struct wined3d_shader_instruction *ins)
sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
}
- shader_glsl_get_sample_function(sampler_type, sample_flags, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
mask |= sample_function.coord_mask;
if (shader_version < WINED3D_SHADER_VERSION(2,0)) swizzle = WINED3DSP_NOSWIZZLE;
@@ -2762,7 +2956,7 @@ static void shader_glsl_texldd(const struct wined3d_shader_instruction *ins)
{
IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
- const struct wined3d_gl_info *gl_info = &deviceImpl->adapter->gl_info;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_sample_function_t sample_function;
glsl_src_param_t coord_param, dx_param, dy_param;
DWORD sample_flags = WINED3D_GLSL_SAMPLE_GRAD;
@@ -2770,7 +2964,7 @@ static void shader_glsl_texldd(const struct wined3d_shader_instruction *ins)
DWORD sampler_idx;
DWORD swizzle = ins->src[1].swizzle;
- if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD])
+ if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD] && !gl_info->supported[EXT_GPU_SHADER4])
{
FIXME("texldd used, but not supported by hardware. Falling back to regular tex\n");
return shader_glsl_tex(ins);
@@ -2783,7 +2977,7 @@ static void shader_glsl_texldd(const struct wined3d_shader_instruction *ins)
sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
}
- shader_glsl_get_sample_function(sampler_type, sample_flags, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &coord_param);
shader_glsl_add_src_param(ins, &ins->src[2], sample_function.coord_mask, &dx_param);
shader_glsl_add_src_param(ins, &ins->src[3], sample_function.coord_mask, &dy_param);
@@ -2796,7 +2990,7 @@ static void shader_glsl_texldl(const struct wined3d_shader_instruction *ins)
{
IWineD3DBaseShaderImpl *This = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
- const struct wined3d_gl_info *gl_info = &deviceImpl->adapter->gl_info;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_sample_function_t sample_function;
glsl_src_param_t coord_param, lod_param;
DWORD sample_flags = WINED3D_GLSL_SAMPLE_LOD;
@@ -2810,12 +3004,12 @@ static void shader_glsl_texldl(const struct wined3d_shader_instruction *ins)
IWineD3DBaseTexture_GetTextureDimensions(deviceImpl->stateBlock->textures[sampler_idx]) == GL_TEXTURE_RECTANGLE_ARB) {
sample_flags |= WINED3D_GLSL_SAMPLE_RECT;
}
- shader_glsl_get_sample_function(sampler_type, sample_flags, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, sample_flags, &sample_function);
shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &coord_param);
shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_3, &lod_param);
- if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD]
+ if (!gl_info->supported[ARB_SHADER_TEXTURE_LOD] && !gl_info->supported[EXT_GPU_SHADER4]
&& shader_is_pshader_version(ins->ctx->reg_maps->shader_version.type))
{
/* The GLSL spec claims the Lod sampling functions are only supported in vertex shaders.
@@ -2877,6 +3071,7 @@ static void shader_glsl_texcoord(const struct wined3d_shader_instruction *ins)
* then perform a 1D texture lookup from stage dstregnum, place into dst. */
static void shader_glsl_texdp3tex(const struct wined3d_shader_instruction *ins)
{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_src_param_t src0_param;
glsl_sample_function_t sample_function;
DWORD sampler_idx = ins->dst[0].reg.idx;
@@ -2891,7 +3086,7 @@ static void shader_glsl_texdp3tex(const struct wined3d_shader_instruction *ins)
*
* It is a dependent read - not valid with conditional NP2 textures
*/
- shader_glsl_get_sample_function(sampler_type, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
mask_size = shader_glsl_get_write_mask_size(sample_function.coord_mask);
switch(mask_size)
@@ -2990,7 +3185,7 @@ static void shader_glsl_texm3x2pad(const struct wined3d_shader_instruction *ins)
* Calculate the 1st or 2nd row of a 3-row matrix multiplication. */
static void shader_glsl_texm3x3pad(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *shader = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
DWORD reg = ins->dst[0].reg.idx;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
@@ -3004,6 +3199,7 @@ static void shader_glsl_texm3x3pad(const struct wined3d_shader_instruction *ins)
static void shader_glsl_texm3x2tex(const struct wined3d_shader_instruction *ins)
{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
DWORD reg = ins->dst[0].reg.idx;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
@@ -3014,7 +3210,7 @@ static void shader_glsl_texm3x2tex(const struct wined3d_shader_instruction *ins)
shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
shader_addline(buffer, "tmp0.y = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
- shader_glsl_get_sample_function(sampler_type, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
/* Sample the texture using the calculated coordinates */
shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xy");
@@ -3025,10 +3221,11 @@ static void shader_glsl_texm3x2tex(const struct wined3d_shader_instruction *ins)
static void shader_glsl_texm3x3tex(const struct wined3d_shader_instruction *ins)
{
DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_src_param_t src0_param;
DWORD reg = ins->dst[0].reg.idx;
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- SHADER_PARSE_STATE* current_state = &This->baseShader.parse_state;
WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[reg];
glsl_sample_function_t sample_function;
@@ -3036,7 +3233,7 @@ static void shader_glsl_texm3x3tex(const struct wined3d_shader_instruction *ins)
shader_addline(ins->ctx->buffer, "tmp0.z = dot(T%u.xyz, %s);\n", reg, src0_param.param_str);
/* Dependent read, not valid with conditional NP2 */
- shader_glsl_get_sample_function(sampler_type, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
/* Sample the texture using the calculated coordinates */
shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
@@ -3049,11 +3246,11 @@ static void shader_glsl_texm3x3tex(const struct wined3d_shader_instruction *ins)
static void shader_glsl_texm3x3(const struct wined3d_shader_instruction *ins)
{
DWORD src_mask = WINED3DSP_WRITEMASK_0 | WINED3DSP_WRITEMASK_1 | WINED3DSP_WRITEMASK_2;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ SHADER_PARSE_STATE *current_state = &shader->baseShader.parse_state;
glsl_src_param_t src0_param;
char dst_mask[6];
DWORD reg = ins->dst[0].reg.idx;
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- SHADER_PARSE_STATE* current_state = &This->baseShader.parse_state;
shader_glsl_add_src_param(ins, &ins->src[0], src_mask, &src0_param);
@@ -3068,7 +3265,8 @@ static void shader_glsl_texm3x3(const struct wined3d_shader_instruction *ins)
* Perform the final texture lookup based on the previous 2 3x3 matrix multiplies */
static void shader_glsl_texm3x3spec(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *shader = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
DWORD reg = ins->dst[0].reg.idx;
glsl_src_param_t src0_param;
glsl_src_param_t src1_param;
@@ -3087,7 +3285,7 @@ static void shader_glsl_texm3x3spec(const struct wined3d_shader_instruction *ins
shader_addline(buffer, "tmp0.xyz = -reflect((%s), normalize(tmp0.xyz));\n", src1_param.param_str);
/* Dependent read, not valid with conditional NP2 */
- shader_glsl_get_sample_function(stype, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, stype, 0, &sample_function);
/* Sample the texture */
shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
@@ -3099,7 +3297,8 @@ static void shader_glsl_texm3x3spec(const struct wined3d_shader_instruction *ins
* Perform the final texture lookup based on the previous 2 3x3 matrix multiplies */
static void shader_glsl_texm3x3vspec(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *shader = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
DWORD reg = ins->dst[0].reg.idx;
struct wined3d_shader_buffer *buffer = ins->ctx->buffer;
SHADER_PARSE_STATE* current_state = &shader->baseShader.parse_state;
@@ -3119,7 +3318,7 @@ static void shader_glsl_texm3x3vspec(const struct wined3d_shader_instruction *in
shader_addline(buffer, "tmp0.xyz = -reflect(tmp1.xyz, normalize(tmp0.xyz));\n");
/* Dependent read, not valid with conditional NP2 */
- shader_glsl_get_sample_function(sampler_type, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
/* Sample the texture using the calculated coordinates */
shader_glsl_gen_sample_code(ins, reg, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL, "tmp0.xyz");
@@ -3133,8 +3332,9 @@ static void shader_glsl_texm3x3vspec(const struct wined3d_shader_instruction *in
*/
static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins)
{
- IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *)ins->ctx->shader;
- IWineD3DDeviceImpl* deviceImpl = (IWineD3DDeviceImpl*) This->baseShader.device;
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)ins->ctx->shader;
+ IWineD3DDeviceImpl *deviceImpl = (IWineD3DDeviceImpl *)shader->baseShader.device;
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_sample_function_t sample_function;
glsl_src_param_t coord_param;
WINED3DSAMPLER_TEXTURE_TYPE sampler_type;
@@ -3148,7 +3348,7 @@ static void shader_glsl_texbem(const struct wined3d_shader_instruction *ins)
sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
/* Dependent read, not valid with conditional NP2 */
- shader_glsl_get_sample_function(sampler_type, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
mask = sample_function.coord_mask;
shader_glsl_write_mask_to_str(mask, coord_mask);
@@ -3207,6 +3407,7 @@ static void shader_glsl_bem(const struct wined3d_shader_instruction *ins)
* Sample 2D texture at dst using the alpha & red (wx) components of src as texture coordinates */
static void shader_glsl_texreg2ar(const struct wined3d_shader_instruction *ins)
{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_src_param_t src0_param;
DWORD sampler_idx = ins->dst[0].reg.idx;
WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
@@ -3214,7 +3415,7 @@ static void shader_glsl_texreg2ar(const struct wined3d_shader_instruction *ins)
shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param);
- shader_glsl_get_sample_function(sampler_type, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
"%s.wx", src0_param.reg_name);
}
@@ -3223,6 +3424,7 @@ static void shader_glsl_texreg2ar(const struct wined3d_shader_instruction *ins)
* Sample 2D texture at dst using the green & blue (yz) components of src as texture coordinates */
static void shader_glsl_texreg2gb(const struct wined3d_shader_instruction *ins)
{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_src_param_t src0_param;
DWORD sampler_idx = ins->dst[0].reg.idx;
WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
@@ -3230,7 +3432,7 @@ static void shader_glsl_texreg2gb(const struct wined3d_shader_instruction *ins)
shader_glsl_add_src_param(ins, &ins->src[0], WINED3DSP_WRITEMASK_ALL, &src0_param);
- shader_glsl_get_sample_function(sampler_type, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
"%s.yz", src0_param.reg_name);
}
@@ -3239,13 +3441,14 @@ static void shader_glsl_texreg2gb(const struct wined3d_shader_instruction *ins)
* Sample texture at dst using the rgb (xyz) components of src as texture coordinates */
static void shader_glsl_texreg2rgb(const struct wined3d_shader_instruction *ins)
{
+ const struct wined3d_gl_info *gl_info = ins->ctx->gl_info;
glsl_src_param_t src0_param;
DWORD sampler_idx = ins->dst[0].reg.idx;
WINED3DSAMPLER_TEXTURE_TYPE sampler_type = ins->ctx->reg_maps->sampler_type[sampler_idx];
glsl_sample_function_t sample_function;
/* Dependent read, not valid with conditional NP2 */
- shader_glsl_get_sample_function(sampler_type, 0, &sample_function);
+ shader_glsl_get_sample_function(gl_info, sampler_type, 0, &sample_function);
shader_glsl_add_src_param(ins, &ins->src[0], sample_function.coord_mask, &src0_param);
shader_glsl_gen_sample_code(ins, sampler_idx, &sample_function, WINED3DSP_NOSWIZZLE, NULL, NULL, NULL,
@@ -3759,6 +3962,10 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
*/
shader_addline(buffer, "#extension GL_ARB_texture_rectangle : enable\n");
}
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ {
+ shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n");
+ }
/* Base Declarations */
shader_generate_glsl_declarations(context, buffer, (IWineD3DBaseShader *)This, reg_maps, &priv_ctx);
@@ -3846,6 +4053,11 @@ static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context
shader_addline(buffer, "#version 120\n");
+ if (gl_info->supported[EXT_GPU_SHADER4])
+ {
+ shader_addline(buffer, "#extension GL_EXT_gpu_shader4 : enable\n");
+ }
+
memset(&priv_ctx, 0, sizeof(priv_ctx));
priv_ctx.cur_vs_args = args;
@@ -4149,7 +4361,7 @@ static void set_glsl_shader_program(const struct wined3d_context *context,
/* Link the program */
TRACE("Linking GLSL shader program %u\n", programId);
GL_EXTCALL(glLinkProgramARB(programId));
- print_glsl_info_log(gl_info, programId);
+ shader_glsl_validate_link(gl_info, programId);
entry->vuniformF_locations = HeapAlloc(GetProcessHeap(), 0,
sizeof(GLhandleARB) * gl_info->limits.glsl_vs_float_constants);
@@ -4230,10 +4442,12 @@ static void set_glsl_shader_program(const struct wined3d_context *context,
* load them now to have them hardcoded in the GLSL program. This saves some CPU cycles
* later
*/
- if(pshader && !((IWineD3DPixelShaderImpl*)pshader)->baseShader.load_local_constsF) {
+ if (pshader && !((IWineD3DBaseShaderImpl *)pshader)->baseShader.load_local_constsF)
+ {
hardcode_local_constants((IWineD3DBaseShaderImpl *) pshader, gl_info, programId, 'P');
}
- if(vshader && !((IWineD3DVertexShaderImpl*)vshader)->baseShader.load_local_constsF) {
+ if (vshader && !((IWineD3DBaseShaderImpl *)vshader)->baseShader.load_local_constsF)
+ {
hardcode_local_constants((IWineD3DBaseShaderImpl *) vshader, gl_info, programId, 'V');
}
}
@@ -4303,7 +4517,7 @@ static GLhandleARB create_glsl_blt_shader(const struct wined3d_gl_info *gl_info,
GL_EXTCALL(glAttachObjectARB(program_id, pshader_id));
GL_EXTCALL(glLinkProgramARB(program_id));
- print_glsl_info_log(gl_info, program_id);
+ shader_glsl_validate_link(gl_info, program_id);
/* Once linked we can mark the shaders for deletion. They will be deleted once the program
* is destroyed
@@ -4394,8 +4608,6 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) {
IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)This->baseShader.device;
struct shader_glsl_priv *priv = device->shader_priv;
const struct wined3d_gl_info *gl_info;
- IWineD3DPixelShaderImpl *ps = NULL;
- IWineD3DVertexShaderImpl *vs = NULL;
struct wined3d_context *context;
/* Note: Do not use QueryInterface here to find out which shader type this is because this code
@@ -4405,12 +4617,11 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) {
if(pshader) {
struct glsl_pshader_private *shader_data;
- ps = (IWineD3DPixelShaderImpl *) This;
- shader_data = ps->baseShader.backend_data;
+ shader_data = This->baseShader.backend_data;
if(!shader_data || shader_data->num_gl_shaders == 0)
{
HeapFree(GetProcessHeap(), 0, shader_data);
- ps->baseShader.backend_data = NULL;
+ This->baseShader.backend_data = NULL;
return;
}
@@ -4425,12 +4636,11 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) {
}
} else {
struct glsl_vshader_private *shader_data;
- vs = (IWineD3DVertexShaderImpl *) This;
- shader_data = vs->baseShader.backend_data;
+ shader_data = This->baseShader.backend_data;
if(!shader_data || shader_data->num_gl_shaders == 0)
{
HeapFree(GetProcessHeap(), 0, shader_data);
- vs->baseShader.backend_data = NULL;
+ This->baseShader.backend_data = NULL;
return;
}
@@ -4466,7 +4676,7 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) {
if(pshader) {
UINT i;
- struct glsl_pshader_private *shader_data = ps->baseShader.backend_data;
+ struct glsl_pshader_private *shader_data = This->baseShader.backend_data;
ENTER_GL();
for(i = 0; i < shader_data->num_gl_shaders; i++) {
@@ -4476,11 +4686,11 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) {
}
LEAVE_GL();
HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders);
- HeapFree(GetProcessHeap(), 0, shader_data);
- ps->baseShader.backend_data = NULL;
- } else {
+ }
+ else
+ {
UINT i;
- struct glsl_vshader_private *shader_data = vs->baseShader.backend_data;
+ struct glsl_vshader_private *shader_data = This->baseShader.backend_data;
ENTER_GL();
for(i = 0; i < shader_data->num_gl_shaders; i++) {
@@ -4490,10 +4700,11 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) {
}
LEAVE_GL();
HeapFree(GetProcessHeap(), 0, shader_data->gl_shaders);
- HeapFree(GetProcessHeap(), 0, shader_data);
- vs->baseShader.backend_data = NULL;
}
+ HeapFree(GetProcessHeap(), 0, This->baseShader.backend_data);
+ This->baseShader.backend_data = NULL;
+
context_release(context);
}
@@ -4632,8 +4843,7 @@ static BOOL shader_glsl_dirty_const(IWineD3DDevice *iface) {
return FALSE;
}
-static void shader_glsl_get_caps(WINED3DDEVTYPE devtype,
- const struct wined3d_gl_info *gl_info, struct shader_caps *pCaps)
+static void shader_glsl_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *pCaps)
{
/* Nvidia Geforce6/7 or Ati R4xx/R5xx cards with GLSL support, support VS 3.0 but older Nvidia/Ati
* models with GLSL support only support 2.0. In case of nvidia we can detect VS 2.0 support based
@@ -4697,7 +4907,7 @@ static BOOL shader_glsl_color_fixup_supported(struct color_fixup_desc fixup)
}
/* We support everything except YUV conversions. */
- if (!is_yuv_fixup(fixup))
+ if (!is_complex_fixup(fixup))
{
TRACE("[OK]\n");
return TRUE;
@@ -4720,6 +4930,7 @@ static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TAB
/* WINED3DSIH_CMP */ shader_glsl_cmp,
/* WINED3DSIH_CND */ shader_glsl_cnd,
/* WINED3DSIH_CRS */ shader_glsl_cross,
+ /* WINED3DSIH_CUT */ NULL,
/* WINED3DSIH_DCL */ NULL,
/* WINED3DSIH_DEF */ NULL,
/* WINED3DSIH_DEFB */ NULL,
@@ -4731,20 +4942,24 @@ static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TAB
/* WINED3DSIH_DSX */ shader_glsl_map2gl,
/* WINED3DSIH_DSY */ shader_glsl_map2gl,
/* WINED3DSIH_ELSE */ shader_glsl_else,
+ /* WINED3DSIH_EMIT */ NULL,
/* WINED3DSIH_ENDIF */ shader_glsl_end,
/* WINED3DSIH_ENDLOOP */ shader_glsl_end,
/* WINED3DSIH_ENDREP */ shader_glsl_end,
/* WINED3DSIH_EXP */ shader_glsl_map2gl,
/* WINED3DSIH_EXPP */ shader_glsl_expp,
/* WINED3DSIH_FRC */ shader_glsl_map2gl,
+ /* WINED3DSIH_IADD */ NULL,
/* WINED3DSIH_IF */ shader_glsl_if,
/* WINED3DSIH_IFC */ shader_glsl_ifc,
+ /* WINED3DSIH_IGE */ NULL,
/* WINED3DSIH_LABEL */ shader_glsl_label,
/* WINED3DSIH_LIT */ shader_glsl_lit,
/* WINED3DSIH_LOG */ shader_glsl_log,
/* WINED3DSIH_LOGP */ shader_glsl_log,
/* WINED3DSIH_LOOP */ shader_glsl_loop,
/* WINED3DSIH_LRP */ shader_glsl_lrp,
+ /* WINED3DSIH_LT */ NULL,
/* WINED3DSIH_M3x2 */ shader_glsl_mnxn,
/* WINED3DSIH_M3x3 */ shader_glsl_mnxn,
/* WINED3DSIH_M3x4 */ shader_glsl_mnxn,
@@ -4757,7 +4972,7 @@ static const SHADER_HANDLER shader_glsl_instruction_handler_table[WINED3DSIH_TAB
/* WINED3DSIH_MOVA */ shader_glsl_mov,
/* WINED3DSIH_MUL */ shader_glsl_arith,
/* WINED3DSIH_NOP */ NULL,
- /* WINED3DSIH_NRM */ shader_glsl_map2gl,
+ /* WINED3DSIH_NRM */ shader_glsl_nrm,
/* WINED3DSIH_PHASE */ NULL,
/* WINED3DSIH_POW */ shader_glsl_pow,
/* WINED3DSIH_RCP */ shader_glsl_rcp,
diff --git a/reactos/dll/directx/wine/wined3d/nvidia_texture_shader.c b/reactos/dll/directx/wine/wined3d/nvidia_texture_shader.c
index 82a71dab3b9..64bb883d6c8 100644
--- a/reactos/dll/directx/wine/wined3d/nvidia_texture_shader.c
+++ b/reactos/dll/directx/wine/wined3d/nvidia_texture_shader.c
@@ -627,8 +627,7 @@ static void nvts_enable(IWineD3DDevice *iface, BOOL enable) {
LEAVE_GL();
}
-static void nvrc_fragment_get_caps(WINED3DDEVTYPE devtype,
- const struct wined3d_gl_info *gl_info, struct fragment_caps *pCaps)
+static void nvrc_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *pCaps)
{
pCaps->TextureOpCaps = WINED3DTEXOPCAPS_ADD |
WINED3DTEXOPCAPS_ADDSIGNED |
@@ -671,7 +670,7 @@ static void nvrc_fragment_get_caps(WINED3DDEVTYPE devtype,
WINED3DTEXOPCAPS_PREMODULATE */
#endif
- pCaps->MaxTextureBlendStages = gl_info->limits.texture_stages;
+ pCaps->MaxTextureBlendStages = min(MAX_TEXTURES, gl_info->limits.general_combiners);
pCaps->MaxSimultaneousTextures = gl_info->limits.textures;
pCaps->PrimitiveMiscCaps |= WINED3DPMISCCAPS_TSSARGTEMP;
diff --git a/reactos/dll/directx/wine/wined3d/query.c b/reactos/dll/directx/wine/wined3d/query.c
index 1280a3b629d..3860e2c95b5 100644
--- a/reactos/dll/directx/wine/wined3d/query.c
+++ b/reactos/dll/directx/wine/wined3d/query.c
@@ -24,15 +24,164 @@
#include "config.h"
#include "wined3d_private.h"
+WINE_DEFAULT_DEBUG_CHANNEL(d3d);
+#define GLINFO_LOCATION (*gl_info)
+
+static HRESULT wined3d_event_query_init(const struct wined3d_gl_info *gl_info, struct wined3d_event_query **query)
+{
+ struct wined3d_event_query *ret;
+ *query = NULL;
+ if (!gl_info->supported[ARB_SYNC] && !gl_info->supported[NV_FENCE]
+ && !gl_info->supported[APPLE_FENCE]) return E_NOTIMPL;
+
+ ret = HeapAlloc(GetProcessHeap(), 0, sizeof(*ret));
+ if (!ret)
+ {
+ ERR("Failed to allocate a wined3d event query structure.\n");
+ return E_OUTOFMEMORY;
+ }
+ ret->context = NULL;
+ *query = ret;
+ return WINED3D_OK;
+}
+
+static void wined3d_event_query_destroy(struct wined3d_event_query *query)
+{
+ if (query->context) context_free_event_query(query);
+ HeapFree(GetProcessHeap(), 0, query);
+}
+
+static enum wined3d_event_query_result wined3d_event_query_test(struct wined3d_event_query *query, IWineD3DDeviceImpl *device)
+{
+ struct wined3d_context *context;
+ const struct wined3d_gl_info *gl_info;
+ enum wined3d_event_query_result ret;
+ BOOL fence_result;
+
+ TRACE("(%p) : device %p\n", query, device);
+
+ if (query->context == NULL)
+ {
+ TRACE("Query not started\n");
+ return WINED3D_EVENT_QUERY_NOT_STARTED;
+ }
+
+ if (!query->context->gl_info->supported[ARB_SYNC] && query->context->tid != GetCurrentThreadId())
+ {
+ WARN("Event query tested from wrong thread\n");
+ return WINED3D_EVENT_QUERY_WRONG_THREAD;
+ }
+
+ context = context_acquire(device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
+ gl_info = context->gl_info;
+
+ ENTER_GL();
+
+ if (gl_info->supported[ARB_SYNC])
+ {
+ GLenum gl_ret = GL_EXTCALL(glClientWaitSync(query->object.sync, 0, 0));
+ checkGLcall("glClientWaitSync");
+
+ switch (gl_ret)
+ {
+ case GL_ALREADY_SIGNALED:
+ case GL_CONDITION_SATISFIED:
+ ret = WINED3D_EVENT_QUERY_OK;
+ break;
+
+ case GL_TIMEOUT_EXPIRED:
+ ret = WINED3D_EVENT_QUERY_WAITING;
+ break;
+
+ case GL_WAIT_FAILED:
+ default:
+ ERR("glClientWaitSync returned %#x.\n", gl_ret);
+ ret = WINED3D_EVENT_QUERY_ERROR;
+ }
+ }
+ else if (gl_info->supported[APPLE_FENCE])
+ {
+ fence_result = GL_EXTCALL(glTestFenceAPPLE(query->object.id));
+ checkGLcall("glTestFenceAPPLE");
+ if (fence_result) ret = WINED3D_EVENT_QUERY_OK;
+ else ret = WINED3D_EVENT_QUERY_WAITING;
+ }
+ else if (gl_info->supported[NV_FENCE])
+ {
+ fence_result = GL_EXTCALL(glTestFenceNV(query->object.id));
+ checkGLcall("glTestFenceNV");
+ if (fence_result) ret = WINED3D_EVENT_QUERY_OK;
+ else ret = WINED3D_EVENT_QUERY_WAITING;
+ }
+ else
+ {
+ ERR("Event query created despite lack of GL support\n");
+ ret = WINED3D_EVENT_QUERY_ERROR;
+ }
+
+ LEAVE_GL();
+
+ context_release(context);
+ return ret;
+}
+
+static void wined3d_event_query_issue(struct wined3d_event_query *query, IWineD3DDeviceImpl *device)
+{
+ const struct wined3d_gl_info *gl_info;
+ struct wined3d_context *context;
+
+ if (query->context)
+ {
+ if (!query->context->gl_info->supported[ARB_SYNC] && query->context->tid != GetCurrentThreadId())
+ {
+ context_free_event_query(query);
+ context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+ context_alloc_event_query(context, query);
+ }
+ else
+ {
+ context = context_acquire(device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
+ }
+ }
+ else
+ {
+ context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+ context_alloc_event_query(context, query);
+ }
+
+ gl_info = context->gl_info;
+
+ ENTER_GL();
+
+ if (gl_info->supported[ARB_SYNC])
+ {
+ if (query->object.sync) GL_EXTCALL(glDeleteSync(query->object.sync));
+ checkGLcall("glDeleteSync");
+ query->object.sync = GL_EXTCALL(glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0));
+ checkGLcall("glFenceSync");
+ }
+ else if (gl_info->supported[APPLE_FENCE])
+ {
+ GL_EXTCALL(glSetFenceAPPLE(query->object.id));
+ checkGLcall("glSetFenceAPPLE");
+ }
+ else if (gl_info->supported[NV_FENCE])
+ {
+ GL_EXTCALL(glSetFenceNV(query->object.id, GL_ALL_COMPLETED_NV));
+ checkGLcall("glSetFenceNV");
+ }
+
+ LEAVE_GL();
+
+ context_release(context);
+}
+
/*
* Occlusion Queries:
* http://www.gris.uni-tuebingen.de/~bartz/Publications/paper/hww98.pdf
* http://oss.sgi.com/projects/ogl-sample/registry/ARB/occlusion_query.txt
*/
-WINE_DEFAULT_DEBUG_CHANNEL(d3d);
-#define GLINFO_LOCATION This->device->adapter->gl_info
-
/* *******************************************
IWineD3DQuery IUnknown parts follow
******************************************* */
@@ -70,17 +219,16 @@ static ULONG WINAPI IWineD3DQueryImpl_Release(IWineD3DQuery *iface) {
if (This->type == WINED3DQUERYTYPE_EVENT)
{
struct wined3d_event_query *query = This->extendedData;
-
- if (query->context) context_free_event_query(query);
+ if (query) wined3d_event_query_destroy(query);
}
else if (This->type == WINED3DQUERYTYPE_OCCLUSION)
{
struct wined3d_occlusion_query *query = This->extendedData;
if (query->context) context_free_occlusion_query(query);
+ HeapFree(GetProcessHeap(), 0, This->extendedData);
}
- HeapFree(GetProcessHeap(), 0, This->extendedData);
HeapFree(GetProcessHeap(), 0, This);
}
return ref;
@@ -101,168 +249,6 @@ static HRESULT WINAPI IWineD3DQueryImpl_GetParent(IWineD3DQuery *iface, IUnknown
return WINED3D_OK;
}
-static HRESULT WINAPI IWineD3DQueryImpl_GetData(IWineD3DQuery* iface, void* pData, DWORD dwSize, DWORD dwGetDataFlags){
- IWineD3DQueryImpl *This = (IWineD3DQueryImpl *)iface;
- HRESULT res = S_OK;
-
- TRACE("(%p) : type %#x, pData %p, dwSize %#x, dwGetDataFlags %#x\n", This, This->type, pData, dwSize, dwGetDataFlags);
-
- switch (This->type){
-
- case WINED3DQUERYTYPE_VCACHE:
- {
-
- WINED3DDEVINFO_VCACHE *data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_VCACHE\n", This);
- if(pData == NULL || dwSize == 0) break;
- data->Pattern = WINEMAKEFOURCC('C','A','C','H');
- data->OptMethod = 0; /*0 get longest strips, 1 optimize vertex cache*/
- data->CacheSize = 0; /*cache size, only required if OptMethod == 1*/
- data->MagicNumber = 0; /*only required if OptMethod == 1 (used internally)*/
-
- }
- break;
- case WINED3DQUERYTYPE_RESOURCEMANAGER:
- {
- WINED3DDEVINFO_RESOURCEMANAGER *data = pData;
- int i;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_RESOURCEMANAGER\n", This);
- if(pData == NULL || dwSize == 0) break;
- for(i = 0; i < WINED3DRTYPECOUNT; i++){
- /*I'm setting the default values to 1 so as to reduce the risk of a div/0 in the caller*/
- /* isTextureResident could be used to get some of this information */
- data->stats[i].bThrashing = FALSE;
- data->stats[i].ApproxBytesDownloaded = 1;
- data->stats[i].NumEvicts = 1;
- data->stats[i].NumVidCreates = 1;
- data->stats[i].LastPri = 1;
- data->stats[i].NumUsed = 1;
- data->stats[i].NumUsedInVidMem = 1;
- data->stats[i].WorkingSet = 1;
- data->stats[i].WorkingSetBytes = 1;
- data->stats[i].TotalManaged = 1;
- data->stats[i].TotalBytes = 1;
- }
-
- }
- break;
- case WINED3DQUERYTYPE_VERTEXSTATS:
- {
- WINED3DDEVINFO_VERTEXSTATS *data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_VERTEXSTATS\n", This);
- if(pData == NULL || dwSize == 0) break;
- data->NumRenderedTriangles = 1;
- data->NumExtraClippingTriangles = 1;
-
- }
- break;
- case WINED3DQUERYTYPE_TIMESTAMP:
- {
- UINT64* data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_TIMESTAMP\n", This);
- if(pData == NULL || dwSize == 0) break;
- *data = 1; /*Don't know what this is supposed to be*/
- }
- break;
- case WINED3DQUERYTYPE_TIMESTAMPDISJOINT:
- {
- BOOL* data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_TIMESTAMPDISJOINT\n", This);
- if(pData == NULL || dwSize == 0) break;
- *data = FALSE; /*Don't know what this is supposed to be*/
- }
- break;
- case WINED3DQUERYTYPE_TIMESTAMPFREQ:
- {
- UINT64* data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_TIMESTAMPFREQ\n", This);
- if(pData == NULL || dwSize == 0) break;
- *data = 1; /*Don't know what this is supposed to be*/
- }
- break;
- case WINED3DQUERYTYPE_PIPELINETIMINGS:
- {
- WINED3DDEVINFO_PIPELINETIMINGS *data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_PIPELINETIMINGS\n", This);
- if(pData == NULL || dwSize == 0) break;
-
- data->VertexProcessingTimePercent = 1.0f;
- data->PixelProcessingTimePercent = 1.0f;
- data->OtherGPUProcessingTimePercent = 97.0f;
- data->GPUIdleTimePercent = 1.0f;
- }
- break;
- case WINED3DQUERYTYPE_INTERFACETIMINGS:
- {
- WINED3DDEVINFO_INTERFACETIMINGS *data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_INTERFACETIMINGS\n", This);
-
- if(pData == NULL || dwSize == 0) break;
- data->WaitingForGPUToUseApplicationResourceTimePercent = 1.0f;
- data->WaitingForGPUToAcceptMoreCommandsTimePercent = 1.0f;
- data->WaitingForGPUToStayWithinLatencyTimePercent = 1.0f;
- data->WaitingForGPUExclusiveResourceTimePercent = 1.0f;
- data->WaitingForGPUOtherTimePercent = 96.0f;
- }
-
- break;
- case WINED3DQUERYTYPE_VERTEXTIMINGS:
- {
- WINED3DDEVINFO_STAGETIMINGS *data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_VERTEXTIMINGS\n", This);
-
- if(pData == NULL || dwSize == 0) break;
- data->MemoryProcessingPercent = 50.0f;
- data->ComputationProcessingPercent = 50.0f;
-
- }
- break;
- case WINED3DQUERYTYPE_PIXELTIMINGS:
- {
- WINED3DDEVINFO_STAGETIMINGS *data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_PIXELTIMINGS\n", This);
-
- if(pData == NULL || dwSize == 0) break;
- data->MemoryProcessingPercent = 50.0f;
- data->ComputationProcessingPercent = 50.0f;
- }
- break;
- case WINED3DQUERYTYPE_BANDWIDTHTIMINGS:
- {
- WINED3DDEVINFO_BANDWIDTHTIMINGS *data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_BANDWIDTHTIMINGS\n", This);
-
- if(pData == NULL || dwSize == 0) break;
- data->MaxBandwidthUtilized = 1.0f;
- data->FrontEndUploadMemoryUtilizedPercent = 1.0f;
- data->VertexRateUtilizedPercent = 1.0f;
- data->TriangleSetupRateUtilizedPercent = 1.0f;
- data->FillRateUtilizedPercent = 97.0f;
- }
- break;
- case WINED3DQUERYTYPE_CACHEUTILIZATION:
- {
- WINED3DDEVINFO_CACHEUTILIZATION *data = pData;
- FIXME("(%p): Unimplemented query WINED3DQUERYTYPE_CACHEUTILIZATION\n", This);
-
- if(pData == NULL || dwSize == 0) break;
- data->TextureCacheHitRate = 1.0f;
- data->PostTransformVertexCacheHitRate = 1.0f;
- }
-
-
- break;
- default:
- FIXME("(%p) Unhandled query type %d\n",This , This->type);
-
- };
-
- /*dwGetDataFlags = 0 || D3DGETDATA_FLUSH
- D3DGETDATA_FLUSH may return WINED3DERR_DEVICELOST if the device is lost
- */
- return res; /* S_OK if the query data is available*/
-}
-
static HRESULT WINAPI IWineD3DOcclusionQueryImpl_GetData(IWineD3DQuery* iface, void* pData, DWORD dwSize, DWORD dwGetDataFlags) {
IWineD3DQueryImpl *This = (IWineD3DQueryImpl *) iface;
struct wined3d_occlusion_query *query = This->extendedData;
@@ -341,108 +327,44 @@ static HRESULT WINAPI IWineD3DOcclusionQueryImpl_GetData(IWineD3DQuery* iface,
static HRESULT WINAPI IWineD3DEventQueryImpl_GetData(IWineD3DQuery* iface, void* pData, DWORD dwSize, DWORD dwGetDataFlags) {
IWineD3DQueryImpl *This = (IWineD3DQueryImpl *) iface;
struct wined3d_event_query *query = This->extendedData;
- struct wined3d_context *context;
BOOL *data = pData;
+ enum wined3d_event_query_result ret;
TRACE("(%p) : type D3DQUERY_EVENT, pData %p, dwSize %#x, dwGetDataFlags %#x\n", This, pData, dwSize, dwGetDataFlags);
if (!pData || !dwSize) return S_OK;
-
- if (!query->context)
+ if (!query)
{
- TRACE("Query not started, returning TRUE.\n");
+ WARN("(%p): Event query not supported by GL, reporting GPU idle\n", This);
*data = TRUE;
-
return S_OK;
}
- if (query->context->tid != GetCurrentThreadId())
+ ret = wined3d_event_query_test(query, This->device);
+ switch(ret)
{
- /* See comment in IWineD3DQuery::Issue, event query codeblock */
- FIXME("Wrong thread, reporting GPU idle.\n");
- *data = TRUE;
+ case WINED3D_EVENT_QUERY_OK:
+ case WINED3D_EVENT_QUERY_NOT_STARTED:
+ *data = TRUE;
+ break;
- return S_OK;
+ case WINED3D_EVENT_QUERY_WAITING:
+ *data = FALSE;
+ break;
+
+ case WINED3D_EVENT_QUERY_WRONG_THREAD:
+ FIXME("(%p) Wrong thread, reporting GPU idle.\n", This);
+ *data = TRUE;
+ break;
+
+ case WINED3D_EVENT_QUERY_ERROR:
+ ERR("The GL event query failed, returning D3DERR_INVALIDCALL\n");
+ return WINED3DERR_INVALIDCALL;
}
- context = context_acquire(This->device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
-
- ENTER_GL();
-
- if (context->gl_info->supported[APPLE_FENCE])
- {
- *data = GL_EXTCALL(glTestFenceAPPLE(query->id));
- checkGLcall("glTestFenceAPPLE");
- }
- else if (context->gl_info->supported[NV_FENCE])
- {
- *data = GL_EXTCALL(glTestFenceNV(query->id));
- checkGLcall("glTestFenceNV");
- }
- else
- {
- WARN("(%p): reporting GPU idle\n", This);
- *data = TRUE;
- }
-
- LEAVE_GL();
-
- context_release(context);
-
return S_OK;
}
-static DWORD WINAPI IWineD3DQueryImpl_GetDataSize(IWineD3DQuery* iface){
- IWineD3DQueryImpl *This = (IWineD3DQueryImpl *)iface;
- int dataSize = 0;
- TRACE("(%p) : type %#x\n", This, This->type);
- switch(This->type){
- case WINED3DQUERYTYPE_VCACHE:
- dataSize = sizeof(WINED3DDEVINFO_VCACHE);
- break;
- case WINED3DQUERYTYPE_RESOURCEMANAGER:
- dataSize = sizeof(WINED3DDEVINFO_RESOURCEMANAGER);
- break;
- case WINED3DQUERYTYPE_VERTEXSTATS:
- dataSize = sizeof(WINED3DDEVINFO_VERTEXSTATS);
- break;
- case WINED3DQUERYTYPE_EVENT:
- dataSize = sizeof(BOOL);
- break;
- case WINED3DQUERYTYPE_TIMESTAMP:
- dataSize = sizeof(UINT64);
- break;
- case WINED3DQUERYTYPE_TIMESTAMPDISJOINT:
- dataSize = sizeof(BOOL);
- break;
- case WINED3DQUERYTYPE_TIMESTAMPFREQ:
- dataSize = sizeof(UINT64);
- break;
- case WINED3DQUERYTYPE_PIPELINETIMINGS:
- dataSize = sizeof(WINED3DDEVINFO_PIPELINETIMINGS);
- break;
- case WINED3DQUERYTYPE_INTERFACETIMINGS:
- dataSize = sizeof(WINED3DDEVINFO_INTERFACETIMINGS);
- break;
- case WINED3DQUERYTYPE_VERTEXTIMINGS:
- dataSize = sizeof(WINED3DDEVINFO_STAGETIMINGS);
- break;
- case WINED3DQUERYTYPE_PIXELTIMINGS:
- dataSize = sizeof(WINED3DDEVINFO_STAGETIMINGS);
- break;
- case WINED3DQUERYTYPE_BANDWIDTHTIMINGS:
- dataSize = sizeof(WINED3DQUERYTYPE_BANDWIDTHTIMINGS);
- break;
- case WINED3DQUERYTYPE_CACHEUTILIZATION:
- dataSize = sizeof(WINED3DDEVINFO_CACHEUTILIZATION);
- break;
- default:
- FIXME("(%p) Unhandled query type %d\n",This , This->type);
- dataSize = 0;
- }
- return dataSize;
-}
-
static DWORD WINAPI IWineD3DEventQueryImpl_GetDataSize(IWineD3DQuery* iface){
TRACE("(%p) : type D3DQUERY_EVENT\n", iface);
@@ -460,7 +382,6 @@ static WINED3DQUERYTYPE WINAPI IWineD3DQueryImpl_GetType(IWineD3DQuery* iface){
return This->type;
}
-
static HRESULT WINAPI IWineD3DEventQueryImpl_Issue(IWineD3DQuery* iface, DWORD dwIssueFlags) {
IWineD3DQueryImpl *This = (IWineD3DQueryImpl *)iface;
@@ -468,43 +389,11 @@ static HRESULT WINAPI IWineD3DEventQueryImpl_Issue(IWineD3DQuery* iface, DWORD
if (dwIssueFlags & WINED3DISSUE_END)
{
struct wined3d_event_query *query = This->extendedData;
- struct wined3d_context *context;
- if (query->context)
- {
- if (query->context->tid != GetCurrentThreadId())
- {
- context_free_event_query(query);
- context = context_acquire(This->device, NULL, CTXUSAGE_RESOURCELOAD);
- context_alloc_event_query(context, query);
- }
- else
- {
- context = context_acquire(This->device, query->context->current_rt, CTXUSAGE_RESOURCELOAD);
- }
- }
- else
- {
- context = context_acquire(This->device, NULL, CTXUSAGE_RESOURCELOAD);
- context_alloc_event_query(context, query);
- }
+ /* Faked event query support */
+ if (!query) return WINED3D_OK;
- ENTER_GL();
-
- if (context->gl_info->supported[APPLE_FENCE])
- {
- GL_EXTCALL(glSetFenceAPPLE(query->id));
- checkGLcall("glSetFenceAPPLE");
- }
- else if (context->gl_info->supported[NV_FENCE])
- {
- GL_EXTCALL(glSetFenceNV(query->id, GL_ALL_COMPLETED_NV));
- checkGLcall("glSetFenceNV");
- }
-
- LEAVE_GL();
-
- context_release(context);
+ wined3d_event_query_issue(query, This->device);
}
else if(dwIssueFlags & WINED3DISSUE_BEGIN)
{
@@ -604,43 +493,7 @@ static HRESULT WINAPI IWineD3DOcclusionQueryImpl_Issue(IWineD3DQuery* iface, D
return WINED3D_OK; /* can be WINED3DERR_INVALIDCALL. */
}
-static HRESULT WINAPI IWineD3DQueryImpl_Issue(IWineD3DQuery* iface, DWORD dwIssueFlags){
- IWineD3DQueryImpl *This = (IWineD3DQueryImpl *)iface;
-
- TRACE("(%p) : dwIssueFlags %#x, type %#x\n", This, dwIssueFlags, This->type);
-
- /* The fixme is printed when the app asks for the resulting data */
- WARN("(%p) : Unhandled query type %#x\n", This, This->type);
-
- if(dwIssueFlags & WINED3DISSUE_BEGIN) {
- This->state = QUERY_BUILDING;
- } else {
- This->state = QUERY_SIGNALLED;
- }
-
- return WINED3D_OK; /* can be WINED3DERR_INVALIDCALL. */
-}
-
-
-/**********************************************************
- * IWineD3DQuery VTbl follows
- **********************************************************/
-
-const IWineD3DQueryVtbl IWineD3DQuery_Vtbl =
-{
- /*** IUnknown methods ***/
- IWineD3DQueryImpl_QueryInterface,
- IWineD3DQueryImpl_AddRef,
- IWineD3DQueryImpl_Release,
- /*** IWineD3Dquery methods ***/
- IWineD3DQueryImpl_GetParent,
- IWineD3DQueryImpl_GetData,
- IWineD3DQueryImpl_GetDataSize,
- IWineD3DQueryImpl_GetType,
- IWineD3DQueryImpl_Issue
-};
-
-const IWineD3DQueryVtbl IWineD3DEventQuery_Vtbl =
+static const IWineD3DQueryVtbl IWineD3DEventQuery_Vtbl =
{
/*** IUnknown methods ***/
IWineD3DQueryImpl_QueryInterface,
@@ -654,7 +507,7 @@ const IWineD3DQueryVtbl IWineD3DEventQuery_Vtbl =
IWineD3DEventQueryImpl_Issue
};
-const IWineD3DQueryVtbl IWineD3DOcclusionQuery_Vtbl =
+static const IWineD3DQueryVtbl IWineD3DOcclusionQuery_Vtbl =
{
/*** IUnknown methods ***/
IWineD3DQueryImpl_QueryInterface,
@@ -667,3 +520,72 @@ const IWineD3DQueryVtbl IWineD3DOcclusionQuery_Vtbl =
IWineD3DQueryImpl_GetType,
IWineD3DOcclusionQueryImpl_Issue
};
+
+HRESULT query_init(IWineD3DQueryImpl *query, IWineD3DDeviceImpl *device,
+ WINED3DQUERYTYPE type, IUnknown *parent)
+{
+ const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
+ HRESULT hr;
+
+ switch (type)
+ {
+ case WINED3DQUERYTYPE_OCCLUSION:
+ TRACE("Occlusion query.\n");
+ if (!gl_info->supported[ARB_OCCLUSION_QUERY])
+ {
+ WARN("Unsupported in local OpenGL implementation: ARB_OCCLUSION_QUERY.\n");
+ return WINED3DERR_NOTAVAILABLE;
+ }
+ query->lpVtbl = &IWineD3DOcclusionQuery_Vtbl;
+ query->extendedData = HeapAlloc(GetProcessHeap(), 0, sizeof(struct wined3d_occlusion_query));
+ if (!query->extendedData)
+ {
+ ERR("Failed to allocate occlusion query extended data.\n");
+ return E_OUTOFMEMORY;
+ }
+ ((struct wined3d_occlusion_query *)query->extendedData)->context = NULL;
+ break;
+
+ case WINED3DQUERYTYPE_EVENT:
+ TRACE("Event query.\n");
+ query->lpVtbl = &IWineD3DEventQuery_Vtbl;
+ hr = wined3d_event_query_init(gl_info, (struct wined3d_event_query **) &query->extendedData);
+ if (hr == E_NOTIMPL)
+ {
+ /* Half-Life 2 needs this query. It does not render the main
+ * menu correctly otherwise. Pretend to support it, faking
+ * this query does not do much harm except potentially
+ * lowering performance. */
+ FIXME("Event query: Unimplemented, but pretending to be supported.\n");
+ }
+ else if(FAILED(hr))
+ {
+ return hr;
+ }
+ break;
+
+ case WINED3DQUERYTYPE_VCACHE:
+ case WINED3DQUERYTYPE_RESOURCEMANAGER:
+ case WINED3DQUERYTYPE_VERTEXSTATS:
+ case WINED3DQUERYTYPE_TIMESTAMP:
+ case WINED3DQUERYTYPE_TIMESTAMPDISJOINT:
+ case WINED3DQUERYTYPE_TIMESTAMPFREQ:
+ case WINED3DQUERYTYPE_PIPELINETIMINGS:
+ case WINED3DQUERYTYPE_INTERFACETIMINGS:
+ case WINED3DQUERYTYPE_VERTEXTIMINGS:
+ case WINED3DQUERYTYPE_PIXELTIMINGS:
+ case WINED3DQUERYTYPE_BANDWIDTHTIMINGS:
+ case WINED3DQUERYTYPE_CACHEUTILIZATION:
+ default:
+ FIXME("Unhandled query type %#x.\n", type);
+ return WINED3DERR_NOTAVAILABLE;
+ }
+
+ query->type = type;
+ query->state = QUERY_CREATED;
+ query->device = device;
+ query->parent = parent;
+ query->ref = 1;
+
+ return WINED3D_OK;
+}
diff --git a/reactos/dll/directx/wine/wined3d/shader.c b/reactos/dll/directx/wine/wined3d/shader.c
index 398ea641835..307cadf804c 100644
--- a/reactos/dll/directx/wine/wined3d/shader.c
+++ b/reactos/dll/directx/wine/wined3d/shader.c
@@ -26,10 +26,1433 @@
#include
#include
+#include
#include "wined3d_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
+WINE_DECLARE_DEBUG_CHANNEL(d3d);
+
+static const char *shader_opcode_names[] =
+{
+ /* WINED3DSIH_ABS */ "abs",
+ /* WINED3DSIH_ADD */ "add",
+ /* WINED3DSIH_BEM */ "bem",
+ /* WINED3DSIH_BREAK */ "break",
+ /* WINED3DSIH_BREAKC */ "breakc",
+ /* WINED3DSIH_BREAKP */ "breakp",
+ /* WINED3DSIH_CALL */ "call",
+ /* WINED3DSIH_CALLNZ */ "callnz",
+ /* WINED3DSIH_CMP */ "cmp",
+ /* WINED3DSIH_CND */ "cnd",
+ /* WINED3DSIH_CRS */ "crs",
+ /* WINED3DSIH_CUT */ "cut",
+ /* WINED3DSIH_DCL */ "dcl",
+ /* WINED3DSIH_DEF */ "def",
+ /* WINED3DSIH_DEFB */ "defb",
+ /* WINED3DSIH_DEFI */ "defi",
+ /* WINED3DSIH_DP2ADD */ "dp2add",
+ /* WINED3DSIH_DP3 */ "dp3",
+ /* WINED3DSIH_DP4 */ "dp4",
+ /* WINED3DSIH_DST */ "dst",
+ /* WINED3DSIH_DSX */ "dsx",
+ /* WINED3DSIH_DSY */ "dsy",
+ /* WINED3DSIH_ELSE */ "else",
+ /* WINED3DSIH_EMIT */ "emit",
+ /* WINED3DSIH_ENDIF */ "endif",
+ /* WINED3DSIH_ENDLOOP */ "endloop",
+ /* WINED3DSIH_ENDREP */ "endrep",
+ /* WINED3DSIH_EXP */ "exp",
+ /* WINED3DSIH_EXPP */ "expp",
+ /* WINED3DSIH_FRC */ "frc",
+ /* WINED3DSIH_IADD */ "iadd",
+ /* WINED3DSIH_IF */ "if",
+ /* WINED3DSIH_IFC */ "ifc",
+ /* WINED3DSIH_IGE */ "ige",
+ /* WINED3DSIH_LABEL */ "label",
+ /* WINED3DSIH_LIT */ "lit",
+ /* WINED3DSIH_LOG */ "log",
+ /* WINED3DSIH_LOGP */ "logp",
+ /* WINED3DSIH_LOOP */ "loop",
+ /* WINED3DSIH_LRP */ "lrp",
+ /* WINED3DSIH_LT */ "lt",
+ /* WINED3DSIH_M3x2 */ "m3x2",
+ /* WINED3DSIH_M3x3 */ "m3x3",
+ /* WINED3DSIH_M3x4 */ "m3x4",
+ /* WINED3DSIH_M4x3 */ "m4x3",
+ /* WINED3DSIH_M4x4 */ "m4x4",
+ /* WINED3DSIH_MAD */ "mad",
+ /* WINED3DSIH_MAX */ "max",
+ /* WINED3DSIH_MIN */ "min",
+ /* WINED3DSIH_MOV */ "mov",
+ /* WINED3DSIH_MOVA */ "mova",
+ /* WINED3DSIH_MUL */ "mul",
+ /* WINED3DSIH_NOP */ "nop",
+ /* WINED3DSIH_NRM */ "nrm",
+ /* WINED3DSIH_PHASE */ "phase",
+ /* WINED3DSIH_POW */ "pow",
+ /* WINED3DSIH_RCP */ "rcp",
+ /* WINED3DSIH_REP */ "rep",
+ /* WINED3DSIH_RET */ "ret",
+ /* WINED3DSIH_RSQ */ "rsq",
+ /* WINED3DSIH_SETP */ "setp",
+ /* WINED3DSIH_SGE */ "sge",
+ /* WINED3DSIH_SGN */ "sgn",
+ /* WINED3DSIH_SINCOS */ "sincos",
+ /* WINED3DSIH_SLT */ "slt",
+ /* WINED3DSIH_SUB */ "sub",
+ /* WINED3DSIH_TEX */ "texld",
+ /* WINED3DSIH_TEXBEM */ "texbem",
+ /* WINED3DSIH_TEXBEML */ "texbeml",
+ /* WINED3DSIH_TEXCOORD */ "texcrd",
+ /* WINED3DSIH_TEXDEPTH */ "texdepth",
+ /* WINED3DSIH_TEXDP3 */ "texdp3",
+ /* WINED3DSIH_TEXDP3TEX */ "texdp3tex",
+ /* WINED3DSIH_TEXKILL */ "texkill",
+ /* WINED3DSIH_TEXLDD */ "texldd",
+ /* WINED3DSIH_TEXLDL */ "texldl",
+ /* WINED3DSIH_TEXM3x2DEPTH */ "texm3x2depth",
+ /* WINED3DSIH_TEXM3x2PAD */ "texm3x2pad",
+ /* WINED3DSIH_TEXM3x2TEX */ "texm3x2tex",
+ /* WINED3DSIH_TEXM3x3 */ "texm3x3",
+ /* WINED3DSIH_TEXM3x3DIFF */ "texm3x3diff",
+ /* WINED3DSIH_TEXM3x3PAD */ "texm3x3pad",
+ /* WINED3DSIH_TEXM3x3SPEC */ "texm3x3spec",
+ /* WINED3DSIH_TEXM3x3TEX */ "texm3x3tex",
+ /* WINED3DSIH_TEXM3x3VSPEC */ "texm3x3vspec",
+ /* WINED3DSIH_TEXREG2AR */ "texreg2ar",
+ /* WINED3DSIH_TEXREG2GB */ "texreg2gb",
+ /* WINED3DSIH_TEXREG2RGB */ "texreg2rgb",
+};
+
+static const char *semantic_names[] =
+{
+ /* WINED3DDECLUSAGE_POSITION */ "SV_POSITION",
+ /* WINED3DDECLUSAGE_BLENDWEIGHT */ "BLENDWEIGHT",
+ /* WINED3DDECLUSAGE_BLENDINDICES */ "BLENDINDICES",
+ /* WINED3DDECLUSAGE_NORMAL */ "NORMAL",
+ /* WINED3DDECLUSAGE_PSIZE */ "PSIZE",
+ /* WINED3DDECLUSAGE_TEXCOORD */ "TEXCOORD",
+ /* WINED3DDECLUSAGE_TANGENT */ "TANGENT",
+ /* WINED3DDECLUSAGE_BINORMAL */ "BINORMAL",
+ /* WINED3DDECLUSAGE_TESSFACTOR */ "TESSFACTOR",
+ /* WINED3DDECLUSAGE_POSITIONT */ "POSITIONT",
+ /* WINED3DDECLUSAGE_COLOR */ "COLOR",
+ /* WINED3DDECLUSAGE_FOG */ "FOG",
+ /* WINED3DDECLUSAGE_DEPTH */ "DEPTH",
+ /* WINED3DDECLUSAGE_SAMPLE */ "SAMPLE",
+};
+
+static const char *shader_semantic_name_from_usage(WINED3DDECLUSAGE usage)
+{
+ if (usage >= sizeof(semantic_names) / sizeof(*semantic_names))
+ {
+ FIXME("Unrecognized usage %#x.\n", usage);
+ return "UNRECOGNIZED";
+ }
+
+ return semantic_names[usage];
+}
+
+static WINED3DDECLUSAGE shader_usage_from_semantic_name(const char *name)
+{
+ unsigned int i;
+
+ for (i = 0; i < sizeof(semantic_names) / sizeof(*semantic_names); ++i)
+ {
+ if (!strcmp(name, semantic_names[i])) return i;
+ }
+
+ return ~0U;
+}
+
+BOOL shader_match_semantic(const char *semantic_name, WINED3DDECLUSAGE usage)
+{
+ return !strcmp(semantic_name, shader_semantic_name_from_usage(usage));
+}
+
+static void shader_signature_from_semantic(struct wined3d_shader_signature_element *e,
+ const struct wined3d_shader_semantic *s)
+{
+ e->semantic_name = shader_semantic_name_from_usage(s->usage);
+ e->semantic_idx = s->usage_idx;
+ e->sysval_semantic = 0;
+ e->component_type = 0;
+ e->register_idx = s->reg.reg.idx;
+ e->mask = s->reg.write_mask;
+}
+
+static const struct wined3d_shader_frontend *shader_select_frontend(DWORD version_token)
+{
+ switch (version_token >> 16)
+ {
+ case WINED3D_SM1_VS:
+ case WINED3D_SM1_PS:
+ return &sm1_shader_frontend;
+
+ case WINED3D_SM4_PS:
+ case WINED3D_SM4_VS:
+ case WINED3D_SM4_GS:
+ return &sm4_shader_frontend;
+
+ default:
+ FIXME("Unrecognised version token %#x\n", version_token);
+ return NULL;
+ }
+}
+
+void shader_buffer_clear(struct wined3d_shader_buffer *buffer)
+{
+ buffer->buffer[0] = '\0';
+ buffer->bsize = 0;
+ buffer->lineNo = 0;
+ buffer->newline = TRUE;
+}
+
+BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer)
+{
+ buffer->buffer = HeapAlloc(GetProcessHeap(), 0, SHADER_PGMSIZE);
+ if (!buffer->buffer)
+ {
+ ERR("Failed to allocate shader buffer memory.\n");
+ return FALSE;
+ }
+
+ shader_buffer_clear(buffer);
+ return TRUE;
+}
+
+void shader_buffer_free(struct wined3d_shader_buffer *buffer)
+{
+ HeapFree(GetProcessHeap(), 0, buffer->buffer);
+}
+
+int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *format, va_list args)
+{
+ char *base = buffer->buffer + buffer->bsize;
+ int rc;
+
+ rc = vsnprintf(base, SHADER_PGMSIZE - 1 - buffer->bsize, format, args);
+
+ if (rc < 0 /* C89 */ || (unsigned int)rc > SHADER_PGMSIZE - 1 - buffer->bsize /* C99 */)
+ {
+ ERR("The buffer allocated for the shader program string "
+ "is too small at %d bytes.\n", SHADER_PGMSIZE);
+ buffer->bsize = SHADER_PGMSIZE - 1;
+ return -1;
+ }
+
+ if (buffer->newline)
+ {
+ TRACE("GL HW (%u, %u) : %s", buffer->lineNo + 1, buffer->bsize, base);
+ buffer->newline = FALSE;
+ }
+ else
+ {
+ TRACE("%s", base);
+ }
+
+ buffer->bsize += rc;
+ if (buffer->buffer[buffer->bsize-1] == '\n')
+ {
+ ++buffer->lineNo;
+ buffer->newline = TRUE;
+ }
+
+ return 0;
+}
+
+int shader_addline(struct wined3d_shader_buffer *buffer, const char *format, ...)
+{
+ va_list args;
+ int ret;
+
+ va_start(args, format);
+ ret = shader_vaddline(buffer, format, args);
+ va_end(args);
+
+ return ret;
+}
+
+static void shader_init(struct IWineD3DBaseShaderClass *shader, IWineD3DDeviceImpl *device,
+ IUnknown *parent, const struct wined3d_parent_ops *parent_ops)
+{
+ shader->ref = 1;
+ shader->device = (IWineD3DDevice *)device;
+ shader->parent = parent;
+ shader->parent_ops = parent_ops;
+ list_init(&shader->linked_programs);
+ list_add_head(&device->shaders, &shader->shader_list_entry);
+}
+
+/* Convert floating point offset relative to a register file to an absolute
+ * offset for float constants. */
+static unsigned int shader_get_float_offset(WINED3DSHADER_PARAM_REGISTER_TYPE register_type, UINT register_idx)
+{
+ switch (register_type)
+ {
+ case WINED3DSPR_CONST: return register_idx;
+ case WINED3DSPR_CONST2: return 2048 + register_idx;
+ case WINED3DSPR_CONST3: return 4096 + register_idx;
+ case WINED3DSPR_CONST4: return 6144 + register_idx;
+ default:
+ FIXME("Unsupported register type: %u.\n", register_type);
+ return register_idx;
+ }
+}
+
+static void shader_delete_constant_list(struct list *clist)
+{
+ struct local_constant *constant;
+ struct list *ptr;
+
+ ptr = list_head(clist);
+ while (ptr)
+ {
+ constant = LIST_ENTRY(ptr, struct local_constant, entry);
+ ptr = list_next(clist, ptr);
+ HeapFree(GetProcessHeap(), 0, constant);
+ }
+ list_init(clist);
+}
+
+static inline void set_bitmap_bit(DWORD *bitmap, DWORD bit)
+{
+ DWORD idx, shift;
+ idx = bit >> 5;
+ shift = bit & 0x1f;
+ bitmap[idx] |= (1 << shift);
+}
+
+static void shader_record_register_usage(IWineD3DBaseShaderImpl *shader, struct shader_reg_maps *reg_maps,
+ const struct wined3d_shader_register *reg, enum wined3d_shader_type shader_type)
+{
+ switch (reg->type)
+ {
+ case WINED3DSPR_TEXTURE: /* WINED3DSPR_ADDR */
+ if (shader_type == WINED3D_SHADER_TYPE_PIXEL) reg_maps->texcoord |= 1 << reg->idx;
+ else reg_maps->address |= 1 << reg->idx;
+ break;
+
+ case WINED3DSPR_TEMP:
+ reg_maps->temporary |= 1 << reg->idx;
+ break;
+
+ case WINED3DSPR_INPUT:
+ if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ if (reg->rel_addr)
+ {
+ /* If relative addressing is used, we must assume that all registers
+ * are used. Even if it is a construct like v3[aL], we can't assume
+ * that v0, v1 and v2 aren't read because aL can be negative */
+ unsigned int i;
+ for (i = 0; i < MAX_REG_INPUT; ++i)
+ {
+ ((IWineD3DPixelShaderImpl *)shader)->input_reg_used[i] = TRUE;
+ }
+ }
+ else
+ {
+ ((IWineD3DPixelShaderImpl *)shader)->input_reg_used[reg->idx] = TRUE;
+ }
+ }
+ else reg_maps->input_registers |= 1 << reg->idx;
+ break;
+
+ case WINED3DSPR_RASTOUT:
+ if (reg->idx == 1) reg_maps->fog = 1;
+ break;
+
+ case WINED3DSPR_MISCTYPE:
+ if (shader_type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ if (reg->idx == 0) reg_maps->vpos = 1;
+ else if (reg->idx == 1) reg_maps->usesfacing = 1;
+ }
+ break;
+
+ case WINED3DSPR_CONST:
+ if (reg->rel_addr)
+ {
+ if (shader_type != WINED3D_SHADER_TYPE_PIXEL)
+ {
+ if (reg->idx < ((IWineD3DVertexShaderImpl *)shader)->min_rel_offset)
+ {
+ ((IWineD3DVertexShaderImpl *)shader)->min_rel_offset = reg->idx;
+ }
+ if (reg->idx > ((IWineD3DVertexShaderImpl *)shader)->max_rel_offset)
+ {
+ ((IWineD3DVertexShaderImpl *)shader)->max_rel_offset = reg->idx;
+ }
+ }
+ reg_maps->usesrelconstF = TRUE;
+ }
+ else
+ {
+ set_bitmap_bit(reg_maps->constf, reg->idx);
+ }
+ break;
+
+ case WINED3DSPR_CONSTINT:
+ reg_maps->integer_constants |= (1 << reg->idx);
+ break;
+
+ case WINED3DSPR_CONSTBOOL:
+ reg_maps->boolean_constants |= (1 << reg->idx);
+ break;
+
+ case WINED3DSPR_COLOROUT:
+ reg_maps->highest_render_target = max(reg_maps->highest_render_target, reg->idx);
+ break;
+
+ default:
+ TRACE("Not recording register of type %#x and idx %u\n", reg->type, reg->idx);
+ break;
+ }
+}
+
+static unsigned int get_instr_extra_regcount(enum WINED3D_SHADER_INSTRUCTION_HANDLER instr, unsigned int param)
+{
+ switch (instr)
+ {
+ case WINED3DSIH_M4x4:
+ case WINED3DSIH_M3x4:
+ return param == 1 ? 3 : 0;
+
+ case WINED3DSIH_M4x3:
+ case WINED3DSIH_M3x3:
+ return param == 1 ? 2 : 0;
+
+ case WINED3DSIH_M3x2:
+ return param == 1 ? 1 : 0;
+
+ default:
+ return 0;
+ }
+}
+
+/* Note that this does not count the loop register as an address register. */
+static HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3d_shader_frontend *fe,
+ struct shader_reg_maps *reg_maps, struct wined3d_shader_signature_element *input_signature,
+ struct wined3d_shader_signature_element *output_signature, const DWORD *byte_code, DWORD constf_size)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+ unsigned int cur_loop_depth = 0, max_loop_depth = 0;
+ void *fe_data = shader->baseShader.frontend_data;
+ struct wined3d_shader_version shader_version;
+ const DWORD *ptr = byte_code;
+
+ memset(reg_maps, 0, sizeof(*reg_maps));
+
+ /* get_registers_used() is called on every compile on some 1.x shaders,
+ * which can result in stacking up a collection of local constants.
+ * Delete the old constants if existing. */
+ shader_delete_constant_list(&shader->baseShader.constantsF);
+ shader_delete_constant_list(&shader->baseShader.constantsB);
+ shader_delete_constant_list(&shader->baseShader.constantsI);
+
+ fe->shader_read_header(fe_data, &ptr, &shader_version);
+ reg_maps->shader_version = shader_version;
+
+ reg_maps->constf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ sizeof(*reg_maps->constf) * ((constf_size + 31) / 32));
+ if (!reg_maps->constf)
+ {
+ ERR("Failed to allocate constant map memory.\n");
+ return E_OUTOFMEMORY;
+ }
+
+ while (!fe->shader_is_end(fe_data, &ptr))
+ {
+ struct wined3d_shader_instruction ins;
+ const char *comment;
+ UINT comment_size;
+ UINT param_size;
+
+ /* Skip comments. */
+ fe->shader_read_comment(&ptr, &comment, &comment_size);
+ if (comment) continue;
+
+ /* Fetch opcode. */
+ fe->shader_read_opcode(fe_data, &ptr, &ins, ¶m_size);
+
+ /* Unhandled opcode, and its parameters. */
+ if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+ {
+ TRACE("Skipping unrecognized instruction.\n");
+ ptr += param_size;
+ continue;
+ }
+
+ /* Handle declarations. */
+ if (ins.handler_idx == WINED3DSIH_DCL)
+ {
+ struct wined3d_shader_semantic semantic;
+
+ fe->shader_read_semantic(&ptr, &semantic);
+
+ switch (semantic.reg.reg.type)
+ {
+ /* Mark input registers used. */
+ case WINED3DSPR_INPUT:
+ reg_maps->input_registers |= 1 << semantic.reg.reg.idx;
+ shader_signature_from_semantic(&input_signature[semantic.reg.reg.idx], &semantic);
+ break;
+
+ /* Vertex shader: mark 3.0 output registers used, save token. */
+ case WINED3DSPR_OUTPUT:
+ reg_maps->output_registers |= 1 << semantic.reg.reg.idx;
+ shader_signature_from_semantic(&output_signature[semantic.reg.reg.idx], &semantic);
+ if (semantic.usage == WINED3DDECLUSAGE_FOG) reg_maps->fog = 1;
+ break;
+
+ /* Save sampler usage token. */
+ case WINED3DSPR_SAMPLER:
+ reg_maps->sampler_type[semantic.reg.reg.idx] = semantic.sampler_type;
+ break;
+
+ default:
+ TRACE("Not recording DCL register type %#x.\n", semantic.reg.reg.type);
+ break;
+ }
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEF)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+ if (!lconst) return E_OUTOFMEMORY;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+ lconst->idx = dst.reg.idx;
+
+ memcpy(lconst->value, ptr, 4 * sizeof(DWORD));
+ ptr += 4;
+
+ /* In pixel shader 1.X shaders, the constants are clamped between [-1;1] */
+ if (shader_version.major == 1 && shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ float *value = (float *)lconst->value;
+ if (value[0] < -1.0f) value[0] = -1.0f;
+ else if (value[0] > 1.0f) value[0] = 1.0f;
+ if (value[1] < -1.0f) value[1] = -1.0f;
+ else if (value[1] > 1.0f) value[1] = 1.0f;
+ if (value[2] < -1.0f) value[2] = -1.0f;
+ else if (value[2] > 1.0f) value[2] = 1.0f;
+ if (value[3] < -1.0f) value[3] = -1.0f;
+ else if (value[3] > 1.0f) value[3] = 1.0f;
+ }
+
+ list_add_head(&shader->baseShader.constantsF, &lconst->entry);
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEFI)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+ if (!lconst) return E_OUTOFMEMORY;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+ lconst->idx = dst.reg.idx;
+
+ memcpy(lconst->value, ptr, 4 * sizeof(DWORD));
+ ptr += 4;
+
+ list_add_head(&shader->baseShader.constantsI, &lconst->entry);
+ reg_maps->local_int_consts |= (1 << dst.reg.idx);
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEFB)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ local_constant *lconst = HeapAlloc(GetProcessHeap(), 0, sizeof(local_constant));
+ if (!lconst) return E_OUTOFMEMORY;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+ lconst->idx = dst.reg.idx;
+
+ memcpy(lconst->value, ptr, sizeof(DWORD));
+ ++ptr;
+
+ list_add_head(&shader->baseShader.constantsB, &lconst->entry);
+ reg_maps->local_bool_consts |= (1 << dst.reg.idx);
+ }
+ /* If there's a loop in the shader. */
+ else if (ins.handler_idx == WINED3DSIH_LOOP
+ || ins.handler_idx == WINED3DSIH_REP)
+ {
+ struct wined3d_shader_src_param src, rel_addr;
+
+ fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+
+ /* Rep and Loop always use an integer constant for the control parameters. */
+ if (ins.handler_idx == WINED3DSIH_REP)
+ {
+ reg_maps->integer_constants |= 1 << src.reg.idx;
+ }
+ else
+ {
+ fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+ reg_maps->integer_constants |= 1 << src.reg.idx;
+ }
+
+ cur_loop_depth++;
+ if (cur_loop_depth > max_loop_depth) max_loop_depth = cur_loop_depth;
+ }
+ else if (ins.handler_idx == WINED3DSIH_ENDLOOP
+ || ins.handler_idx == WINED3DSIH_ENDREP)
+ {
+ cur_loop_depth--;
+ }
+ /* For subroutine prototypes. */
+ else if (ins.handler_idx == WINED3DSIH_LABEL)
+ {
+ struct wined3d_shader_src_param src, rel_addr;
+
+ fe->shader_read_src_param(fe_data, &ptr, &src, &rel_addr);
+ reg_maps->labels |= 1 << src.reg.idx;
+ }
+ /* Set texture, address, temporary registers. */
+ else
+ {
+ BOOL color0_mov = FALSE;
+ int i, limit;
+
+ /* This will loop over all the registers and try to
+ * make a bitmask of the ones we're interested in.
+ *
+ * Relative addressing tokens are ignored, but that's
+ * okay, since we'll catch any address registers when
+ * they are initialized (required by spec). */
+ if (ins.dst_count)
+ {
+ struct wined3d_shader_src_param dst_rel_addr;
+ struct wined3d_shader_dst_param dst_param;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+
+ shader_record_register_usage(shader, reg_maps, &dst_param.reg, shader_version.type);
+
+ /* WINED3DSPR_TEXCRDOUT is the same as WINED3DSPR_OUTPUT. _OUTPUT can be > MAX_REG_TEXCRD and
+ * is used in >= 3.0 shaders. Filter 3.0 shaders to prevent overflows, and also filter pixel
+ * shaders because TECRDOUT isn't used in them, but future register types might cause issues */
+ if (shader_version.type == WINED3D_SHADER_TYPE_VERTEX && shader_version.major < 3
+ && dst_param.reg.type == WINED3DSPR_TEXCRDOUT)
+ {
+ reg_maps->texcoord_mask[dst_param.reg.idx] |= dst_param.write_mask;
+ }
+
+ if (shader_version.type == WINED3D_SHADER_TYPE_PIXEL)
+ {
+ IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *)shader;
+
+ if (dst_param.reg.type == WINED3DSPR_COLOROUT && dst_param.reg.idx == 0)
+ {
+ /* Many 2.0 and 3.0 pixel shaders end with a MOV from a temp register to
+ * COLOROUT 0. If we know this in advance, the ARB shader backend can skip
+ * the mov and perform the sRGB write correction from the source register.
+ *
+ * However, if the mov is only partial, we can't do this, and if the write
+ * comes from an instruction other than MOV it is hard to do as well. If
+ * COLOROUT 0 is overwritten partially later, the marker is dropped again. */
+
+ ps->color0_mov = FALSE;
+ if (ins.handler_idx == WINED3DSIH_MOV)
+ {
+ /* Used later when the source register is read. */
+ color0_mov = TRUE;
+ }
+ }
+ /* Also drop the MOV marker if the source register is overwritten prior to the shader
+ * end
+ */
+ else if (dst_param.reg.type == WINED3DSPR_TEMP && dst_param.reg.idx == ps->color0_reg)
+ {
+ ps->color0_mov = FALSE;
+ }
+ }
+
+ /* Declare 1.x samplers implicitly, based on the destination reg. number. */
+ if (shader_version.major == 1
+ && (ins.handler_idx == WINED3DSIH_TEX
+ || ins.handler_idx == WINED3DSIH_TEXBEM
+ || ins.handler_idx == WINED3DSIH_TEXBEML
+ || ins.handler_idx == WINED3DSIH_TEXDP3TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x2TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x3SPEC
+ || ins.handler_idx == WINED3DSIH_TEXM3x3TEX
+ || ins.handler_idx == WINED3DSIH_TEXM3x3VSPEC
+ || ins.handler_idx == WINED3DSIH_TEXREG2AR
+ || ins.handler_idx == WINED3DSIH_TEXREG2GB
+ || ins.handler_idx == WINED3DSIH_TEXREG2RGB))
+ {
+ /* Fake sampler usage, only set reserved bit and type. */
+ DWORD sampler_code = dst_param.reg.idx;
+
+ TRACE("Setting fake 2D sampler for 1.x pixelshader.\n");
+ reg_maps->sampler_type[sampler_code] = WINED3DSTT_2D;
+
+ /* texbem is only valid with < 1.4 pixel shaders */
+ if (ins.handler_idx == WINED3DSIH_TEXBEM
+ || ins.handler_idx == WINED3DSIH_TEXBEML)
+ {
+ reg_maps->bumpmat |= 1 << dst_param.reg.idx;
+ if (ins.handler_idx == WINED3DSIH_TEXBEML)
+ {
+ reg_maps->luminanceparams |= 1 << dst_param.reg.idx;
+ }
+ }
+ }
+ else if (ins.handler_idx == WINED3DSIH_BEM)
+ {
+ reg_maps->bumpmat |= 1 << dst_param.reg.idx;
+ }
+ }
+
+ if (ins.handler_idx == WINED3DSIH_NRM) reg_maps->usesnrm = 1;
+ else if (ins.handler_idx == WINED3DSIH_DSY) reg_maps->usesdsy = 1;
+ else if (ins.handler_idx == WINED3DSIH_DSX) reg_maps->usesdsx = 1;
+ else if (ins.handler_idx == WINED3DSIH_TEXLDD) reg_maps->usestexldd = 1;
+ else if (ins.handler_idx == WINED3DSIH_TEXLDL) reg_maps->usestexldl = 1;
+ else if (ins.handler_idx == WINED3DSIH_MOVA) reg_maps->usesmova = 1;
+ else if (ins.handler_idx == WINED3DSIH_IFC) reg_maps->usesifc = 1;
+ else if (ins.handler_idx == WINED3DSIH_CALL) reg_maps->usescall = 1;
+
+ limit = ins.src_count + (ins.predicate ? 1 : 0);
+ for (i = 0; i < limit; ++i)
+ {
+ struct wined3d_shader_src_param src_param, src_rel_addr;
+ unsigned int count;
+
+ fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+ count = get_instr_extra_regcount(ins.handler_idx, i);
+
+ shader_record_register_usage(shader, reg_maps, &src_param.reg, shader_version.type);
+ while (count)
+ {
+ ++src_param.reg.idx;
+ shader_record_register_usage(shader, reg_maps, &src_param.reg, shader_version.type);
+ --count;
+ }
+
+ if (color0_mov)
+ {
+ IWineD3DPixelShaderImpl *ps = (IWineD3DPixelShaderImpl *)shader;
+ if (src_param.reg.type == WINED3DSPR_TEMP
+ && src_param.swizzle == WINED3DSP_NOSWIZZLE)
+ {
+ ps->color0_mov = TRUE;
+ ps->color0_reg = src_param.reg.idx;
+ }
+ }
+ }
+ }
+ }
+ reg_maps->loop_depth = max_loop_depth;
+
+ shader->baseShader.functionLength = ((const char *)ptr - (const char *)byte_code);
+
+ return WINED3D_OK;
+}
+
+unsigned int shader_find_free_input_register(const struct shader_reg_maps *reg_maps, unsigned int max)
+{
+ DWORD map = 1 << max;
+ map |= map - 1;
+ map &= reg_maps->shader_version.major < 3 ? ~reg_maps->texcoord : ~reg_maps->input_registers;
+
+ return wined3d_log2i(map);
+}
+
+static void shader_dump_decl_usage(const struct wined3d_shader_semantic *semantic,
+ const struct wined3d_shader_version *shader_version)
+{
+ TRACE("dcl");
+
+ if (semantic->reg.reg.type == WINED3DSPR_SAMPLER)
+ {
+ switch (semantic->sampler_type)
+ {
+ case WINED3DSTT_2D: TRACE("_2d"); break;
+ case WINED3DSTT_CUBE: TRACE("_cube"); break;
+ case WINED3DSTT_VOLUME: TRACE("_volume"); break;
+ default: TRACE("_unknown_ttype(0x%08x)", semantic->sampler_type);
+ }
+ }
+ else
+ {
+ /* Pixel shaders 3.0 don't have usage semantics. */
+ if (shader_version->major < 3 && shader_version->type == WINED3D_SHADER_TYPE_PIXEL) return;
+ else TRACE("_");
+
+ switch (semantic->usage)
+ {
+ case WINED3DDECLUSAGE_POSITION:
+ TRACE("position%u", semantic->usage_idx);
+ break;
+
+ case WINED3DDECLUSAGE_BLENDINDICES:
+ TRACE("blend");
+ break;
+
+ case WINED3DDECLUSAGE_BLENDWEIGHT:
+ TRACE("weight");
+ break;
+
+ case WINED3DDECLUSAGE_NORMAL:
+ TRACE("normal%u", semantic->usage_idx);
+ break;
+
+ case WINED3DDECLUSAGE_PSIZE:
+ TRACE("psize");
+ break;
+
+ case WINED3DDECLUSAGE_COLOR:
+ if (semantic->usage_idx == 0) TRACE("color");
+ else TRACE("specular%u", (semantic->usage_idx - 1));
+ break;
+
+ case WINED3DDECLUSAGE_TEXCOORD:
+ TRACE("texture%u", semantic->usage_idx);
+ break;
+
+ case WINED3DDECLUSAGE_TANGENT:
+ TRACE("tangent");
+ break;
+
+ case WINED3DDECLUSAGE_BINORMAL:
+ TRACE("binormal");
+ break;
+
+ case WINED3DDECLUSAGE_TESSFACTOR:
+ TRACE("tessfactor");
+ break;
+
+ case WINED3DDECLUSAGE_POSITIONT:
+ TRACE("positionT%u", semantic->usage_idx);
+ break;
+
+ case WINED3DDECLUSAGE_FOG:
+ TRACE("fog");
+ break;
+
+ case WINED3DDECLUSAGE_DEPTH:
+ TRACE("depth");
+ break;
+
+ case WINED3DDECLUSAGE_SAMPLE:
+ TRACE("sample");
+ break;
+
+ default:
+ FIXME("unknown_semantics(0x%08x)", semantic->usage);
+ }
+ }
+}
+
+static void shader_dump_register(const struct wined3d_shader_register *reg,
+ const struct wined3d_shader_version *shader_version)
+{
+ static const char * const rastout_reg_names[] = {"oPos", "oFog", "oPts"};
+ static const char * const misctype_reg_names[] = {"vPos", "vFace"};
+ UINT offset = reg->idx;
+
+ switch (reg->type)
+ {
+ case WINED3DSPR_TEMP:
+ TRACE("r");
+ break;
+
+ case WINED3DSPR_INPUT:
+ TRACE("v");
+ break;
+
+ case WINED3DSPR_CONST:
+ case WINED3DSPR_CONST2:
+ case WINED3DSPR_CONST3:
+ case WINED3DSPR_CONST4:
+ TRACE("c");
+ offset = shader_get_float_offset(reg->type, reg->idx);
+ break;
+
+ case WINED3DSPR_TEXTURE: /* vs: case WINED3DSPR_ADDR */
+ TRACE("%c", shader_version->type == WINED3D_SHADER_TYPE_PIXEL ? 't' : 'a');
+ break;
+
+ case WINED3DSPR_RASTOUT:
+ TRACE("%s", rastout_reg_names[reg->idx]);
+ break;
+
+ case WINED3DSPR_COLOROUT:
+ TRACE("oC");
+ break;
+
+ case WINED3DSPR_DEPTHOUT:
+ TRACE("oDepth");
+ break;
+
+ case WINED3DSPR_ATTROUT:
+ TRACE("oD");
+ break;
+
+ case WINED3DSPR_TEXCRDOUT:
+ /* Vertex shaders >= 3.0 use general purpose output registers
+ * (WINED3DSPR_OUTPUT), which can include an address token. */
+ if (shader_version->major >= 3) TRACE("o");
+ else TRACE("oT");
+ break;
+
+ case WINED3DSPR_CONSTINT:
+ TRACE("i");
+ break;
+
+ case WINED3DSPR_CONSTBOOL:
+ TRACE("b");
+ break;
+
+ case WINED3DSPR_LABEL:
+ TRACE("l");
+ break;
+
+ case WINED3DSPR_LOOP:
+ TRACE("aL");
+ break;
+
+ case WINED3DSPR_SAMPLER:
+ TRACE("s");
+ break;
+
+ case WINED3DSPR_MISCTYPE:
+ if (reg->idx > 1) FIXME("Unhandled misctype register %u.\n", reg->idx);
+ else TRACE("%s", misctype_reg_names[reg->idx]);
+ break;
+
+ case WINED3DSPR_PREDICATE:
+ TRACE("p");
+ break;
+
+ case WINED3DSPR_IMMCONST:
+ TRACE("l");
+ break;
+
+ case WINED3DSPR_CONSTBUFFER:
+ TRACE("cb");
+ break;
+
+ default:
+ TRACE("unhandled_rtype(%#x)", reg->type);
+ break;
+ }
+
+ if (reg->type == WINED3DSPR_IMMCONST)
+ {
+ TRACE("(");
+ switch (reg->immconst_type)
+ {
+ case WINED3D_IMMCONST_FLOAT:
+ TRACE("%.8e", *(const float *)reg->immconst_data);
+ break;
+
+ case WINED3D_IMMCONST_FLOAT4:
+ TRACE("%.8e, %.8e, %.8e, %.8e",
+ *(const float *)®->immconst_data[0], *(const float *)®->immconst_data[1],
+ *(const float *)®->immconst_data[2], *(const float *)®->immconst_data[3]);
+ break;
+
+ default:
+ TRACE("", reg->immconst_type);
+ break;
+ }
+ TRACE(")");
+ }
+ else if (reg->type != WINED3DSPR_RASTOUT && reg->type != WINED3DSPR_MISCTYPE)
+ {
+ if (reg->array_idx != ~0U)
+ {
+ TRACE("%u[%u", offset, reg->array_idx);
+ if (reg->rel_addr)
+ {
+ TRACE(" + ");
+ shader_dump_src_param(reg->rel_addr, shader_version);
+ }
+ TRACE("]");
+ }
+ else
+ {
+ if (reg->rel_addr)
+ {
+ TRACE("[");
+ shader_dump_src_param(reg->rel_addr, shader_version);
+ TRACE(" + ");
+ }
+ TRACE("%u", offset);
+ if (reg->rel_addr) TRACE("]");
+ }
+ }
+}
+
+void shader_dump_dst_param(const struct wined3d_shader_dst_param *param,
+ const struct wined3d_shader_version *shader_version)
+{
+ DWORD write_mask = param->write_mask;
+
+ shader_dump_register(¶m->reg, shader_version);
+
+ if (write_mask != WINED3DSP_WRITEMASK_ALL)
+ {
+ static const char *write_mask_chars = "xyzw";
+
+ TRACE(".");
+ if (write_mask & WINED3DSP_WRITEMASK_0) TRACE("%c", write_mask_chars[0]);
+ if (write_mask & WINED3DSP_WRITEMASK_1) TRACE("%c", write_mask_chars[1]);
+ if (write_mask & WINED3DSP_WRITEMASK_2) TRACE("%c", write_mask_chars[2]);
+ if (write_mask & WINED3DSP_WRITEMASK_3) TRACE("%c", write_mask_chars[3]);
+ }
+}
+
+void shader_dump_src_param(const struct wined3d_shader_src_param *param,
+ const struct wined3d_shader_version *shader_version)
+{
+ DWORD src_modifier = param->modifiers;
+ DWORD swizzle = param->swizzle;
+
+ if (src_modifier == WINED3DSPSM_NEG
+ || src_modifier == WINED3DSPSM_BIASNEG
+ || src_modifier == WINED3DSPSM_SIGNNEG
+ || src_modifier == WINED3DSPSM_X2NEG
+ || src_modifier == WINED3DSPSM_ABSNEG)
+ TRACE("-");
+ else if (src_modifier == WINED3DSPSM_COMP)
+ TRACE("1-");
+ else if (src_modifier == WINED3DSPSM_NOT)
+ TRACE("!");
+
+ if (src_modifier == WINED3DSPSM_ABS || src_modifier == WINED3DSPSM_ABSNEG)
+ TRACE("abs(");
+
+ shader_dump_register(¶m->reg, shader_version);
+
+ if (src_modifier)
+ {
+ switch (src_modifier)
+ {
+ case WINED3DSPSM_NONE: break;
+ case WINED3DSPSM_NEG: break;
+ case WINED3DSPSM_NOT: break;
+ case WINED3DSPSM_BIAS: TRACE("_bias"); break;
+ case WINED3DSPSM_BIASNEG: TRACE("_bias"); break;
+ case WINED3DSPSM_SIGN: TRACE("_bx2"); break;
+ case WINED3DSPSM_SIGNNEG: TRACE("_bx2"); break;
+ case WINED3DSPSM_COMP: break;
+ case WINED3DSPSM_X2: TRACE("_x2"); break;
+ case WINED3DSPSM_X2NEG: TRACE("_x2"); break;
+ case WINED3DSPSM_DZ: TRACE("_dz"); break;
+ case WINED3DSPSM_DW: TRACE("_dw"); break;
+ case WINED3DSPSM_ABSNEG: TRACE(")"); break;
+ case WINED3DSPSM_ABS: TRACE(")"); break;
+ default: TRACE("_unknown_modifier(%#x)", src_modifier);
+ }
+ }
+
+ if (swizzle != WINED3DSP_NOSWIZZLE)
+ {
+ static const char *swizzle_chars = "xyzw";
+ DWORD swizzle_x = swizzle & 0x03;
+ DWORD swizzle_y = (swizzle >> 2) & 0x03;
+ DWORD swizzle_z = (swizzle >> 4) & 0x03;
+ DWORD swizzle_w = (swizzle >> 6) & 0x03;
+
+ if (swizzle_x == swizzle_y
+ && swizzle_x == swizzle_z
+ && swizzle_x == swizzle_w)
+ {
+ TRACE(".%c", swizzle_chars[swizzle_x]);
+ }
+ else
+ {
+ TRACE(".%c%c%c%c", swizzle_chars[swizzle_x], swizzle_chars[swizzle_y],
+ swizzle_chars[swizzle_z], swizzle_chars[swizzle_w]);
+ }
+ }
+}
+
+/* Shared code in order to generate the bulk of the shader string.
+ * NOTE: A description of how to parse tokens can be found on MSDN. */
+void shader_generate_main(IWineD3DBaseShader *iface, struct wined3d_shader_buffer *buffer,
+ const shader_reg_maps *reg_maps, const DWORD *byte_code, void *backend_ctx)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+ IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)shader->baseShader.device;
+ const struct wined3d_shader_frontend *fe = shader->baseShader.frontend;
+ void *fe_data = shader->baseShader.frontend_data;
+ struct wined3d_shader_src_param src_rel_addr[4];
+ struct wined3d_shader_src_param src_param[4];
+ struct wined3d_shader_version shader_version;
+ struct wined3d_shader_src_param dst_rel_addr;
+ struct wined3d_shader_dst_param dst_param;
+ struct wined3d_shader_instruction ins;
+ struct wined3d_shader_context ctx;
+ const DWORD *ptr = byte_code;
+ DWORD i;
+
+ /* Initialize current parsing state. */
+ ctx.shader = iface;
+ ctx.gl_info = &device->adapter->gl_info;
+ ctx.reg_maps = reg_maps;
+ ctx.buffer = buffer;
+ ctx.backend_data = backend_ctx;
+
+ ins.ctx = &ctx;
+ ins.dst = &dst_param;
+ ins.src = src_param;
+ shader->baseShader.parse_state.current_row = 0;
+
+ fe->shader_read_header(fe_data, &ptr, &shader_version);
+
+ while (!fe->shader_is_end(fe_data, &ptr))
+ {
+ const char *comment;
+ UINT comment_size;
+ UINT param_size;
+
+ /* Skip comment tokens. */
+ fe->shader_read_comment(&ptr, &comment, &comment_size);
+ if (comment) continue;
+
+ /* Read opcode. */
+ fe->shader_read_opcode(fe_data, &ptr, &ins, ¶m_size);
+
+ /* Unknown opcode and its parameters. */
+ if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+ {
+ TRACE("Skipping unrecognized instruction.\n");
+ ptr += param_size;
+ continue;
+ }
+
+ /* Nothing to do. */
+ if (ins.handler_idx == WINED3DSIH_DCL
+ || ins.handler_idx == WINED3DSIH_NOP
+ || ins.handler_idx == WINED3DSIH_DEF
+ || ins.handler_idx == WINED3DSIH_DEFI
+ || ins.handler_idx == WINED3DSIH_DEFB
+ || ins.handler_idx == WINED3DSIH_PHASE)
+ {
+ ptr += param_size;
+ continue;
+ }
+
+ /* Destination token */
+ if (ins.dst_count) fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+
+ /* Predication token */
+ if (ins.predicate) ins.predicate = *ptr++;
+
+ /* Other source tokens */
+ for (i = 0; i < ins.src_count; ++i)
+ {
+ fe->shader_read_src_param(fe_data, &ptr, &src_param[i], &src_rel_addr[i]);
+ }
+
+ /* Call appropriate function for output target */
+ device->shader_backend->shader_handle_instruction(&ins);
+ }
+}
+
+static void shader_dump_ins_modifiers(const struct wined3d_shader_dst_param *dst)
+{
+ DWORD mmask = dst->modifiers;
+
+ switch (dst->shift)
+ {
+ case 0: break;
+ case 13: TRACE("_d8"); break;
+ case 14: TRACE("_d4"); break;
+ case 15: TRACE("_d2"); break;
+ case 1: TRACE("_x2"); break;
+ case 2: TRACE("_x4"); break;
+ case 3: TRACE("_x8"); break;
+ default: TRACE("_unhandled_shift(%d)", dst->shift); break;
+ }
+
+ if (mmask & WINED3DSPDM_SATURATE) TRACE("_sat");
+ if (mmask & WINED3DSPDM_PARTIALPRECISION) TRACE("_pp");
+ if (mmask & WINED3DSPDM_MSAMPCENTROID) TRACE("_centroid");
+
+ mmask &= ~(WINED3DSPDM_SATURATE | WINED3DSPDM_PARTIALPRECISION | WINED3DSPDM_MSAMPCENTROID);
+ if (mmask) FIXME("_unrecognized_modifier(%#x)", mmask);
+}
+
+static void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, const DWORD *byte_code)
+{
+ struct wined3d_shader_version shader_version;
+ const DWORD *ptr = byte_code;
+ const char *type_prefix;
+ DWORD i;
+
+ TRACE("Parsing %p.\n", byte_code);
+
+ fe->shader_read_header(fe_data, &ptr, &shader_version);
+
+ switch (shader_version.type)
+ {
+ case WINED3D_SHADER_TYPE_VERTEX:
+ type_prefix = "vs";
+ break;
+
+ case WINED3D_SHADER_TYPE_GEOMETRY:
+ type_prefix = "gs";
+ break;
+
+ case WINED3D_SHADER_TYPE_PIXEL:
+ type_prefix = "ps";
+ break;
+
+ default:
+ FIXME("Unhandled shader type %#x.\n", shader_version.type);
+ type_prefix = "unknown";
+ break;
+ }
+
+ TRACE("%s_%u_%u\n", type_prefix, shader_version.major, shader_version.minor);
+
+ while (!fe->shader_is_end(fe_data, &ptr))
+ {
+ struct wined3d_shader_instruction ins;
+ const char *comment;
+ UINT comment_size;
+ UINT param_size;
+
+ /* comment */
+ fe->shader_read_comment(&ptr, &comment, &comment_size);
+ if (comment)
+ {
+ if (comment_size > 4 && *(const DWORD *)comment == WINEMAKEFOURCC('T', 'E', 'X', 'T'))
+ {
+ const char *end = comment + comment_size;
+ const char *ptr = comment + 4;
+ const char *line = ptr;
+
+ TRACE("// TEXT\n");
+ while (ptr != end)
+ {
+ if (*ptr == '\n')
+ {
+ UINT len = ptr - line;
+ if (len && *(ptr - 1) == '\r') --len;
+ TRACE("// %s\n", debugstr_an(line, len));
+ line = ++ptr;
+ }
+ else ++ptr;
+ }
+ if (line != ptr) TRACE("// %s\n", debugstr_an(line, ptr - line));
+ }
+ else TRACE("// %s\n", debugstr_an(comment, comment_size));
+ continue;
+ }
+
+ fe->shader_read_opcode(fe_data, &ptr, &ins, ¶m_size);
+ if (ins.handler_idx == WINED3DSIH_TABLE_SIZE)
+ {
+ TRACE("Skipping unrecognized instruction.\n");
+ ptr += param_size;
+ continue;
+ }
+
+ if (ins.handler_idx == WINED3DSIH_DCL)
+ {
+ struct wined3d_shader_semantic semantic;
+
+ fe->shader_read_semantic(&ptr, &semantic);
+
+ shader_dump_decl_usage(&semantic, &shader_version);
+ shader_dump_ins_modifiers(&semantic.reg);
+ TRACE(" ");
+ shader_dump_dst_param(&semantic.reg, &shader_version);
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEF)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ TRACE("def c%u = %f, %f, %f, %f", shader_get_float_offset(dst.reg.type, dst.reg.idx),
+ *(const float *)(ptr),
+ *(const float *)(ptr + 1),
+ *(const float *)(ptr + 2),
+ *(const float *)(ptr + 3));
+ ptr += 4;
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEFI)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ TRACE("defi i%u = %d, %d, %d, %d", dst.reg.idx,
+ *(ptr),
+ *(ptr + 1),
+ *(ptr + 2),
+ *(ptr + 3));
+ ptr += 4;
+ }
+ else if (ins.handler_idx == WINED3DSIH_DEFB)
+ {
+ struct wined3d_shader_src_param rel_addr;
+ struct wined3d_shader_dst_param dst;
+
+ fe->shader_read_dst_param(fe_data, &ptr, &dst, &rel_addr);
+
+ TRACE("defb b%u = %s", dst.reg.idx, *ptr ? "true" : "false");
+ ++ptr;
+ }
+ else
+ {
+ struct wined3d_shader_src_param dst_rel_addr, src_rel_addr;
+ struct wined3d_shader_dst_param dst_param;
+ struct wined3d_shader_src_param src_param;
+
+ if (ins.dst_count)
+ {
+ fe->shader_read_dst_param(fe_data, &ptr, &dst_param, &dst_rel_addr);
+ }
+
+ /* Print out predication source token first - it follows
+ * the destination token. */
+ if (ins.predicate)
+ {
+ fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+ TRACE("(");
+ shader_dump_src_param(&src_param, &shader_version);
+ TRACE(") ");
+ }
+
+ /* PixWin marks instructions with the coissue flag with a '+' */
+ if (ins.coissue) TRACE("+");
+
+ TRACE("%s", shader_opcode_names[ins.handler_idx]);
+
+ if (ins.handler_idx == WINED3DSIH_IFC
+ || ins.handler_idx == WINED3DSIH_BREAKC)
+ {
+ switch (ins.flags)
+ {
+ case COMPARISON_GT: TRACE("_gt"); break;
+ case COMPARISON_EQ: TRACE("_eq"); break;
+ case COMPARISON_GE: TRACE("_ge"); break;
+ case COMPARISON_LT: TRACE("_lt"); break;
+ case COMPARISON_NE: TRACE("_ne"); break;
+ case COMPARISON_LE: TRACE("_le"); break;
+ default: TRACE("_(%u)", ins.flags);
+ }
+ }
+ else if (ins.handler_idx == WINED3DSIH_TEX
+ && shader_version.major >= 2
+ && (ins.flags & WINED3DSI_TEXLD_PROJECT))
+ {
+ TRACE("p");
+ }
+
+ /* We already read the destination token, print it. */
+ if (ins.dst_count)
+ {
+ shader_dump_ins_modifiers(&dst_param);
+ TRACE(" ");
+ shader_dump_dst_param(&dst_param, &shader_version);
+ }
+
+ /* Other source tokens */
+ for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i)
+ {
+ fe->shader_read_src_param(fe_data, &ptr, &src_param, &src_rel_addr);
+ TRACE(!i ? " " : ", ");
+ shader_dump_src_param(&src_param, &shader_version);
+ }
+ }
+ TRACE("\n");
+ }
+}
+
+static void shader_cleanup(IWineD3DBaseShader *iface)
+{
+ IWineD3DBaseShaderImpl *shader = (IWineD3DBaseShaderImpl *)iface;
+
+ ((IWineD3DDeviceImpl *)shader->baseShader.device)->shader_backend->shader_destroy(iface);
+ HeapFree(GetProcessHeap(), 0, shader->baseShader.reg_maps.constf);
+ HeapFree(GetProcessHeap(), 0, shader->baseShader.function);
+ shader_delete_constant_list(&shader->baseShader.constantsF);
+ shader_delete_constant_list(&shader->baseShader.constantsB);
+ shader_delete_constant_list(&shader->baseShader.constantsI);
+ list_remove(&shader->baseShader.shader_list_entry);
+
+ if (shader->baseShader.frontend && shader->baseShader.frontend_data)
+ {
+ shader->baseShader.frontend->shader_free(shader->baseShader.frontend_data);
+ }
+}
+
+static void shader_none_handle_instruction(const struct wined3d_shader_instruction *ins) {}
+static void shader_none_select(const struct wined3d_context *context, BOOL usePS, BOOL useVS) {}
+static void shader_none_select_depth_blt(IWineD3DDevice *iface, enum tex_types tex_type) {}
+static void shader_none_deselect_depth_blt(IWineD3DDevice *iface) {}
+static void shader_none_update_float_vertex_constants(IWineD3DDevice *iface, UINT start, UINT count) {}
+static void shader_none_update_float_pixel_constants(IWineD3DDevice *iface, UINT start, UINT count) {}
+static void shader_none_load_constants(const struct wined3d_context *context, char usePS, char useVS) {}
+static void shader_none_load_np2fixup_constants(IWineD3DDevice *iface, char usePS, char useVS) {}
+static void shader_none_destroy(IWineD3DBaseShader *iface) {}
+static HRESULT shader_none_alloc(IWineD3DDevice *iface) {return WINED3D_OK;}
+static void shader_none_free(IWineD3DDevice *iface) {}
+static BOOL shader_none_dirty_const(IWineD3DDevice *iface) {return FALSE;}
+
+static void shader_none_get_caps(const struct wined3d_gl_info *gl_info, struct shader_caps *caps)
+{
+ /* Set the shader caps to 0 for the none shader backend */
+ caps->VertexShaderVersion = 0;
+ caps->PixelShaderVersion = 0;
+ caps->PixelShader1xMaxValue = 0.0f;
+}
+
+static BOOL shader_none_color_fixup_supported(struct color_fixup_desc fixup)
+{
+ if (TRACE_ON(d3d_shader) && TRACE_ON(d3d))
+ {
+ TRACE("Checking support for fixup:\n");
+ dump_color_fixup_desc(fixup);
+ }
+
+ /* Faked to make some apps happy. */
+ if (!is_complex_fixup(fixup))
+ {
+ TRACE("[OK]\n");
+ return TRUE;
+ }
+
+ TRACE("[FAILED]\n");
+ return FALSE;
+}
+
+const shader_backend_t none_shader_backend = {
+ shader_none_handle_instruction,
+ shader_none_select,
+ shader_none_select_depth_blt,
+ shader_none_deselect_depth_blt,
+ shader_none_update_float_vertex_constants,
+ shader_none_update_float_pixel_constants,
+ shader_none_load_constants,
+ shader_none_load_np2fixup_constants,
+ shader_none_destroy,
+ shader_none_alloc,
+ shader_none_free,
+ shader_none_dirty_const,
+ shader_none_get_caps,
+ shader_none_color_fixup_supported,
+};
static void shader_get_parent(IWineD3DBaseShaderImpl *shader, IUnknown **parent)
{
diff --git a/reactos/dll/directx/wine/wined3d/shader_sm1.c b/reactos/dll/directx/wine/wined3d/shader_sm1.c
index 64876b38032..aa1da56c5ba 100644
--- a/reactos/dll/directx/wine/wined3d/shader_sm1.c
+++ b/reactos/dll/directx/wine/wined3d/shader_sm1.c
@@ -641,9 +641,10 @@ static void shader_sm1_read_semantic(const DWORD **ptr, struct wined3d_shader_se
shader_parse_dst_param(dst_token, NULL, &semantic->reg);
}
-static void shader_sm1_read_comment(const DWORD **ptr, const char **comment)
+static void shader_sm1_read_comment(const DWORD **ptr, const char **comment, UINT *comment_size)
{
DWORD token = **ptr;
+ UINT size;
if ((token & WINED3DSI_OPCODE_MASK) != WINED3D_SM1_OP_COMMENT)
{
@@ -651,8 +652,10 @@ static void shader_sm1_read_comment(const DWORD **ptr, const char **comment)
return;
}
+ size = (token & WINED3DSI_COMMENTSIZE_MASK) >> WINED3DSI_COMMENTSIZE_SHIFT;
*comment = (const char *)++(*ptr);
- *ptr += (token & WINED3DSI_COMMENTSIZE_MASK) >> WINED3DSI_COMMENTSIZE_SHIFT;
+ *comment_size = size * sizeof(DWORD);
+ *ptr += size;
}
static BOOL shader_sm1_is_end(void *data, const DWORD **ptr)
diff --git a/reactos/dll/directx/wine/wined3d/shader_sm4.c b/reactos/dll/directx/wine/wined3d/shader_sm4.c
index 91aa882c888..b4637904f10 100644
--- a/reactos/dll/directx/wine/wined3d/shader_sm4.c
+++ b/reactos/dll/directx/wine/wined3d/shader_sm4.c
@@ -49,10 +49,20 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
enum wined3d_sm4_opcode
{
WINED3D_SM4_OP_ADD = 0x00,
+ WINED3D_SM4_OP_BREAK = 0x02,
+ WINED3D_SM4_OP_BREAKC = 0x03,
+ WINED3D_SM4_OP_CUT = 0x09,
WINED3D_SM4_OP_DP3 = 0x10,
WINED3D_SM4_OP_DP4 = 0x11,
+ WINED3D_SM4_OP_EMIT = 0x13,
+ WINED3D_SM4_OP_ENDIF = 0x15,
+ WINED3D_SM4_OP_ENDLOOP = 0x16,
WINED3D_SM4_OP_EXP = 0x19,
+ WINED3D_SM4_OP_IADD = 0x1e,
+ WINED3D_SM4_OP_IF = 0x1f,
+ WINED3D_SM4_OP_IGE = 0x21,
WINED3D_SM4_OP_LOG = 0x2f,
+ WINED3D_SM4_OP_LT = 0x31,
WINED3D_SM4_OP_MIN = 0x33,
WINED3D_SM4_OP_MAX = 0x34,
WINED3D_SM4_OP_MOV = 0x36,
@@ -102,10 +112,20 @@ struct sysval_map
static const struct wined3d_sm4_opcode_info opcode_table[] =
{
{WINED3D_SM4_OP_ADD, WINED3DSIH_ADD, 1, 2},
+ {WINED3D_SM4_OP_BREAK, WINED3DSIH_BREAK, 0, 0},
+ {WINED3D_SM4_OP_BREAKC, WINED3DSIH_BREAKP, 0, 1},
+ {WINED3D_SM4_OP_CUT, WINED3DSIH_CUT, 0, 0},
{WINED3D_SM4_OP_DP3, WINED3DSIH_DP3, 1, 2},
{WINED3D_SM4_OP_DP4, WINED3DSIH_DP4, 1, 2},
+ {WINED3D_SM4_OP_EMIT, WINED3DSIH_EMIT, 0, 0},
+ {WINED3D_SM4_OP_ENDIF, WINED3DSIH_ENDIF, 0, 0},
+ {WINED3D_SM4_OP_ENDLOOP,WINED3DSIH_ENDLOOP, 0, 0},
{WINED3D_SM4_OP_EXP, WINED3DSIH_EXP, 1, 1},
+ {WINED3D_SM4_OP_IADD, WINED3DSIH_IADD, 1, 2},
+ {WINED3D_SM4_OP_IF, WINED3DSIH_IF, 0, 1},
+ {WINED3D_SM4_OP_IGE, WINED3DSIH_IGE, 1, 2},
{WINED3D_SM4_OP_LOG, WINED3DSIH_LOG, 1, 1},
+ {WINED3D_SM4_OP_LT, WINED3DSIH_LT, 1, 2},
{WINED3D_SM4_OP_MIN, WINED3DSIH_MIN, 1, 2},
{WINED3D_SM4_OP_MAX, WINED3DSIH_MAX, 1, 2},
{WINED3D_SM4_OP_MOV, WINED3DSIH_MOV, 1, 1},
@@ -386,9 +406,9 @@ static void shader_sm4_read_semantic(const DWORD **ptr, struct wined3d_shader_se
FIXME("ptr %p, semantic %p stub!\n", ptr, semantic);
}
-static void shader_sm4_read_comment(const DWORD **ptr, const char **comment)
+static void shader_sm4_read_comment(const DWORD **ptr, const char **comment, UINT *comment_size)
{
- FIXME("ptr %p, comment %p stub!\n", ptr, comment);
+ FIXME("ptr %p, comment %p, comment_size %p stub!\n", ptr, comment, comment_size);
*comment = NULL;
}
diff --git a/reactos/dll/directx/wine/wined3d/state.c b/reactos/dll/directx/wine/wined3d/state.c
index adb426b904b..5efe069bb19 100644
--- a/reactos/dll/directx/wine/wined3d/state.c
+++ b/reactos/dll/directx/wine/wined3d/state.c
@@ -584,6 +584,10 @@ static void state_clipping(DWORD state, IWineD3DStateBlockImpl *stateblock, stru
glEnable(GL_DEPTH_CLAMP);
checkGLcall("glEnable(GL_DEPTH_CLAMP)");
}
+ else
+ {
+ FIXME("Clipping disabled, but ARB_depth_clamp isn't supported.\n");
+ }
}
if (enable & WINED3DCLIPPLANE0) { glEnable(GL_CLIP_PLANE0); checkGLcall("glEnable(clip plane 0)"); }
@@ -3523,7 +3527,6 @@ static void sampler(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wine
if(stateblock->textures[sampler]) {
BOOL srgb = stateblock->samplerState[sampler][WINED3DSAMP_SRGBTEXTURE];
IWineD3DBaseTextureImpl *tex_impl = (IWineD3DBaseTextureImpl *) stateblock->textures[sampler];
- tex_impl->baseTexture.internal_preload(stateblock->textures[sampler], srgb ? SRGB_SRGB : SRGB_RGB);
IWineD3DBaseTexture_BindTexture(stateblock->textures[sampler], srgb);
basetexture_apply_state_changes(stateblock->textures[sampler],
stateblock->textureState[sampler], stateblock->samplerState[sampler], gl_info);
@@ -3597,9 +3600,9 @@ void apply_pixelshader(DWORD state, IWineD3DStateBlockImpl *stateblock, struct w
}
} else {
/* Disabled the pixel shader - color ops weren't applied
- * while it was enabled, so re-apply them.
- */
- for(i=0; i < MAX_TEXTURES; i++) {
+ * while it was enabled, so re-apply them. */
+ for (i = 0; i < context->gl_info->limits.texture_stages; ++i)
+ {
if(!isStateDirty(context, STATE_TEXTURESTAGE(i, WINED3DTSS_COLOROP))) {
device->StateTable[STATE_TEXTURESTAGE(i, WINED3DTSS_COLOROP)].apply
(STATE_TEXTURESTAGE(i, WINED3DTSS_COLOROP), stateblock, context);
@@ -3880,62 +3883,18 @@ static void transform_projection(DWORD state, IWineD3DStateBlockImpl *stateblock
glLoadIdentity();
checkGLcall("glLoadIdentity");
- if(context->last_was_rhw) {
- double X, Y, height, width, minZ, maxZ;
+ if (context->last_was_rhw)
+ {
+ double x = stateblock->viewport.X;
+ double y = stateblock->viewport.Y;
+ double w = stateblock->viewport.Width;
+ double h = stateblock->viewport.Height;
- X = stateblock->viewport.X;
- Y = stateblock->viewport.Y;
- height = stateblock->viewport.Height;
- width = stateblock->viewport.Width;
- minZ = stateblock->viewport.MinZ;
- maxZ = stateblock->viewport.MaxZ;
-
- if (!stateblock->device->untransformed)
- {
- /* Transformed vertices are supposed to bypass the whole transform pipeline including
- * frustum clipping. This can't be done in opengl, so this code adjusts the Z range to
- * suppress depth clipping. This can be done because it is an orthogonal projection and
- * the Z coordinate does not affect the size of the primitives. Half Life 1 and Prince of
- * Persia 3D need this.
- *
- * Note that using minZ and maxZ here doesn't entirely fix the problem, since view frustum
- * clipping is still enabled, but it seems to fix it for all apps tested so far. A minor
- * problem can be witnessed in half-life 1 engine based games, the weapon is clipped close
- * to the viewer.
- *
- * Also note that this breaks z comparison against z values filled in with clear,
- * but no app depending on that and disabled clipping has been found yet. Comparing
- * primitives against themselves works, so the Z buffer is still intact for normal hidden
- * surface removal.
- *
- * We could disable clipping entirely by setting the near to infinity and far to -infinity,
- * but this would break Z buffer operation. Raising the range to something less than
- * infinity would help a bit at the cost of Z precision, but it wouldn't eliminate the
- * problem either.
- */
- TRACE("Calling glOrtho with %f, %f, %f, %f\n", width, height, -minZ, -maxZ);
- if (context->render_offscreen)
- {
- glOrtho(X, X + width, -Y, -Y - height, -minZ, -maxZ);
- } else {
- glOrtho(X, X + width, Y + height, Y, -minZ, -maxZ);
- }
- } else {
- /* If the app mixes transformed and untransformed primitives we can't use the coordinate system
- * trick above because this would mess up transformed and untransformed Z order. Pass the z position
- * unmodified to opengl.
- *
- * If the app depends on mixed types and disabled clipping we're out of luck without a pipeline
- * replacement shader.
- */
- TRACE("Calling glOrtho with %f, %f, %f, %f\n", width, height, 1.0, -1.0);
- if (context->render_offscreen)
- {
- glOrtho(X, X + width, -Y, -Y - height, 0.0, -1.0);
- } else {
- glOrtho(X, X + width, Y + height, Y, 0.0, -1.0);
- }
- }
+ TRACE("Calling glOrtho with x %.8e, y %.8e, w %.8e, h %.8e.\n", x, y, w, h);
+ if (context->render_offscreen)
+ glOrtho(x, x + w, -y, -y - h, 0.0, -1.0);
+ else
+ glOrtho(x, x + w, y + h, y, 0.0, -1.0);
checkGLcall("glOrtho");
/* Window Coord 0 is the middle of the first pixel, so translate by 1/2 pixels */
@@ -4167,7 +4126,7 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock,
GL_EXTCALL(glVertexAttrib4NubvARB(i, ptr));
break;
case WINED3DFMT_B8G8R8A8_UNORM:
- if (gl_info->supported[EXT_VERTEX_ARRAY_BGRA])
+ if (gl_info->supported[ARB_VERTEX_ARRAY_BGRA])
{
const DWORD *src = (const DWORD *)ptr;
DWORD c = *src & 0xff00ff00;
@@ -4479,87 +4438,11 @@ static void loadVertexData(const struct wined3d_context *context, IWineD3DStateB
loadTexCoords(context, stateblock, si, &curVBO);
}
-static inline void drawPrimitiveTraceDataLocations(const struct wined3d_stream_info *dataLocations)
-{
- /* Dump out what parts we have supplied */
- TRACE("Strided Data:\n");
- TRACE_STRIDED((dataLocations), WINED3D_FFP_POSITION);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_BLENDWEIGHT);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_BLENDINDICES);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_NORMAL);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_PSIZE);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_DIFFUSE);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_SPECULAR);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_TEXCOORD0);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_TEXCOORD1);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_TEXCOORD2);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_TEXCOORD3);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_TEXCOORD4);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_TEXCOORD5);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_TEXCOORD6);
- TRACE_STRIDED((dataLocations), WINED3D_FFP_TEXCOORD7);
-}
-
static void streamsrc(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wined3d_context *context)
{
- const struct wined3d_gl_info *gl_info = context->gl_info;
IWineD3DDeviceImpl *device = stateblock->device;
- BOOL fixup = FALSE;
- struct wined3d_stream_info *dataLocations = &device->strided_streams;
- BOOL useVertexShaderFunction;
- BOOL load_numbered = FALSE;
- BOOL load_named = FALSE;
-
- useVertexShaderFunction = (device->vs_selected_mode != SHADER_NONE && stateblock->vertexShader) ? TRUE : FALSE;
-
- if(device->up_strided) {
- /* Note: this is a ddraw fixed-function code path */
- TRACE("================ Strided Input ===================\n");
- device_stream_info_from_strided(gl_info, device->up_strided, dataLocations);
-
- if(TRACE_ON(d3d)) {
- drawPrimitiveTraceDataLocations(dataLocations);
- }
- } else {
- /* Note: This is a fixed function or shader codepath.
- * This means it must handle both types of strided data.
- * Shaders must go through here to zero the strided data, even if they
- * don't set any declaration at all
- */
- TRACE("================ Vertex Declaration ===================\n");
- device_stream_info_from_declaration(device, useVertexShaderFunction, dataLocations, &fixup);
- }
-
- if (dataLocations->position_transformed) useVertexShaderFunction = FALSE;
-
- if(useVertexShaderFunction) {
- if(((IWineD3DVertexDeclarationImpl *) stateblock->vertexDecl)->half_float_conv_needed && !fixup) {
- TRACE("Using drawStridedSlow with vertex shaders for FLOAT16 conversion\n");
- device->useDrawStridedSlow = TRUE;
- } else {
- load_numbered = TRUE;
- device->useDrawStridedSlow = FALSE;
- }
- }
- else
- {
- WORD slow_mask = (1 << WINED3D_FFP_PSIZE);
- slow_mask |= -!gl_info->supported[EXT_VERTEX_ARRAY_BGRA]
- & ((1 << WINED3D_FFP_DIFFUSE) | (1 << WINED3D_FFP_SPECULAR));
-
- if (fixup || (!dataLocations->position_transformed
- && !(dataLocations->use_map & slow_mask)))
- {
- /* Load the vertex data using named arrays */
- load_named = TRUE;
- device->useDrawStridedSlow = FALSE;
- }
- else
- {
- TRACE("Not loading vertex data\n");
- device->useDrawStridedSlow = TRUE;
- }
- }
+ BOOL load_numbered = use_vs(stateblock) && !device->useDrawStridedSlow;
+ BOOL load_named = !use_vs(stateblock) && !device->useDrawStridedSlow;
if (context->numberedArraysLoaded && !load_numbered)
{
@@ -4576,13 +4459,13 @@ static void streamsrc(DWORD state, IWineD3DStateBlockImpl *stateblock, struct wi
if (load_numbered)
{
TRACE("Loading numbered arrays\n");
- loadNumberedArrays(stateblock, dataLocations, context);
+ loadNumberedArrays(stateblock, &device->strided_streams, context);
context->numberedArraysLoaded = TRUE;
}
else if (load_named)
{
TRACE("Loading vertex data\n");
- loadVertexData(context, stateblock, dataLocations);
+ loadVertexData(context, stateblock, &device->strided_streams);
context->namedArraysLoaded = TRUE;
}
}
@@ -5634,8 +5517,7 @@ static const struct StateEntryTemplate ffp_fragmentstate_template[] = {
/* Context activation is done by the caller. */
static void ffp_enable(IWineD3DDevice *iface, BOOL enable) { }
-static void ffp_fragment_get_caps(WINED3DDEVTYPE devtype,
- const struct wined3d_gl_info *gl_info, struct fragment_caps *pCaps)
+static void ffp_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *pCaps)
{
pCaps->TextureOpCaps = WINED3DTEXOPCAPS_ADD |
WINED3DTEXOPCAPS_ADDSIGNED |
@@ -5670,7 +5552,7 @@ static void ffp_fragment_get_caps(WINED3DDEVTYPE devtype,
if (gl_info->supported[ARB_TEXTURE_ENV_DOT3])
pCaps->TextureOpCaps |= WINED3DTEXOPCAPS_DOTPRODUCT3;
- pCaps->MaxTextureBlendStages = gl_info->limits.texture_stages;
+ pCaps->MaxTextureBlendStages = gl_info->limits.textures;
pCaps->MaxSimultaneousTextures = gl_info->limits.textures;
}
@@ -5725,6 +5607,43 @@ static void multistate_apply_3(DWORD state, IWineD3DStateBlockImpl *stateblock,
stateblock->device->multistate_funcs[state][2](state, stateblock, context);
}
+static void prune_invalid_states(struct StateEntry *state_table, const struct wined3d_gl_info *gl_info)
+{
+ unsigned int start, last, i;
+
+ start = STATE_TEXTURESTAGE(gl_info->limits.texture_stages, 0);
+ last = STATE_TEXTURESTAGE(MAX_TEXTURES - 1, WINED3D_HIGHEST_TEXTURE_STATE);
+ for (i = start; i <= last; ++i)
+ {
+ state_table[i].representative = 0;
+ state_table[i].apply = state_undefined;
+ }
+
+ start = STATE_TRANSFORM(WINED3DTS_TEXTURE0 + gl_info->limits.texture_stages);
+ last = STATE_TRANSFORM(WINED3DTS_TEXTURE0 + MAX_TEXTURES - 1);
+ for (i = start; i <= last; ++i)
+ {
+ state_table[i].representative = 0;
+ state_table[i].apply = state_undefined;
+ }
+}
+
+static void validate_state_table(struct StateEntry *state_table)
+{
+ unsigned int i;
+
+ for (i = 0; i < STATE_HIGHEST + 1; ++i)
+ {
+ DWORD rep = state_table[i].representative;
+ if (rep && !state_table[rep].representative)
+ {
+ ERR("State %s (%#x) has invalid representative %s (%#x).\n",
+ debug_d3dstate(i), i, debug_d3dstate(rep), rep);
+ state_table[i].representative = 0;
+ }
+ }
+}
+
HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_multistate_funcs,
const struct wined3d_gl_info *gl_info, const struct StateEntryTemplate *vertex,
const struct fragment_pipeline *fragment, const struct StateEntryTemplate *misc)
@@ -5824,6 +5743,9 @@ HRESULT compile_state_table(struct StateEntry *StateTable, APPLYSTATEFUNC **dev_
}
}
+ prune_invalid_states(StateTable, gl_info);
+ validate_state_table(StateTable);
+
return WINED3D_OK;
out_of_mem:
diff --git a/reactos/dll/directx/wine/wined3d/surface.c b/reactos/dll/directx/wine/wined3d/surface.c
index 8dcc6915bbf..d17d35cc16d 100644
--- a/reactos/dll/directx/wine/wined3d/surface.c
+++ b/reactos/dll/directx/wine/wined3d/surface.c
@@ -1253,6 +1253,37 @@ static void read_from_framebuffer_texture(IWineD3DSurfaceImpl *This, BOOL srgb)
TRACE("Updated target %d\n", This->texture_target);
}
+/* Context activation is done by the caller. */
+void surface_prepare_texture(IWineD3DSurfaceImpl *surface, BOOL srgb)
+{
+ DWORD alloc_flag = srgb ? SFLAG_SRGBALLOCATED : SFLAG_ALLOCATED;
+ GLenum format, internal, type;
+ GLsizei width, height;
+ CONVERT_TYPES convert;
+ int bpp;
+
+ if (surface->Flags & alloc_flag) return;
+
+ d3dfmt_get_conv(surface, TRUE, TRUE, &format, &internal, &type, &convert, &bpp, srgb);
+ if(convert != NO_CONVERSION) surface->Flags |= SFLAG_CONVERTED;
+ else surface->Flags &= ~SFLAG_CONVERTED;
+
+ if ((surface->Flags & SFLAG_NONPOW2) && !(surface->Flags & SFLAG_OVERSIZE))
+ {
+ width = surface->pow2Width;
+ height = surface->pow2Height;
+ }
+ else
+ {
+ width = surface->glRect.right - surface->glRect.left;
+ height = surface->glRect.bottom - surface->glRect.top;
+ }
+
+ surface_bind_and_dirtify(surface, srgb);
+ surface_allocate_surface(surface, internal, width, height, format, type);
+ surface->Flags |= alloc_flag;
+}
+
static void surface_prepare_system_memory(IWineD3DSurfaceImpl *This)
{
IWineD3DDeviceImpl *device = This->resource.device;
@@ -1822,7 +1853,7 @@ HRESULT d3dfmt_get_conv(IWineD3DSurfaceImpl *This, BOOL need_alpha_ck, BOOL use_
* in which the main render target uses p8. Some games like GTA Vice City use P8 for texturing which
* conflicts with this.
*/
- if (!(gl_info->supported[EXT_PALETTED_TEXTURE] || (gl_info->supported[ARB_FRAGMENT_PROGRAM]
+ if (!(gl_info->supported[EXT_PALETTED_TEXTURE] || (device->blitter->color_fixup_supported(This->resource.format_desc->color_fixup)
&& device->render_targets && This == (IWineD3DSurfaceImpl*)device->render_targets[0]))
|| colorkey_active || !use_texturing)
{
@@ -1836,7 +1867,7 @@ HRESULT d3dfmt_get_conv(IWineD3DSurfaceImpl *This, BOOL need_alpha_ck, BOOL use_
*convert = CONVERT_PALETTED;
}
}
- else if (!gl_info->supported[EXT_PALETTED_TEXTURE] && gl_info->supported[ARB_FRAGMENT_PROGRAM])
+ else if (!gl_info->supported[EXT_PALETTED_TEXTURE] && device->blitter->color_fixup_supported(This->resource.format_desc->color_fixup))
{
*format = GL_ALPHA;
*type = GL_UNSIGNED_BYTE;
@@ -2553,34 +2584,10 @@ static void d3dfmt_p8_upload_palette(IWineD3DSurface *iface, CONVERT_TYPES conve
* The 8bit pixel data will be used as an index in this palette texture to retrieve the final color. */
TRACE("Using fragment shaders for emulating 8-bit paletted texture support\n");
+ device->blitter->set_shader((IWineD3DDevice *) device, This->resource.format_desc,
+ This->texture_target, This->pow2Width, This->pow2Height);
+
ENTER_GL();
-
- /* Create the fragment program if we don't have it */
- if(!device->paletteConversionShader)
- {
- const char *fragment_palette_conversion =
- "!!ARBfp1.0\n"
- "TEMP index;\n"
- /* { 255/256, 0.5/255*255/256, 0, 0 } */
- "PARAM constants = { 0.996, 0.00195, 0, 0 };\n"
- /* The alpha-component contains the palette index */
- "TEX index, fragment.texcoord[0], texture[0], 2D;\n"
- /* Scale the index by 255/256 and add a bias of '0.5' in order to sample in the middle */
- "MAD index.a, index.a, constants.x, constants.y;\n"
- /* Use the alpha-component as an index in the palette to get the final color */
- "TEX result.color, index.a, texture[1], 1D;\n"
- "END";
-
- glEnable(GL_FRAGMENT_PROGRAM_ARB);
- GL_EXTCALL(glGenProgramsARB(1, &device->paletteConversionShader));
- GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, device->paletteConversionShader));
- GL_EXTCALL(glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, strlen(fragment_palette_conversion), fragment_palette_conversion));
- glDisable(GL_FRAGMENT_PROGRAM_ARB);
- }
-
- glEnable(GL_FRAGMENT_PROGRAM_ARB);
- GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, device->paletteConversionShader));
-
GL_EXTCALL(glActiveTextureARB(GL_TEXTURE1));
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
@@ -2594,7 +2601,6 @@ static void d3dfmt_p8_upload_palette(IWineD3DSurface *iface, CONVERT_TYPES conve
/* Rebind the texture because it isn't bound anymore */
glBindTexture(This->texture_target, This->texture_name);
-
LEAVE_GL();
}
}
@@ -2700,7 +2706,6 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadTexture(IWineD3DSurface *iface, BO
static void WINAPI IWineD3DSurfaceImpl_BindTexture(IWineD3DSurface *iface, BOOL srgb) {
/* TODO: check for locks */
IWineD3DSurfaceImpl *This = (IWineD3DSurfaceImpl *)iface;
- IWineD3DDeviceImpl *device = This->resource.device;
IWineD3DBaseTexture *baseTexture = NULL;
TRACE("(%p)Checking to see if the container is a base texture\n", This);
@@ -2711,13 +2716,11 @@ static void WINAPI IWineD3DSurfaceImpl_BindTexture(IWineD3DSurface *iface, BOOL
}
else
{
- struct wined3d_context *context = NULL;
GLuint *name;
TRACE("(%p) : Binding surface\n", This);
name = srgb ? &This->texture_name_srgb : &This->texture_name;
- if (!device->isInDraw) context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
ENTER_GL();
@@ -2751,8 +2754,6 @@ static void WINAPI IWineD3DSurfaceImpl_BindTexture(IWineD3DSurface *iface, BOOL
checkGLcall("glBindTexture");
LEAVE_GL();
-
- if (context) context_release(context);
}
}
@@ -3447,6 +3448,9 @@ static inline void fb_copy_to_texture_hwstretch(IWineD3DSurfaceImpl *This, IWine
}
LEAVE_GL();
+
+ wglFlush(); /* Flush to ensure ordering across contexts. */
+
context_release(context);
/* The texture is now most up to date - If the surface is a render target and has a drawable, this
@@ -3921,9 +3925,7 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(IWineD3DSurfaceImpl *This, const
/* Leave the opengl state valid for blitting */
myDevice->blitter->unset_shader((IWineD3DDevice *) myDevice);
- /* Flush in case the drawable is used by multiple GL contexts */
- if(dstSwapchain && (This == (IWineD3DSurfaceImpl *) dstSwapchain->frontBuffer || dstSwapchain->num_contexts >= 2))
- wglFlush();
+ wglFlush(); /* Flush to ensure ordering across contexts. */
context_release(context);
@@ -4552,7 +4554,11 @@ void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *co
else context_bind_fbo(context, GL_FRAMEBUFFER, NULL);
LEAVE_GL();
- } else {
+
+ wglFlush(); /* Flush to ensure ordering across contexts. */
+ }
+ else
+ {
FIXME("No up to date depth stencil location\n");
}
} else if (location == SFLAG_DS_ONSCREEN) {
@@ -4569,7 +4575,11 @@ void surface_load_ds_location(IWineD3DSurface *iface, struct wined3d_context *co
if (context->current_fbo) context_bind_fbo(context, GL_FRAMEBUFFER, &context->current_fbo->id);
LEAVE_GL();
- } else {
+
+ wglFlush(); /* Flush to ensure ordering across contexts. */
+ }
+ else
+ {
FIXME("No up to date depth stencil location\n");
}
} else {
@@ -4656,11 +4666,10 @@ static inline void cube_coords_float(const RECT *r, UINT w, UINT h, struct float
static inline void surface_blt_to_drawable(IWineD3DSurfaceImpl *This, const RECT *rect_in)
{
IWineD3DDeviceImpl *device = This->resource.device;
+ IWineD3DBaseTextureImpl *texture;
struct wined3d_context *context;
struct coords coords[4];
RECT rect;
- IWineD3DSwapChain *swapchain;
- IWineD3DBaseTexture *texture;
GLenum bind_target;
struct float_rect f;
@@ -4802,25 +4811,16 @@ static inline void surface_blt_to_drawable(IWineD3DSurfaceImpl *This, const RECT
LEAVE_GL();
- if(SUCCEEDED(IWineD3DSurface_GetContainer((IWineD3DSurface*)This, &IID_IWineD3DSwapChain, (void **) &swapchain)))
- {
- /* Make sure to flush the buffers. This is needed in apps like Red Alert II and Tiberian SUN that use multiple WGL contexts. */
- if(((IWineD3DSwapChainImpl*)swapchain)->frontBuffer == (IWineD3DSurface*)This ||
- ((IWineD3DSwapChainImpl*)swapchain)->num_contexts >= 2)
- wglFlush();
+ wglFlush(); /* Flush to ensure ordering across contexts. */
- IWineD3DSwapChain_Release(swapchain);
- } else {
- /* We changed the filtering settings on the texture. Inform the container about this to get the filters
- * reset properly next draw
- */
- if(SUCCEEDED(IWineD3DSurface_GetContainer((IWineD3DSurface*)This, &IID_IWineD3DBaseTexture, (void **) &texture)))
- {
- ((IWineD3DBaseTextureImpl *) texture)->baseTexture.texture_rgb.states[WINED3DTEXSTA_MAGFILTER] = WINED3DTEXF_POINT;
- ((IWineD3DBaseTextureImpl *) texture)->baseTexture.texture_rgb.states[WINED3DTEXSTA_MINFILTER] = WINED3DTEXF_POINT;
- ((IWineD3DBaseTextureImpl *) texture)->baseTexture.texture_rgb.states[WINED3DTEXSTA_MIPFILTER] = WINED3DTEXF_NONE;
- IWineD3DBaseTexture_Release(texture);
- }
+ /* We changed the filtering settings on the texture. Inform the
+ * container about this to get the filters reset properly next draw. */
+ if (SUCCEEDED(IWineD3DSurface_GetContainer((IWineD3DSurface *)This, &IID_IWineD3DBaseTexture, (void **)&texture)))
+ {
+ texture->baseTexture.texture_rgb.states[WINED3DTEXSTA_MAGFILTER] = WINED3DTEXF_POINT;
+ texture->baseTexture.texture_rgb.states[WINED3DTEXSTA_MINFILTER] = WINED3DTEXF_POINT;
+ texture->baseTexture.texture_rgb.states[WINED3DTEXSTA_MIPFILTER] = WINED3DTEXF_NONE;
+ IWineD3DBaseTexture_Release((IWineD3DBaseTexture *)texture);
}
context_release(context);
@@ -4977,7 +4977,6 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D
{
/* Upload from system memory */
BOOL srgb = flag == SFLAG_INSRGBTEX;
- DWORD alloc_flag = srgb ? SFLAG_SRGBALLOCATED : SFLAG_ALLOCATED;
struct wined3d_context *context = NULL;
d3dfmt_get_conv(This, TRUE /* We need color keying */, TRUE /* We will use textures */,
@@ -5004,6 +5003,8 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D
}
if (!device->isInDraw) context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+
+ surface_prepare_texture(This, srgb);
surface_bind_and_dirtify(This, srgb);
if(This->CKeyFlags & WINEDDSD_CKSRCBLT) {
@@ -5037,17 +5038,13 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D
return WINED3DERR_OUTOFVIDEOMEMORY;
}
d3dfmt_convert_surface(This->resource.allocatedMemory, mem, pitch, width, height, outpitch, convert, This);
-
- This->Flags |= SFLAG_CONVERTED;
}
else if (This->resource.format_desc->format == WINED3DFMT_P8_UINT
- && (gl_info->supported[EXT_PALETTED_TEXTURE] || gl_info->supported[ARB_FRAGMENT_PROGRAM]))
+ && (gl_info->supported[EXT_PALETTED_TEXTURE] || device->blitter->color_fixup_supported(This->resource.format_desc->color_fixup)))
{
d3dfmt_p8_upload_palette(iface, convert);
- This->Flags &= ~SFLAG_CONVERTED;
mem = This->resource.allocatedMemory;
} else {
- This->Flags &= ~SFLAG_CONVERTED;
mem = This->resource.allocatedMemory;
}
@@ -5058,10 +5055,6 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D
if ((This->Flags & SFLAG_NONPOW2) && !(This->Flags & SFLAG_OVERSIZE)) {
TRACE("non power of two support\n");
- if(!(This->Flags & alloc_flag)) {
- surface_allocate_surface(This, internal, This->pow2Width, This->pow2Height, format, type);
- This->Flags |= alloc_flag;
- }
if (mem || (This->Flags & SFLAG_PBO)) {
surface_upload_data(This, internal, This->currentDesc.Width, This->currentDesc.Height, format, type, mem);
}
@@ -5069,10 +5062,6 @@ static HRESULT WINAPI IWineD3DSurfaceImpl_LoadLocation(IWineD3DSurface *iface, D
/* When making the realloc conditional, keep in mind that GL_APPLE_client_storage may be in use, and This->resource.allocatedMemory
* changed. So also keep track of memory changes. In this case the texture has to be reallocated
*/
- if(!(This->Flags & alloc_flag)) {
- surface_allocate_surface(This, internal, This->glRect.right - This->glRect.left, This->glRect.bottom - This->glRect.top, format, type);
- This->Flags |= alloc_flag;
- }
if (mem || (This->Flags & SFLAG_PBO)) {
surface_upload_data(This, internal, This->glRect.right - This->glRect.left, This->glRect.bottom - This->glRect.top, format, type, mem);
}
diff --git a/reactos/dll/directx/wine/wined3d/swapchain.c b/reactos/dll/directx/wine/wined3d/swapchain.c
index 6493704014b..cbdb961f705 100644
--- a/reactos/dll/directx/wine/wined3d/swapchain.c
+++ b/reactos/dll/directx/wine/wined3d/swapchain.c
@@ -217,6 +217,8 @@ static HRESULT WINAPI IWineD3DSwapChainImpl_Present(IWineD3DSwapChain *iface, CO
unsigned int sync;
int retval;
+ IWineD3DSwapChain_SetDestWindowOverride(iface, hDestWindowOverride);
+
context = context_acquire(This->device, This->backBuffer[0], CTXUSAGE_RESOURCELOAD);
/* Render the cursor onto the back buffer, using our nifty directdraw blitting code :-) */
@@ -272,12 +274,7 @@ static HRESULT WINAPI IWineD3DSwapChainImpl_Present(IWineD3DSwapChain *iface, CO
IWineD3DSurface_BltFast(This->backBuffer[0], 0, 0, This->device->logo_surface, NULL, WINEDDBLTFAST_SRCCOLORKEY);
}
- TRACE("presetting HDC %p\n", This->context[0]->hdc);
-
- /* Don't call checkGLcall, as glGetError is not applicable here */
- if (hDestWindowOverride && This->win_handle != hDestWindowOverride) {
- IWineD3DSwapChain_SetDestWindowOverride(iface, hDestWindowOverride);
- }
+ TRACE("Presenting HDC %p.\n", context->hdc);
render_to_fbo = This->render_to_fbo;
@@ -343,7 +340,8 @@ static HRESULT WINAPI IWineD3DSwapChainImpl_Present(IWineD3DSwapChain *iface, CO
swapchain_blit(This, context, &src_rect, &dst_rect);
}
- SwapBuffers(This->context[0]->hdc); /* TODO: cycle through the swapchain buffers */
+ if (This->num_contexts > 1) wglFinish();
+ SwapBuffers(context->hdc); /* TODO: cycle through the swapchain buffers */
TRACE("SwapBuffers called, Starting new frame\n");
/* FPS support */
@@ -521,7 +519,7 @@ static HRESULT WINAPI IWineD3DSwapChainImpl_SetDestWindowOverride(IWineD3DSwapCh
WINED3DLOCKED_RECT r;
BYTE *mem;
- if(window == This->win_handle) return WINED3D_OK;
+ if (!window || window == This->win_handle) return WINED3D_OK;
TRACE("Performing dest override of swapchain %p from window %p to %p\n", This, This->win_handle, window);
if (This->context[0] == This->device->contexts[0])
@@ -913,10 +911,15 @@ err:
HeapFree(GetProcessHeap(), 0, swapchain->backBuffer);
}
- if (swapchain->context && swapchain->context[0])
+ if (swapchain->context)
{
- context_release(swapchain->context[0]);
- context_destroy(device, swapchain->context[0]);
+ if (swapchain->context[0])
+ {
+ context_release(swapchain->context[0]);
+ context_destroy(device, swapchain->context[0]);
+ swapchain->num_contexts = 0;
+ }
+ HeapFree(GetProcessHeap(), 0, swapchain->context);
}
if (swapchain->frontBuffer) IWineD3DSurface_Release(swapchain->frontBuffer);
diff --git a/reactos/dll/directx/wine/wined3d/utils.c b/reactos/dll/directx/wine/wined3d/utils.c
index c1e921da976..2ff16752c33 100644
--- a/reactos/dll/directx/wine/wined3d/utils.c
+++ b/reactos/dll/directx/wine/wined3d/utils.c
@@ -387,7 +387,7 @@ static const GlPixelFormatDescTemplate gl_formats_template[] = {
GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV,
WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE},
- {WINED3DFMT_R16G16_UNORM, GL_RGB16_EXT, GL_RGB16_EXT, GL_RGBA16_EXT,
+ {WINED3DFMT_R16G16_UNORM, GL_RGB16, GL_RGB16, GL_RGBA16,
GL_RGB, GL_UNSIGNED_SHORT,
WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE},
@@ -395,7 +395,7 @@ static const GlPixelFormatDescTemplate gl_formats_template[] = {
GL_BGRA, GL_UNSIGNED_INT_2_10_10_10_REV,
WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE},
- {WINED3DFMT_R16G16B16A16_UNORM, GL_RGBA16_EXT, GL_RGBA16_EXT, 0,
+ {WINED3DFMT_R16G16B16A16_UNORM, GL_RGBA16, GL_RGBA16, 0,
GL_RGBA, GL_UNSIGNED_SHORT,
WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_RENDERTARGET,
WINED3D_GL_EXT_NONE},
@@ -445,7 +445,7 @@ static const GlPixelFormatDescTemplate gl_formats_template[] = {
GL_RGBA, GL_BYTE,
WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
NV_TEXTURE_SHADER},
- {WINED3DFMT_R16G16_SNORM, GL_RGB16_EXT, GL_RGB16_EXT, 0,
+ {WINED3DFMT_R16G16_SNORM, GL_RGB16, GL_RGB16, 0,
GL_BGR, GL_UNSIGNED_SHORT,
WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE},
@@ -506,7 +506,7 @@ static const GlPixelFormatDescTemplate gl_formats_template[] = {
GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT,
WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING | WINED3DFMT_FLAG_DEPTH,
ARB_DEPTH_TEXTURE},
- {WINED3DFMT_L16_UNORM, GL_LUMINANCE16_EXT, GL_LUMINANCE16_EXT, 0,
+ {WINED3DFMT_L16_UNORM, GL_LUMINANCE16, GL_LUMINANCE16, 0,
GL_LUMINANCE, GL_UNSIGNED_SHORT,
WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING | WINED3DFMT_FLAG_FILTERING,
WINED3D_GL_EXT_NONE},
@@ -950,7 +950,7 @@ static void init_format_filter_info(struct wined3d_gl_info *gl_info, enum wined3
if(wined3d_settings.offscreen_rendering_mode != ORM_FBO)
{
WARN("No FBO support, or no FBO ORM, guessing filter info from GL caps\n");
- if (vendor == VENDOR_NVIDIA && gl_info->supported[ARB_TEXTURE_FLOAT])
+ if (vendor == HW_VENDOR_NVIDIA && gl_info->supported[ARB_TEXTURE_FLOAT])
{
TRACE("Nvidia card with texture_float support: Assuming float16 blending\n");
filtered = TRUE;
@@ -1088,17 +1088,20 @@ static void apply_format_fixups(struct wined3d_gl_info *gl_info)
if (!gl_info->supported[APPLE_YCBCR_422])
{
idx = getFmtIdx(WINED3DFMT_YUY2);
- gl_info->gl_formats[idx].color_fixup = create_yuv_fixup_desc(YUV_FIXUP_YUY2);
+ gl_info->gl_formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_YUY2);
idx = getFmtIdx(WINED3DFMT_UYVY);
- gl_info->gl_formats[idx].color_fixup = create_yuv_fixup_desc(YUV_FIXUP_UYVY);
+ gl_info->gl_formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_UYVY);
}
idx = getFmtIdx(WINED3DFMT_YV12);
gl_info->gl_formats[idx].heightscale = 1.5f;
- gl_info->gl_formats[idx].color_fixup = create_yuv_fixup_desc(YUV_FIXUP_YV12);
+ gl_info->gl_formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_YV12);
- if (gl_info->supported[EXT_VERTEX_ARRAY_BGRA])
+ idx = getFmtIdx(WINED3DFMT_P8_UINT);
+ gl_info->gl_formats[idx].color_fixup = create_complex_fixup_desc(COMPLEX_FIXUP_P8);
+
+ if (gl_info->supported[ARB_VERTEX_ARRAY_BGRA])
{
idx = getFmtIdx(WINED3DFMT_B8G8R8A8_UNORM);
gl_info->gl_formats[idx].gl_vtx_format = GL_BGRA;
@@ -1786,6 +1789,51 @@ const char* debug_d3dtstype(WINED3DTRANSFORMSTATETYPE tstype) {
}
}
+const char *debug_d3dstate(DWORD state)
+{
+ if (STATE_IS_RENDER(state))
+ return wine_dbg_sprintf("STATE_RENDER(%s)", debug_d3drenderstate(state - STATE_RENDER(0)));
+ if (STATE_IS_TEXTURESTAGE(state))
+ {
+ DWORD texture_stage = (state - STATE_TEXTURESTAGE(0, 0)) / (WINED3D_HIGHEST_TEXTURE_STATE + 1);
+ DWORD texture_state = state - STATE_TEXTURESTAGE(texture_stage, 0);
+ return wine_dbg_sprintf("STATE_TEXTURESTAGE(%#x, %s)",
+ texture_stage, debug_d3dtexturestate(texture_state));
+ }
+ if (STATE_IS_SAMPLER(state))
+ return wine_dbg_sprintf("STATE_SAMPLER(%#x)", state - STATE_SAMPLER(0));
+ if (STATE_IS_PIXELSHADER(state))
+ return "STATE_PIXELSHADER";
+ if (STATE_IS_TRANSFORM(state))
+ return wine_dbg_sprintf("STATE_TRANSFORM(%s)", debug_d3dtstype(state - STATE_TRANSFORM(0)));
+ if (STATE_IS_STREAMSRC(state))
+ return "STATE_STREAMSRC";
+ if (STATE_IS_INDEXBUFFER(state))
+ return "STATE_INDEXBUFFER";
+ if (STATE_IS_VDECL(state))
+ return "STATE_VDECL";
+ if (STATE_IS_VSHADER(state))
+ return "STATE_VSHADER";
+ if (STATE_IS_VIEWPORT(state))
+ return "STATE_VIEWPORT";
+ if (STATE_IS_VERTEXSHADERCONSTANT(state))
+ return "STATE_VERTEXSHADERCONSTANT";
+ if (STATE_IS_PIXELSHADERCONSTANT(state))
+ return "STATE_PIXELSHADERCONSTANT";
+ if (STATE_IS_ACTIVELIGHT(state))
+ return wine_dbg_sprintf("STATE_ACTIVELIGHT(%#x)", state - STATE_ACTIVELIGHT(0));
+ if (STATE_IS_SCISSORRECT(state))
+ return "STATE_SCISSORRECT";
+ if (STATE_IS_CLIPPLANE(state))
+ return wine_dbg_sprintf("STATE_CLIPPLANE(%#x)", state - STATE_CLIPPLANE(0));
+ if (STATE_IS_MATERIAL(state))
+ return "STATE_MATERIAL";
+ if (STATE_IS_FRONTFACE(state))
+ return "STATE_FRONTFACE";
+
+ return wine_dbg_sprintf("UNKNOWN_STATE(%#x)", state);
+}
+
const char* debug_d3dpool(WINED3DPOOL Pool) {
switch (Pool) {
#define POOL_TO_STR(p) case p: return #p
@@ -1868,8 +1916,8 @@ static const char *debug_fixup_channel_source(enum fixup_channel_source source)
WINED3D_TO_STR(CHANNEL_SOURCE_Y);
WINED3D_TO_STR(CHANNEL_SOURCE_Z);
WINED3D_TO_STR(CHANNEL_SOURCE_W);
- WINED3D_TO_STR(CHANNEL_SOURCE_YUV0);
- WINED3D_TO_STR(CHANNEL_SOURCE_YUV1);
+ WINED3D_TO_STR(CHANNEL_SOURCE_COMPLEX0);
+ WINED3D_TO_STR(CHANNEL_SOURCE_COMPLEX1);
#undef WINED3D_TO_STR
default:
FIXME("Unrecognized fixup_channel_source %#x\n", source);
@@ -1877,26 +1925,27 @@ static const char *debug_fixup_channel_source(enum fixup_channel_source source)
}
}
-static const char *debug_yuv_fixup(enum yuv_fixup yuv_fixup)
+static const char *debug_complex_fixup(enum complex_fixup fixup)
{
- switch(yuv_fixup)
+ switch(fixup)
{
#define WINED3D_TO_STR(x) case x: return #x
- WINED3D_TO_STR(YUV_FIXUP_YUY2);
- WINED3D_TO_STR(YUV_FIXUP_UYVY);
- WINED3D_TO_STR(YUV_FIXUP_YV12);
+ WINED3D_TO_STR(COMPLEX_FIXUP_YUY2);
+ WINED3D_TO_STR(COMPLEX_FIXUP_UYVY);
+ WINED3D_TO_STR(COMPLEX_FIXUP_YV12);
+ WINED3D_TO_STR(COMPLEX_FIXUP_P8);
#undef WINED3D_TO_STR
default:
- FIXME("Unrecognized YUV fixup %#x\n", yuv_fixup);
+ FIXME("Unrecognized complex fixup %#x\n", fixup);
return "unrecognized";
}
}
void dump_color_fixup_desc(struct color_fixup_desc fixup)
{
- if (is_yuv_fixup(fixup))
+ if (is_complex_fixup(fixup))
{
- TRACE("\tYUV: %s\n", debug_yuv_fixup(get_yuv_fixup(fixup)));
+ TRACE("\tComplex: %s\n", debug_complex_fixup(get_complex_fixup(fixup)));
return;
}
@@ -2795,40 +2844,3 @@ void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected,
else if (gl_info->supported[ATI_FRAGMENT_SHADER]) *ps_selected = SHADER_ATI;
else *ps_selected = SHADER_NONE;
}
-
-const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter, WINED3DDEVTYPE device_type)
-{
- int vs_selected_mode, ps_selected_mode;
-
- select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
- if (vs_selected_mode == SHADER_GLSL || ps_selected_mode == SHADER_GLSL) return &glsl_shader_backend;
- if (vs_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_ARB) return &arb_program_shader_backend;
- return &none_shader_backend;
-}
-
-const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter,
- WINED3DDEVTYPE device_type)
-{
- const struct wined3d_gl_info *gl_info = &adapter->gl_info;
- int vs_selected_mode, ps_selected_mode;
-
- select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
- if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
- && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_fragment_pipeline;
- else if (ps_selected_mode == SHADER_ATI) return &atifs_fragment_pipeline;
- else if (gl_info->supported[NV_REGISTER_COMBINERS]
- && gl_info->supported[NV_TEXTURE_SHADER2]) return &nvts_fragment_pipeline;
- else if (gl_info->supported[NV_REGISTER_COMBINERS]) return &nvrc_fragment_pipeline;
- else return &ffp_fragment_pipeline;
-}
-
-const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter, WINED3DDEVTYPE device_type)
-{
- const struct wined3d_gl_info *gl_info = &adapter->gl_info;
- int vs_selected_mode, ps_selected_mode;
-
- select_shader_mode(gl_info, &ps_selected_mode, &vs_selected_mode);
- if ((ps_selected_mode == SHADER_ARB || ps_selected_mode == SHADER_GLSL)
- && gl_info->supported[ARB_FRAGMENT_PROGRAM]) return &arbfp_blit;
- else return &ffp_blit;
-}
diff --git a/reactos/dll/directx/wine/wined3d/wined3d.rbuild b/reactos/dll/directx/wine/wined3d/wined3d.rbuild
index 7262e66e4b5..5a42ff6064a 100644
--- a/reactos/dll/directx/wine/wined3d/wined3d.rbuild
+++ b/reactos/dll/directx/wine/wined3d/wined3d.rbuild
@@ -16,7 +16,6 @@
ati_fragment_shader.c
arb_program_shader.c
- baseshader.c
basetexture.c
buffer.c
clipper.c
diff --git a/reactos/dll/directx/wine/wined3d/wined3d_gl.h b/reactos/dll/directx/wine/wined3d/wined3d_gl.h
index d6d9794933f..f8097d65cb9 100644
--- a/reactos/dll/directx/wine/wined3d/wined3d_gl.h
+++ b/reactos/dll/directx/wine/wined3d/wined3d_gl.h
@@ -75,6 +75,9 @@ typedef double GLclampd;
typedef void GLvoid;
typedef ptrdiff_t GLintptr;
typedef ptrdiff_t GLsizeiptr;
+typedef INT64 GLint64;
+typedef UINT64 GLuint64;
+typedef struct __GLsync *GLsync;
/* Booleans */
#define GL_FALSE 0x0
@@ -804,6 +807,197 @@ typedef ptrdiff_t GLsizeiptr;
#define GL_SAMPLE_COVERAGE_INVERT 0x80AB
#define GL_MULTISAMPLE_BIT 0x20000000
+/* GL_VERSION_2_0 */
+#ifndef GL_VERSION_2_0
+#define GL_VERSION_2_0 1
+#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
+#define GL_CURRENT_VERTEX_ATTRIB 0x8626
+#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
+#define GL_STENCIL_BACK_FUNC 0x8800
+#define GL_STENCIL_BACK_FAIL 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
+#define GL_MAX_DRAW_BUFFERS 0x8824
+#define GL_DRAW_BUFFER0 0x8825
+#define GL_DRAW_BUFFER1 0x8826
+#define GL_DRAW_BUFFER2 0x8827
+#define GL_DRAW_BUFFER3 0x8828
+#define GL_DRAW_BUFFER4 0x8829
+#define GL_DRAW_BUFFER5 0x882a
+#define GL_DRAW_BUFFER6 0x882b
+#define GL_DRAW_BUFFER7 0x882c
+#define GL_DRAW_BUFFER8 0x882d
+#define GL_DRAW_BUFFER9 0x882e
+#define GL_DRAW_BUFFER10 0x882f
+#define GL_DRAW_BUFFER11 0x8830
+#define GL_DRAW_BUFFER12 0x8831
+#define GL_DRAW_BUFFER13 0x8832
+#define GL_DRAW_BUFFER14 0x8833
+#define GL_DRAW_BUFFER15 0x8834
+#define GL_BLEND_EQUATION_ALPHA 0x883d
+#define GL_POINT_SPRITE 0x8861
+#define GL_COORD_REPLACE 0x8862
+#define GL_MAX_VERTEX_ATTRIBS 0x8869
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886a
+#define GL_MAX_TEXTURE_COORDS 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
+#define GL_FRAGMENT_SHADER 0x8b30
+#define GL_VERTEX_SHADER 0x8b31
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8b49
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8b4a
+#define GL_MAX_VARYING_FLOATS 0x8b4b
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8b4c
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8b4d
+#define GL_SHADER_TYPE 0x8b4f
+#define GL_FLOAT_VEC2 0x8b50
+#define GL_FLOAT_VEC3 0x8b51
+#define GL_FLOAT_VEC4 0x8b52
+#define GL_INT_VEC2 0x8b53
+#define GL_INT_VEC3 0x8b54
+#define GL_INT_VEC4 0x8b55
+#define GL_BOOL 0x8b56
+#define GL_BOOL_VEC2 0x8b57
+#define GL_BOOL_VEC3 0x8b58
+#define GL_BOOL_VEC4 0x8b59
+#define GL_FLOAT_MAT2 0x8b5a
+#define GL_FLOAT_MAT3 0x8b5b
+#define GL_FLOAT_MAT4 0x8b5c
+#define GL_SAMPLER_1D 0x8b5d
+#define GL_SAMPLER_2D 0x8b5e
+#define GL_SAMPLER_3D 0x8b5f
+#define GL_SAMPLER_CUBE 0x8b60
+#define GL_SAMPLER_1D_SHADOW 0x8b61
+#define GL_SAMPLER_2D_SHADOW 0x8b62
+#define GL_DELETE_STATUS 0x8b80
+#define GL_COMPILE_STATUS 0x8b81
+#define GL_LINK_STATUS 0x8b82
+#define GL_VALIDATE_STATUS 0x8b83
+#define GL_INFO_LOG_LENGTH 0x8b84
+#define GL_ATTACHED_SHADERS 0x8b85
+#define GL_ACTIVE_UNIFORMS 0x8b86
+#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8b87
+#define GL_SHADER_SOURCE_LENGTH 0x8b88
+#define GL_ACTIVE_ATTRIBUTES 0x8b89
+#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8b8a
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8b8b
+#define GL_SHADING_LANGUAGE_VERSION 0x8b8c
+#define GL_CURRENT_PROGRAM 0x8b8d
+#define GL_POINT_SPRITE_COORD_ORIGIN 0x8ca0
+#define GL_LOWER_LEFT 0x8ca1
+#define GL_UPPER_LEFT 0x8ca2
+#define GL_STENCIL_BACK_REF 0x8ca3
+#define GL_STENCIL_BACK_VALUE_MASK 0x8ca4
+#define GL_STENCIL_BACK_WRITEMASK 0x8ca5
+typedef char GLchar;
+#endif
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha);
+typedef void (WINE_GLAPI *PGLFNDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs);
+typedef void (WINE_GLAPI *PGLFNSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
+typedef void (WINE_GLAPI *PGLFNSTENCILFUNCSEPARATEPROC)(GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
+typedef void (WINE_GLAPI *PGLFNSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask);
+typedef void (WINE_GLAPI *PGLFNATTACHSHADERPROC)(GLuint program, GLuint shader);
+typedef void (WINE_GLAPI *PGLFNBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNCOMPILESHADERPROC)(GLuint shader);
+typedef GLuint (WINE_GLAPI *PGLFNCREATEPROGRAMPROC)(void);
+typedef GLuint (WINE_GLAPI *PGLFNCREATESHADERPROC)(GLenum type);
+typedef void (WINE_GLAPI *PGLFNDELETEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNDELETESHADERPROC)(GLuint shader);
+typedef void (WINE_GLAPI *PGLFNDETACHSHADERPROC)(GLuint program, GLuint shader);
+typedef void (WINE_GLAPI *PGLFNDISABLEVERTEXATTRIBARRAYPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNENABLEVERTEXATTRIBARRAYPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNGETACTIVEATTRIBPROC)(GLuint program,
+ GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETACTIVEUNIFORMPROC)(GLuint program,
+ GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
+typedef GLint (WINE_GLAPI *PGLFNGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMINFOLOGPROC)(GLuint program,
+ GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (WINE_GLAPI *PGLFNGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
+typedef void (WINE_GLAPI *PGLFNGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
+typedef GLint (WINE_GLAPI *PGLFNGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name);
+typedef void (WINE_GLAPI *PGLFNGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (WINE_GLAPI *PGLFNISPROGRAMPROC)(GLuint program);
+typedef GLboolean (WINE_GLAPI *PGLFNISSHADERPROC)(GLuint shader);
+typedef void (WINE_GLAPI *PGLFNLINKPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNSHADERSOURCEPROC)(GLuint shader,
+ GLsizei count, const GLchar* *string, const GLint *length);
+typedef void (WINE_GLAPI *PGLFNUSEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1FPROC)(GLint location, GLfloat v0);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1IPROC)(GLint location, GLint v0);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2IPROC)(GLint location, GLint v0, GLint v1);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX2FVPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX3FVPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNUNIFORMMATRIX4FVPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *PGLFNVALIDATEPROGRAMPROC)(GLuint program);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DPROC)(GLuint index, GLdouble x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FPROC)(GLuint index, GLfloat x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SPROC)(GLuint index, GLshort x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBPOINTERPROC)(GLuint index,
+ GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+
void (WINE_GLAPI *glAccum)(GLenum op, GLfloat value) DECLSPEC_HIDDEN;
void (WINE_GLAPI *glAlphaFunc)(GLenum func, GLclampf ref) DECLSPEC_HIDDEN;
GLboolean (WINE_GLAPI *glAreTexturesResident)(GLsizei n, const GLuint *textures, GLboolean *residences) DECLSPEC_HIDDEN;
@@ -1524,68 +1718,273 @@ BOOL (WINAPI *pwglShareLists)(HGLRC, HGLRC) DECLSPEC_HIDDEN;
USE_WGL_FUNC(wglMakeCurrent) \
USE_WGL_FUNC(wglShareLists)
+/* OpenGL extensions. */
+typedef enum wined3d_gl_extension
+{
+ WINED3D_GL_EXT_NONE,
-/****************************************************
- * OpenGL Extensions (EXT and ARB)
- * #defines and functions pointer
- ****************************************************/
+ /* APPLE */
+ APPLE_CLIENT_STORAGE,
+ APPLE_FENCE,
+ APPLE_FLOAT_PIXELS,
+ APPLE_FLUSH_BUFFER_RANGE,
+ APPLE_FLUSH_RENDER,
+ APPLE_YCBCR_422,
+ /* ARB */
+ ARB_COLOR_BUFFER_FLOAT,
+ ARB_DEPTH_BUFFER_FLOAT,
+ ARB_DEPTH_CLAMP,
+ ARB_DEPTH_TEXTURE,
+ ARB_DRAW_BUFFERS,
+ ARB_FRAGMENT_PROGRAM,
+ ARB_FRAGMENT_SHADER,
+ ARB_FRAMEBUFFER_OBJECT,
+ ARB_GEOMETRY_SHADER4,
+ ARB_HALF_FLOAT_PIXEL,
+ ARB_HALF_FLOAT_VERTEX,
+ ARB_IMAGING,
+ ARB_MAP_BUFFER_RANGE,
+ ARB_MULTISAMPLE,
+ ARB_MULTITEXTURE,
+ ARB_OCCLUSION_QUERY,
+ ARB_PIXEL_BUFFER_OBJECT,
+ ARB_POINT_PARAMETERS,
+ ARB_POINT_SPRITE,
+ ARB_PROVOKING_VERTEX,
+ ARB_SHADER_OBJECTS,
+ ARB_SHADER_TEXTURE_LOD,
+ ARB_SHADING_LANGUAGE_100,
+ ARB_SYNC,
+ ARB_TEXTURE_BORDER_CLAMP,
+ ARB_TEXTURE_COMPRESSION,
+ ARB_TEXTURE_CUBE_MAP,
+ ARB_TEXTURE_ENV_ADD,
+ ARB_TEXTURE_ENV_COMBINE,
+ ARB_TEXTURE_ENV_DOT3,
+ ARB_TEXTURE_FLOAT,
+ ARB_TEXTURE_MIRRORED_REPEAT,
+ ARB_TEXTURE_NON_POWER_OF_TWO,
+ ARB_TEXTURE_RECTANGLE,
+ ARB_TEXTURE_RG,
+ ARB_VERTEX_ARRAY_BGRA,
+ ARB_VERTEX_BLEND,
+ ARB_VERTEX_BUFFER_OBJECT,
+ ARB_VERTEX_PROGRAM,
+ ARB_VERTEX_SHADER,
+ /* ATI */
+ ATI_FRAGMENT_SHADER,
+ ATI_SEPARATE_STENCIL,
+ ATI_TEXTURE_COMPRESSION_3DC,
+ ATI_TEXTURE_ENV_COMBINE3,
+ ATI_TEXTURE_MIRROR_ONCE,
+ /* EXT */
+ EXT_BLEND_COLOR,
+ EXT_BLEND_EQUATION_SEPARATE,
+ EXT_BLEND_FUNC_SEPARATE,
+ EXT_BLEND_MINMAX,
+ EXT_FOG_COORD,
+ EXT_FRAMEBUFFER_BLIT,
+ EXT_FRAMEBUFFER_MULTISAMPLE,
+ EXT_FRAMEBUFFER_OBJECT,
+ EXT_GPU_PROGRAM_PARAMETERS,
+ EXT_GPU_SHADER4,
+ EXT_PACKED_DEPTH_STENCIL,
+ EXT_PALETTED_TEXTURE,
+ EXT_POINT_PARAMETERS,
+ EXT_PROVOKING_VERTEX,
+ EXT_SECONDARY_COLOR,
+ EXT_STENCIL_TWO_SIDE,
+ EXT_STENCIL_WRAP,
+ EXT_TEXTURE3D,
+ EXT_TEXTURE_COMPRESSION_RGTC,
+ EXT_TEXTURE_COMPRESSION_S3TC,
+ EXT_TEXTURE_ENV_ADD,
+ EXT_TEXTURE_ENV_COMBINE,
+ EXT_TEXTURE_ENV_DOT3,
+ EXT_TEXTURE_FILTER_ANISOTROPIC,
+ EXT_TEXTURE_LOD_BIAS,
+ EXT_TEXTURE_SRGB,
+ EXT_VERTEX_ARRAY_BGRA,
+ /* NVIDIA */
+ NV_DEPTH_CLAMP,
+ NV_FENCE,
+ NV_FOG_DISTANCE,
+ NV_FRAGMENT_PROGRAM,
+ NV_FRAGMENT_PROGRAM2,
+ NV_FRAGMENT_PROGRAM_OPTION,
+ NV_HALF_FLOAT,
+ NV_LIGHT_MAX_EXPONENT,
+ NV_REGISTER_COMBINERS,
+ NV_REGISTER_COMBINERS2,
+ NV_TEXGEN_REFLECTION,
+ NV_TEXTURE_ENV_COMBINE4,
+ NV_TEXTURE_SHADER,
+ NV_TEXTURE_SHADER2,
+ NV_VERTEX_PROGRAM,
+ NV_VERTEX_PROGRAM1_1,
+ NV_VERTEX_PROGRAM2,
+ NV_VERTEX_PROGRAM2_OPTION,
+ NV_VERTEX_PROGRAM3,
+ /* SGI */
+ SGIS_GENERATE_MIPMAP,
+ SGI_VIDEO_SYNC,
+ /* WGL extensions */
+ WGL_ARB_PBUFFER,
+ WGL_ARB_PIXEL_FORMAT,
+ WGL_WINE_PIXEL_FORMAT_PASSTHROUGH,
+ /* Internally used */
+ WINE_NORMALIZED_TEXRECT,
+
+ WINED3D_GL_EXT_COUNT,
+} GL_SupportedExt;
+
+/* GL_APPLE_client_storage */
+#ifndef GL_APPLE_client_storage
+#define GL_APPLE_client_storage 1
+#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85b2
+#endif
+
+/* GL_APPLE_fence */
+#ifndef GL_APPLE_fence
+#define GL_APPLE_fence 1
+#define GL_DRAW_PIXELS_APPLE 0x8a0a
+#define GL_FENCE_APPLE 0x8a0b
+#endif
+typedef void (WINE_GLAPI *PGLFNGENFENCESAPPLEPROC)(GLsizei, GLuint *);
+typedef void (WINE_GLAPI *PGLFNDELETEFENCESAPPLEPROC)(GLuint, const GLuint *);
+typedef void (WINE_GLAPI *PGLFNSETFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTFENCEAPPLEPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNISFENCEAPPLEPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTOBJECTAPPLEPROC)(GLenum, GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHOBJECTAPPLEPROC)(GLenum, GLuint);
+
+/* GL_APPLE_float_pixels */
+#ifndef GL_APPLE_float_pixels
+#define GL_APPLE_float_pixels 1
+#define GL_HALF_APPLE 0x140b
+#define GL_COLOR_FLOAT_APPLE 0x8a0f
+#define GL_RGBA_FLOAT32_APPLE 0x8814
+#define GL_RGB_FLOAT32_APPLE 0x8815
+#define GL_ALPHA_FLOAT32_APPLE 0x8816
+#define GL_INTENSITY_FLOAT32_APPLE 0x8817
+#define GL_LUMINANCE_FLOAT32_APPLE 0x8818
+#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819
+#define GL_RGBA_FLOAT16_APPLE 0x881a
+#define GL_RGB_FLOAT16_APPLE 0x881b
+#define GL_ALPHA_FLOAT16_APPLE 0x881c
+#define GL_INTENSITY_FLOAT16_APPLE 0x881d
+#define GL_LUMINANCE_FLOAT16_APPLE 0x881e
+#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881f
+#endif
+
+/* GL_APPLE_flush_buffer_range */
+#ifndef GL_APPLE_flush_buffer_range
+#define GL_APPLE_flush_buffer_range 1
+#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8a12
+#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8a13
+typedef void (WINE_GLAPI *PGLFNBUFFERPARAMETERIAPPLE)(GLenum target, GLenum pname, GLint param);
+typedef void (WINE_GLAPI *PGLFNFLUSHMAPPEDBUFFERRANGEAPPLE)(GLenum target, GLintptr offset, GLsizeiptr size);
+#endif
+
+/* GL_APPLE_flush_render */
+typedef void (WINE_GLAPI *PGLFNFLUSHRENDERAPPLEPROC)(void);
+typedef void (WINE_GLAPI *PGLFNFINISHRENDERAPPLEPROC)(void);
+
+/* GL_APPLE_ycbcr_422 */
+#ifndef GL_APPLE_ycbcr_422
+#define GL_APPLE_ycbcr_422 1
+#define GL_YCBCR_422_APPLE 0x85b9
+#define UNSIGNED_SHORT_8_8_APPLE 0x85ba
+#define UNSIGNED_SHORT_8_8_REV_APPLE 0x85bb
+#endif
/* GL_ARB_color_buffer_float */
#ifndef GL_ARB_color_buffer_float
-#define GL_RGBA_FLOAT_MODE_ARB 0x8820
-#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A
-#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B
-#define GL_CLAMP_READ_COLOR_ARB 0x891C
-#define GL_FIXED_ONLY_ARB 0x891D
+#define GL_ARB_color_buffer_float 1
+#define GL_RGBA_FLOAT_MODE_ARB 0x8820
+#define GL_CLAMP_VERTEX_COLOR_ARB 0x891a
+#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891b
+#define GL_CLAMP_READ_COLOR_ARB 0x891c
+#define GL_FIXED_ONLY_ARB 0x891d
#endif
-typedef void (WINE_GLAPI *PGLFNCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);
+typedef void (WINE_GLAPI *PGLFNCLAMPCOLORARBPROC)(GLenum target, GLenum clamp);
/* GL_ARB_depth_buffer_float */
#ifndef GL_ARB_depth_buffer_float
#define GL_ARB_depth_buffer_float 1
-#define GL_DEPTH_COMPONENT32F 0x8cac
-#define GL_DEPTH32F_STENCIL8 0x8cad
-#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8dad
+#define GL_DEPTH_COMPONENT32F 0x8cac
+#define GL_DEPTH32F_STENCIL8 0x8cad
+#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8dad
#endif
/* GL_ARB_depth_clamp */
#ifndef GL_ARB_depth_clamp
#define GL_ARB_depth_clamp 1
-#define GL_DEPTH_CLAMP 0x864f
+#define GL_DEPTH_CLAMP 0x864f
#endif
/* GL_ARB_depth_texture */
#ifndef GL_ARB_depth_texture
#define GL_ARB_depth_texture 1
-#define GL_DEPTH_COMPONENT16_ARB 0x81A5
-#define GL_DEPTH_COMPONENT24_ARB 0x81A6
-#define GL_DEPTH_COMPONENT32_ARB 0x81A7
-#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A
-#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B
+#define GL_DEPTH_COMPONENT16_ARB 0x81a5
+#define GL_DEPTH_COMPONENT24_ARB 0x81a6
+#define GL_DEPTH_COMPONENT32_ARB 0x81a7
+#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884a
+#define GL_DEPTH_TEXTURE_MODE_ARB 0x884b
#endif
/* GL_ARB_draw_buffers */
#ifndef GL_ARB_draw_buffers
#define GL_ARB_draw_buffers 1
-#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
-#define GL_DRAW_BUFFER0_ARB 0x8825
-#define GL_DRAW_BUFFER1_ARB 0x8826
-#define GL_DRAW_BUFFER2_ARB 0x8827
-#define GL_DRAW_BUFFER3_ARB 0x8828
-#define GL_DRAW_BUFFER4_ARB 0x8829
-#define GL_DRAW_BUFFER5_ARB 0x882A
-#define GL_DRAW_BUFFER6_ARB 0x882B
-#define GL_DRAW_BUFFER7_ARB 0x882C
-#define GL_DRAW_BUFFER8_ARB 0x882D
-#define GL_DRAW_BUFFER9_ARB 0x882E
-#define GL_DRAW_BUFFER10_ARB 0x882F
-#define GL_DRAW_BUFFER11_ARB 0x8830
-#define GL_DRAW_BUFFER12_ARB 0x8831
-#define GL_DRAW_BUFFER13_ARB 0x8832
-#define GL_DRAW_BUFFER14_ARB 0x8833
-#define GL_DRAW_BUFFER15_ARB 0x8834
+#define GL_MAX_DRAW_BUFFERS_ARB 0x8824
+#define GL_DRAW_BUFFER0_ARB 0x8825
+#define GL_DRAW_BUFFER1_ARB 0x8826
+#define GL_DRAW_BUFFER2_ARB 0x8827
+#define GL_DRAW_BUFFER3_ARB 0x8828
+#define GL_DRAW_BUFFER4_ARB 0x8829
+#define GL_DRAW_BUFFER5_ARB 0x882a
+#define GL_DRAW_BUFFER6_ARB 0x882b
+#define GL_DRAW_BUFFER7_ARB 0x882c
+#define GL_DRAW_BUFFER8_ARB 0x882d
+#define GL_DRAW_BUFFER9_ARB 0x882e
+#define GL_DRAW_BUFFER10_ARB 0x882f
+#define GL_DRAW_BUFFER11_ARB 0x8830
+#define GL_DRAW_BUFFER12_ARB 0x8831
+#define GL_DRAW_BUFFER13_ARB 0x8832
+#define GL_DRAW_BUFFER14_ARB 0x8833
+#define GL_DRAW_BUFFER15_ARB 0x8834
+#endif
+typedef void (WINE_GLAPI *PGLFNDRAWBUFFERSARBPROC)(GLsizei n, const GLenum *bufs);
+
+/* GL_ARB_fragment_program */
+#ifndef GL_ARB_fragment_program
+#define GL_ARB_fragment_program 1
+#define GL_FRAGMENT_PROGRAM_ARB 0x8804
+#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
+#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
+#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
+#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
+#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
+#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880a
+#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880b
+#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880c
+#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880d
+#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880e
+#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880f
+#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
+#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
+#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
+/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */
+#endif
+
+/* GL_ARB_fragment_shader */
+#ifndef GL_ARB_fragment_shader
+#define GL_ARB_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ARB 0x8b30
+#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8b49
+#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8b8b
#endif
-typedef void (WINE_GLAPI *PGLFNDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);
/* GL_ARB_framebuffer_object */
#ifndef GL_ARB_framebuffer_object
@@ -1665,58 +2064,59 @@ typedef void (WINE_GLAPI *PGLFNDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *buf
#define GL_DEPTH24_STENCIL8 0x88f0
#define GL_TEXTURE_STENCIL_SIZE 0x88f1
#endif
-typedef GLboolean (WINE_GLAPI * PGLFNGLISRENDERBUFFERPROC)(GLuint renderbuffer);
-typedef void (WINE_GLAPI * PGLFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer);
-typedef void (WINE_GLAPI * PGLFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers);
-typedef void (WINE_GLAPI * PGLFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers);
-typedef void (WINE_GLAPI * PGLFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat,
+typedef GLboolean (WINE_GLAPI *PGLFNGLISRENDERBUFFERPROC)(GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat,
GLsizei width, GLsizei height);
-typedef void (WINE_GLAPI * PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples,
+typedef void (WINE_GLAPI *PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples,
GLenum internalformat, GLsizei width, GLsizei height);
-typedef void (WINE_GLAPI * PGLFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);
-typedef GLboolean (WINE_GLAPI * PGLFNGLISFRAMEBUFFERPROC)(GLuint framebuffer);
-typedef void (WINE_GLAPI * PGLFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer);
-typedef void (WINE_GLAPI * PGLFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers);
-typedef void (WINE_GLAPI * PGLFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers);
-typedef GLenum (WINE_GLAPI * PGLFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment,
+typedef void (WINE_GLAPI *PGLFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (WINE_GLAPI *PGLFNGLISFRAMEBUFFERPROC)(GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers);
+typedef GLenum (WINE_GLAPI *PGLFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment,
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment,
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment,
GLenum textarget, GLuint texture, GLint level, GLint layer);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment,
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment,
GLuint texture, GLint level, GLint layer);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment,
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment,
GLenum renderbuffertarget, GLuint renderbuffer);
-typedef void (WINE_GLAPI * PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment,
+typedef void (WINE_GLAPI *PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment,
GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+typedef void (WINE_GLAPI *PGLFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
-typedef void (WINE_GLAPI * PGLFNGLGENERATEMIPMAPPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGLGENERATEMIPMAPPROC)(GLenum target);
/* GL_ARB_geometry_shader4 */
#ifndef GL_ARB_geometry_shader4
-#define GL_GEOMETRY_SHADER_ARB 0x8dd9
-#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8dda
-#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8ddb
-#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8ddc
-#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8c29
-#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8ddd
-#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8dde
-#define GL_MAX_VARYING_COMPONENTS_ARB 0x8b4b
-#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8ddf
-#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8de0
-#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8de1
-#define GL_LINES_ADJACENCY_ARB 0x000a
-#define GL_LINE_STRIP_ADJACENCY_ARB 0x000b
-#define GL_TRIANGLES_ADJACENCY_ARB 0x000c
-#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000d
-#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8da8
-#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8da9
-#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8da7
-#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8cd4
-#define GL_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_ARB_geometry_shader4 1
+#define GL_GEOMETRY_SHADER_ARB 0x8dd9
+#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8dda
+#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8ddb
+#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8ddc
+#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8c29
+#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8ddd
+#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8dde
+#define GL_MAX_VARYING_COMPONENTS_ARB 0x8b4b
+#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8ddf
+#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8de0
+#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8de1
+#define GL_LINES_ADJACENCY_ARB 0x000a
+#define GL_LINE_STRIP_ADJACENCY_ARB 0x000b
+#define GL_TRIANGLES_ADJACENCY_ARB 0x000c
+#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000d
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8da8
+#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8da9
+#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8da7
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8cd4
+#define GL_PROGRAM_POINT_SIZE_ARB 0x8642
#endif
typedef void (WINE_GLAPI *PGLFNPROGRAMPARAMETERIARBPROC)(GLuint program, GLenum pname, GLint value);
typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTUREARBPROC)(GLenum target, GLenum attachment,
@@ -1726,380 +2126,1067 @@ typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTURELAYERARBPROC)(GLenum target, GL
typedef void (WINE_GLAPI *PGLFNFRAMEBUFFERTEXTUREFACEARBPROC)(GLenum target, GLenum attachment,
GLuint texture, GLint level, GLenum face);
+/* GL_ARB_half_float_pixel */
+#ifndef GL_ARB_half_float_pixel
+#define GL_ARB_half_float_pixel 1
+#define GL_HALF_FLOAT_ARB 0x140b
+#endif
+
+/* GL_ARB_half_float_vertex */
+#ifndef GL_ARB_half_float_vertex
+#define GL_ARB_half_float_vertex 1
+/* No _ARB, see extension spec */
+#define GL_HALF_FLOAT 0x140b
+#endif
+
/* GL_ARB_imaging */
#ifndef GL_ARB_imaging
#define GL_ARB_imaging 1
-#define GL_CONSTANT_COLOR 0x8001
-#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
-#define GL_CONSTANT_ALPHA 0x8003
-#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
-#define GL_BLEND_COLOR 0x8005
-#define GL_FUNC_ADD 0x8006
-#define GL_MIN 0x8007
-#define GL_MAX 0x8008
-#define GL_BLEND_EQUATION 0x8009
-#define GL_FUNC_SUBTRACT 0x800A
-#define GL_FUNC_REVERSE_SUBTRACT 0x800B
-#define GL_CONVOLUTION_1D 0x8010
-#define GL_CONVOLUTION_2D 0x8011
-#define GL_SEPARABLE_2D 0x8012
-#define GL_CONVOLUTION_BORDER_MODE 0x8013
-#define GL_CONVOLUTION_FILTER_SCALE 0x8014
-#define GL_CONVOLUTION_FILTER_BIAS 0x8015
-#define GL_REDUCE 0x8016
-#define GL_CONVOLUTION_FORMAT 0x8017
-#define GL_CONVOLUTION_WIDTH 0x8018
-#define GL_CONVOLUTION_HEIGHT 0x8019
-#define GL_MAX_CONVOLUTION_WIDTH 0x801A
-#define GL_MAX_CONVOLUTION_HEIGHT 0x801B
-#define GL_POST_CONVOLUTION_RED_SCALE 0x801C
-#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D
-#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E
-#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F
-#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
-#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
-#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
-#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
-#define GL_HISTOGRAM 0x8024
-#define GL_PROXY_HISTOGRAM 0x8025
-#define GL_HISTOGRAM_WIDTH 0x8026
-#define GL_HISTOGRAM_FORMAT 0x8027
-#define GL_HISTOGRAM_RED_SIZE 0x8028
-#define GL_HISTOGRAM_GREEN_SIZE 0x8029
-#define GL_HISTOGRAM_BLUE_SIZE 0x802A
-#define GL_HISTOGRAM_ALPHA_SIZE 0x802B
-#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C
-#define GL_HISTOGRAM_SINK 0x802D
-#define GL_MINMAX 0x802E
-#define GL_MINMAX_FORMAT 0x802F
-#define GL_MINMAX_SINK 0x8030
-#define GL_TABLE_TOO_LARGE 0x8031
-#define GL_COLOR_MATRIX 0x80B1
-#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2
-#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3
-#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4
-#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5
-#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6
-#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7
-#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8
-#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9
-#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA
-#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB
-#define GL_COLOR_TABLE 0x80D0
-#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1
-#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2
-#define GL_PROXY_COLOR_TABLE 0x80D3
-#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4
-#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5
-#define GL_COLOR_TABLE_SCALE 0x80D6
-#define GL_COLOR_TABLE_BIAS 0x80D7
-#define GL_COLOR_TABLE_FORMAT 0x80D8
-#define GL_COLOR_TABLE_WIDTH 0x80D9
-#define GL_COLOR_TABLE_RED_SIZE 0x80DA
-#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB
-#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC
-#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD
-#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE
-#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF
-#define GL_CONSTANT_BORDER 0x8151
-#define GL_REPLICATE_BORDER 0x8153
-#define GL_CONVOLUTION_BORDER_COLOR 0x8154
+#define GL_CONSTANT_COLOR 0x8001
+#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
+#define GL_CONSTANT_ALPHA 0x8003
+#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004
+#define GL_BLEND_COLOR 0x8005
+#define GL_FUNC_ADD 0x8006
+#define GL_MIN 0x8007
+#define GL_MAX 0x8008
+#define GL_BLEND_EQUATION 0x8009
+#define GL_FUNC_SUBTRACT 0x800a
+#define GL_FUNC_REVERSE_SUBTRACT 0x800b
+#define GL_CONVOLUTION_1D 0x8010
+#define GL_CONVOLUTION_2D 0x8011
+#define GL_SEPARABLE_2D 0x8012
+#define GL_CONVOLUTION_BORDER_MODE 0x8013
+#define GL_CONVOLUTION_FILTER_SCALE 0x8014
+#define GL_CONVOLUTION_FILTER_BIAS 0x8015
+#define GL_REDUCE 0x8016
+#define GL_CONVOLUTION_FORMAT 0x8017
+#define GL_CONVOLUTION_WIDTH 0x8018
+#define GL_CONVOLUTION_HEIGHT 0x8019
+#define GL_MAX_CONVOLUTION_WIDTH 0x801a
+#define GL_MAX_CONVOLUTION_HEIGHT 0x801b
+#define GL_POST_CONVOLUTION_RED_SCALE 0x801d
+#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801f
+#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801e
+#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801f
+#define GL_POST_CONVOLUTION_RED_BIAS 0x8020
+#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021
+#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022
+#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023
+#define GL_HISTOGRAM 0x8024
+#define GL_PROXY_HISTOGRAM 0x8025
+#define GL_HISTOGRAM_WIDTH 0x8026
+#define GL_HISTOGRAM_FORMAT 0x8027
+#define GL_HISTOGRAM_RED_SIZE 0x8028
+#define GL_HISTOGRAM_GREEN_SIZE 0x8029
+#define GL_HISTOGRAM_BLUE_SIZE 0x802a
+#define GL_HISTOGRAM_ALPHA_SIZE 0x802b
+#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802c
+#define GL_HISTOGRAM_SINK 0x802d
+#define GL_MINMAX 0x802e
+#define GL_MINMAX_FORMAT 0x802f
+#define GL_MINMAX_SINK 0x8030
+#define GL_TABLE_TOO_LARGE 0x8031
+#define GL_COLOR_MATRIX 0x80b1
+#define GL_COLOR_MATRIX_STACK_DEPTH 0x80b2
+#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80b3
+#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80b4
+#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80b5
+#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80b6
+#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80b7
+#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80b8
+#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80b9
+#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80ba
+#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80bb
+#define GL_COLOR_TABLE 0x80d0
+#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80d1
+#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80d2
+#define GL_PROXY_COLOR_TABLE 0x80d3
+#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80d4
+#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80d5
+#define GL_COLOR_TABLE_SCALE 0x80d6
+#define GL_COLOR_TABLE_BIAS 0x80d7
+#define GL_COLOR_TABLE_FORMAT 0x80d8
+#define GL_COLOR_TABLE_WIDTH 0x80d9
+#define GL_COLOR_TABLE_RED_SIZE 0x80da
+#define GL_COLOR_TABLE_GREEN_SIZE 0x80db
+#define GL_COLOR_TABLE_BLUE_SIZE 0x80dc
+#define GL_COLOR_TABLE_ALPHA_SIZE 0x80dd
+#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80de
+#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80df
+#define GL_CONSTANT_BORDER 0x8151
+#define GL_REPLICATE_BORDER 0x8153
+#define GL_CONVOLUTION_BORDER_COLOR 0x8154
#endif
-typedef void (WINE_GLAPI *PGLFNBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
-typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONPROC) (GLenum mode);
+typedef void (WINE_GLAPI *PGLFNBLENDCOLORPROC)(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONPROC)(GLenum mode);
+
+/* GL_ARB_map_buffer_range */
+#ifndef GL_ARB_map_buffer_range
+#define GL_ARB_map_buffer_range 1
+#define GL_MAP_READ_BIT 0x0001
+#define GL_MAP_WRITE_BIT 0x0002
+#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004
+#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008
+#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010
+#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020
+#endif
+typedef GLvoid *(WINE_GLAPI *PGLFNMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
+typedef void (WINE_GLAPI *PGLFNFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length);
+
+/* GL_ARB_multisample */
+#ifndef GL_ARB_multisample
+#define GL_ARB_multisample 1
+#define GL_MULTISAMPLE_ARB 0x809d
+#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809e
+#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809f
+#define GL_SAMPLE_COVERAGE_ARB 0x80a0
+#define GL_SAMPLE_BUFFERS_ARB 0x80a8
+#define GL_SAMPLES_ARB 0x80a9
+#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80aa
+#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80ab
+#define GL_MULTISAMPLE_BIT_ARB 0x20000000
+#endif
+typedef void (WINE_GLAPI *WINED3D_PFNGLSAMPLECOVERAGEARBPROC)(GLclampf value, GLboolean invert);
+
/* GL_ARB_multitexture */
#ifndef GL_ARB_multitexture
#define GL_ARB_multitexture 1
-#define GL_TEXTURE0_ARB 0x84C0
-#define GL_TEXTURE1_ARB 0x84C1
-#define GL_TEXTURE2_ARB 0x84C2
-#define GL_TEXTURE3_ARB 0x84C3
-#define GL_TEXTURE4_ARB 0x84C4
-#define GL_TEXTURE5_ARB 0x84C5
-#define GL_TEXTURE6_ARB 0x84C6
-#define GL_TEXTURE7_ARB 0x84C7
-#define GL_TEXTURE8_ARB 0x84C8
-#define GL_TEXTURE9_ARB 0x84C9
-#define GL_TEXTURE10_ARB 0x84CA
-#define GL_TEXTURE11_ARB 0x84CB
-#define GL_TEXTURE12_ARB 0x84CC
-#define GL_TEXTURE13_ARB 0x84CD
-#define GL_TEXTURE14_ARB 0x84CE
-#define GL_TEXTURE15_ARB 0x84CF
-#define GL_TEXTURE16_ARB 0x84D0
-#define GL_TEXTURE17_ARB 0x84D1
-#define GL_TEXTURE18_ARB 0x84D2
-#define GL_TEXTURE19_ARB 0x84D3
-#define GL_TEXTURE20_ARB 0x84D4
-#define GL_TEXTURE21_ARB 0x84D5
-#define GL_TEXTURE22_ARB 0x84D6
-#define GL_TEXTURE23_ARB 0x84D7
-#define GL_TEXTURE24_ARB 0x84D8
-#define GL_TEXTURE25_ARB 0x84D9
-#define GL_TEXTURE26_ARB 0x84DA
-#define GL_TEXTURE27_ARB 0x84DB
-#define GL_TEXTURE28_ARB 0x84DC
-#define GL_TEXTURE29_ARB 0x84DD
-#define GL_TEXTURE30_ARB 0x84DE
-#define GL_TEXTURE31_ARB 0x84DF
-#define GL_ACTIVE_TEXTURE_ARB 0x84E0
-#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1
-#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2
+#define GL_TEXTURE0_ARB 0x84c0
+#define GL_TEXTURE1_ARB 0x84c1
+#define GL_TEXTURE2_ARB 0x84c2
+#define GL_TEXTURE3_ARB 0x84c3
+#define GL_TEXTURE4_ARB 0x84c4
+#define GL_TEXTURE5_ARB 0x84c5
+#define GL_TEXTURE6_ARB 0x84c6
+#define GL_TEXTURE7_ARB 0x84c7
+#define GL_TEXTURE8_ARB 0x84c8
+#define GL_TEXTURE9_ARB 0x84c9
+#define GL_TEXTURE10_ARB 0x84ca
+#define GL_TEXTURE11_ARB 0x84cb
+#define GL_TEXTURE12_ARB 0x84cc
+#define GL_TEXTURE13_ARB 0x84cd
+#define GL_TEXTURE14_ARB 0x84ce
+#define GL_TEXTURE15_ARB 0x84cf
+#define GL_TEXTURE16_ARB 0x84d0
+#define GL_TEXTURE17_ARB 0x84d1
+#define GL_TEXTURE18_ARB 0x84d2
+#define GL_TEXTURE19_ARB 0x84d3
+#define GL_TEXTURE20_ARB 0x84d4
+#define GL_TEXTURE21_ARB 0x84d5
+#define GL_TEXTURE22_ARB 0x84d6
+#define GL_TEXTURE23_ARB 0x84d7
+#define GL_TEXTURE24_ARB 0x84d8
+#define GL_TEXTURE25_ARB 0x84d9
+#define GL_TEXTURE26_ARB 0x84da
+#define GL_TEXTURE27_ARB 0x84db
+#define GL_TEXTURE28_ARB 0x84dc
+#define GL_TEXTURE29_ARB 0x84dd
+#define GL_TEXTURE30_ARB 0x84de
+#define GL_TEXTURE31_ARB 0x84df
+#define GL_ACTIVE_TEXTURE_ARB 0x84e0
+#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84e1
+#define GL_MAX_TEXTURE_UNITS_ARB 0x84e2
#endif
-typedef void (WINE_GLAPI *WINED3D_PFNGLACTIVETEXTUREARBPROC) (GLenum texture);
-typedef void (WINE_GLAPI *WINED3D_PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);
-typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLACTIVETEXTUREARBPROC)(GLenum texture);
+typedef void (WINE_GLAPI *WINED3D_PFNGLCLIENTACTIVETEXTUREARBPROC)(GLenum texture);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD1FARBPROC)(GLenum target, GLfloat s);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD1FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2FARBPROC)(GLenum target, GLfloat s, GLfloat t);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD3FARBPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD3FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4FARBPROC)(GLenum target,
+ GLfloat s, GLfloat t, GLfloat r, GLfloat q);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4FVARBPROC)(GLenum target, const GLfloat *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD2SVARBPROC)(GLenum target, const GLshort *v);
+typedef void (WINE_GLAPI *WINED3D_PFNGLMULTITEXCOORD4SVARBPROC)(GLenum target, const GLshort *v);
-/* GL_ARB_texture_cube_map */
-#ifndef GL_ARB_texture_cube_map
-#define GL_ARB_texture_cube_map 1
-#define GL_NORMAL_MAP_ARB 0x8511
-#define GL_REFLECTION_MAP_ARB 0x8512
-#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
-#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
-#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
-#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
-#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
-#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
-#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
-#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A
-#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B
-#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C
+/* GL_ARB_occlusion_query */
+#ifndef GL_ARB_occlusion_query
+#define GL_ARB_occlusion_query 1
+#define GL_SAMPLES_PASSED_ARB 0x8914
+#define GL_QUERY_COUNTER_BITS_ARB 0x8864
+#define GL_CURRENT_QUERY_ARB 0x8865
+#define GL_QUERY_RESULT_ARB 0x8866
+#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
+#endif
+typedef void (WINE_GLAPI *PGLFNGENQUERIESARBPROC)(GLsizei n, GLuint *queries);
+typedef void (WINE_GLAPI *PGLFNDELETEQUERIESARBPROC)(GLsizei n, const GLuint *queries);
+typedef GLboolean (WINE_GLAPI *PGLFNISQUERYARBPROC)(GLuint query);
+typedef void (WINE_GLAPI *PGLFNBEGINQUERYARBPROC)(GLenum target, GLuint query);
+typedef void (WINE_GLAPI *PGLFNENDQUERYARBPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGETQUERYIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETQUERYOBJECTIVARBPROC)(GLuint query, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETQUERYOBJECTUIVARBPROC)(GLuint query, GLenum pname, GLuint *params);
+
+/* GL_ARB_pixel_buffer_object */
+#ifndef GL_ARB_pixel_buffer_object
+#define GL_ARB_pixel_buffer_object 1
+#define GL_PIXEL_PACK_BUFFER_ARB 0x88eb
+#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88ec
+#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ed
+#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88ef
#endif
/* GL_ARB_point_parameters */
#ifndef GL_ARB_point_parameters
#define GL_ARB_point_parameters 1
-#define GL_POINT_SIZE_MIN_ARB 0x8126
-#define GL_POINT_SIZE_MAX_ARB 0x8127
-#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
-#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+#define GL_POINT_SIZE_MIN_ARB 0x8126
+#define GL_POINT_SIZE_MAX_ARB 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128
+#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFARBPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFVARBPROC)(GLenum pname, const GLfloat *params);
+
+/* GL_ARB_point_sprite */
+#ifndef GL_ARB_point_sprite
+#define GL_ARB_point_sprite 1
+#define GL_POINT_SPRITE_ARB 0x8861
+#define GL_COORD_REPLACE_ARB 0x8862
#endif
-typedef void (WINE_GLAPI * PGLFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);
-typedef void (WINE_GLAPI * PGLFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);
/* GL_ARB_provoking_vertex */
#ifndef GL_ARB_provoking_vertex
#define GL_ARB_provoking_vertex 1
-#define GL_FIRST_VERTEX_CONVENTION 0x8e4d
-#define GL_LAST_VERTEX_CONVENTION 0x8e4e
-#define GL_PROVOKING_VERTEX 0x8e4f
-#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8e4c
+#define GL_FIRST_VERTEX_CONVENTION 0x8e4d
+#define GL_LAST_VERTEX_CONVENTION 0x8e4e
+#define GL_PROVOKING_VERTEX 0x8e4f
+#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8e4c
+#endif
+typedef void (WINE_GLAPI *PGLFNGLPROVOKINGVERTEXPROC)(GLenum mode);
+
+/* GL_ARB_shader_objects */
+#ifndef GL_ARB_shader_objects
+#define GL_ARB_shader_objects 1
+typedef char GLcharARB;
+typedef unsigned int GLhandleARB;
+#define GL_PROGRAM_OBJECT_ARB 0x8b40
+#define GL_OBJECT_TYPE_ARB 0x8b4e
+#define GL_OBJECT_SUBTYPE_ARB 0x8b4f
+#define GL_OBJECT_DELETE_STATUS_ARB 0x8b80
+#define GL_OBJECT_COMPILE_STATUS_ARB 0x8b81
+#define GL_OBJECT_LINK_STATUS_ARB 0x8b82
+#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8b83
+#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8b84
+#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8b85
+#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8b86
+#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8b87
+#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8b88
+#define GL_SHADER_OBJECT_ARB 0x8b48
+#define GL_FLOAT_VEC2_ARB 0x8b50
+#define GL_FLOAT_VEC3_ARB 0x8b51
+#define GL_FLOAT_VEC4_ARB 0x8b52
+#define GL_INT_VEC2_ARB 0x8b53
+#define GL_INT_VEC3_ARB 0x8b54
+#define GL_INT_VEC4_ARB 0x8b55
+#define GL_BOOL_ARB 0x8b56
+#define GL_BOOL_VEC2_ARB 0x8b57
+#define GL_BOOL_VEC3_ARB 0x8b58
+#define GL_BOOL_VEC4_ARB 0x8b59
+#define GL_FLOAT_MAT2_ARB 0x8b5a
+#define GL_FLOAT_MAT3_ARB 0x8b5b
+#define GL_FLOAT_MAT4_ARB 0x8b5c
+#define GL_SAMPLER_1D_ARB 0x8b5d
+#define GL_SAMPLER_2D_ARB 0x8b5e
+#define GL_SAMPLER_3D_ARB 0x8b5f
+#define GL_SAMPLER_CUBE_ARB 0x8b60
+#define GL_SAMPLER_1D_SHADOW_ARB 0x8b61
+#define GL_SAMPLER_2D_SHADOW_ARB 0x8b62
+#define GL_SAMPLER_2D_RECT_ARB 0x8b63
+#define GL_SAMPELR_2D_RECT_SHADOW_ARB 0x8b64
+#endif
+
+/* GL_ARB_shading_language_100 */
+#ifndef GL_ARB_shading_language_100
+#define GL_ARB_shading_language_100 1
+#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8b8c
+#endif
+
+/* GL_ARB_sync */
+#ifndef GL_ARB_sync
+#define GL_ARB_sync 1
+#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
+#define GL_OBJECT_TYPE 0x9112
+#define GL_SYNC_CONDITION 0x9113
+#define GL_SYNC_STATUS 0x9114
+#define GL_SYNC_FLAGS 0x9115
+#define GL_SYNC_FENCE 0x9116
+#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
+#define GL_UNSIGNALED 0x9118
+#define GL_SIGNALED 0x9119
+#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
+#define GL_TIMEOUT_IGNORED 0xffffffffffffffffULL
+#define GL_ALREADY_SIGNALED 0x911a
+#define GL_TIMEOUT_EXPIRED 0x911b
+#define GL_CONDITION_SATISFIED 0x911c
+#define GL_WAIT_FAILED 0x911d
+#endif
+typedef GLsync (WINE_GLAPI *PGLFNFENCESYNCPROC)(GLenum condition, GLbitfield flags);
+typedef GLboolean (WINE_GLAPI *PGLFNISSYNCPROC)(GLsync sync);
+typedef GLvoid (WINE_GLAPI *PGLFNDELETESYNCPROC)(GLsync sync);
+typedef GLenum (WINE_GLAPI *PGLFNCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef GLvoid (WINE_GLAPI *PGLFNWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout);
+typedef GLvoid (WINE_GLAPI *PGLFNGETINTEGER64VPROC)(GLenum pname, GLint64 *params);
+typedef GLvoid (WINE_GLAPI *PGLFNGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei bufsize,
+ GLsizei *length, GLint *values);
+
+/* GL_ARB_texture_border_clamp */
+#ifndef GL_ARB_texture_border_clamp
+#define GL_ARB_texture_border_clamp 1
+#define GL_CLAMP_TO_BORDER_ARB 0x812d
+#endif
+
+/* GL_ARB_texture_cube_map */
+#ifndef GL_ARB_texture_cube_map
+#define GL_ARB_texture_cube_map 1
+#define GL_NORMAL_MAP_ARB 0x8511
+#define GL_REFLECTION_MAP_ARB 0x8512
+#define GL_TEXTURE_CUBE_MAP_ARB 0x8513
+#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518
+#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519
+#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851a
+#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851b
+#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851c
+#endif
+
+/* GL_ARB_texture_env_dot3 */
+#ifndef GL_ARB_texture_env_dot3
+#define GL_ARB_texture_env_dot3 1
+#define GL_DOT3_RGB_ARB 0x86ae
+#define GL_DOT3_RGBA_ARB 0x86af
+#endif
+
+/* GL_ARB_texture_float */
+#ifndef GL_ARB_texture_float
+#define GL_ARB_texture_float 1
+#define GL_RGBA32F_ARB 0x8814
+#define GL_RGB32F_ARB 0x8815
+#define GL_RGBA16F_ARB 0x881a
+#define GL_RGB16F_ARB 0x881b
+#endif
+
+/* GL_ARB_texture_mirrored_repeat */
+#ifndef GL_ARB_texture_mirrored_repeat
+#define GL_ARB_texture_mirrored_repeat 1
+#define GL_MIRRORED_REPEAT_ARB 0x8370
+#endif
+
+/* GL_ARB_texture_rectangle */
+#ifndef GL_ARB_texture_rectangle
+#define GL_ARB_texture_rectangle 1
+#define GL_TEXTURE_RECTANGLE_ARB 0x84f5
+#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84f6
+#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84f7
+#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84f8
+#define GL_SAMPLER_2D_RECT_ARB 0x8b63
+#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8b64
+#endif
+
+/* GL_ARB_texture_rg */
+#ifndef GL_ARB_texture_rg
+#define GL_ARB_texture_rg 1
+#define GL_RG 0x8227
+#define GL_RG_INTEGER 0x8228
+#define GL_R8 0x8229
+#define GL_R16 0x822a
+#define GL_RG8 0x822b
+#define GL_RG16 0x822c
+#define GL_R16F 0x822d
+#define GL_R32F 0x822e
+#define GL_RG16F 0x822f
+#define GL_RG32F 0x8230
+#define GL_R8I 0x8231
+#define GL_R8UI 0x8232
+#define GL_R16I 0x8233
+#define GL_R16UI 0x8234
+#define GL_R32I 0x8235
+#define GL_R32UI 0x8236
+#define GL_RG8I 0x8237
+#define GL_RG8UI 0x8238
+#define GL_RG16I 0x8239
+#define GL_RG16UI 0x823a
+#define GL_RG32I 0x823b
+#define GL_RG32UI 0x823c
#endif
-typedef void (WINE_GLAPI * PGLFNGLPROVOKINGVERTEXPROC)(GLenum mode);
/* GL_ARB_vertex_blend */
#ifndef GL_ARB_vertex_blend
#define GL_ARB_vertex_blend 1
-#define GL_MAX_VERTEX_UNITS_ARB 0x86A4
-#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5
-#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6
-#define GL_VERTEX_BLEND_ARB 0x86A7
-#define GL_CURRENT_WEIGHT_ARB 0x86A8
-#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9
-#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA
-#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB
-#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC
-#define GL_WEIGHT_ARRAY_ARB 0x86AD
-#define GL_MODELVIEW0_ARB 0x1700
-#define GL_MODELVIEW1_ARB 0x850A
-#define GL_MODELVIEW2_ARB 0x8722
-#define GL_MODELVIEW3_ARB 0x8723
-#define GL_MODELVIEW4_ARB 0x8724
-#define GL_MODELVIEW5_ARB 0x8725
-#define GL_MODELVIEW6_ARB 0x8726
-#define GL_MODELVIEW7_ARB 0x8727
-#define GL_MODELVIEW8_ARB 0x8728
-#define GL_MODELVIEW9_ARB 0x8729
-#define GL_MODELVIEW10_ARB 0x872A
-#define GL_MODELVIEW11_ARB 0x872B
-#define GL_MODELVIEW12_ARB 0x872C
-#define GL_MODELVIEW13_ARB 0x872D
-#define GL_MODELVIEW14_ARB 0x872E
-#define GL_MODELVIEW15_ARB 0x872F
-#define GL_MODELVIEW16_ARB 0x8730
-#define GL_MODELVIEW17_ARB 0x8731
-#define GL_MODELVIEW18_ARB 0x8732
-#define GL_MODELVIEW19_ARB 0x8733
-#define GL_MODELVIEW20_ARB 0x8734
-#define GL_MODELVIEW21_ARB 0x8735
-#define GL_MODELVIEW22_ARB 0x8736
-#define GL_MODELVIEW23_ARB 0x8737
-#define GL_MODELVIEW24_ARB 0x8738
-#define GL_MODELVIEW25_ARB 0x8739
-#define GL_MODELVIEW26_ARB 0x873A
-#define GL_MODELVIEW27_ARB 0x873B
-#define GL_MODELVIEW28_ARB 0x873C
-#define GL_MODELVIEW29_ARB 0x873D
-#define GL_MODELVIEW30_ARB 0x873E
-#define GL_MODELVIEW31_ARB 0x873F
+#define GL_MAX_VERTEX_UNITS_ARB 0x86a4
+#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86a5
+#define GL_WEIGHT_SUM_UNITY_ARB 0x86a6
+#define GL_VERTEX_BLEND_ARB 0x86a7
+#define GL_CURRENT_WEIGHT_ARB 0x86a8
+#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86a9
+#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86aa
+#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86ab
+#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86ac
+#define GL_WEIGHT_ARRAY_ARB 0x86ad
+#define GL_MODELVIEW0_ARB 0x1700
+#define GL_MODELVIEW1_ARB 0x850a
+#define GL_MODELVIEW2_ARB 0x8722
+#define GL_MODELVIEW3_ARB 0x8723
+#define GL_MODELVIEW4_ARB 0x8724
+#define GL_MODELVIEW5_ARB 0x8725
+#define GL_MODELVIEW6_ARB 0x8726
+#define GL_MODELVIEW7_ARB 0x8727
+#define GL_MODELVIEW8_ARB 0x8728
+#define GL_MODELVIEW9_ARB 0x8729
+#define GL_MODELVIEW10_ARB 0x872a
+#define GL_MODELVIEW11_ARB 0x872b
+#define GL_MODELVIEW12_ARB 0x872c
+#define GL_MODELVIEW13_ARB 0x872d
+#define GL_MODELVIEW14_ARB 0x872e
+#define GL_MODELVIEW15_ARB 0x872f
+#define GL_MODELVIEW16_ARB 0x8730
+#define GL_MODELVIEW17_ARB 0x8731
+#define GL_MODELVIEW18_ARB 0x8732
+#define GL_MODELVIEW19_ARB 0x8733
+#define GL_MODELVIEW20_ARB 0x8734
+#define GL_MODELVIEW21_ARB 0x8735
+#define GL_MODELVIEW22_ARB 0x8736
+#define GL_MODELVIEW23_ARB 0x8737
+#define GL_MODELVIEW24_ARB 0x8738
+#define GL_MODELVIEW25_ARB 0x8739
+#define GL_MODELVIEW26_ARB 0x873a
+#define GL_MODELVIEW27_ARB 0x873b
+#define GL_MODELVIEW28_ARB 0x873c
+#define GL_MODELVIEW29_ARB 0x873d
+#define GL_MODELVIEW30_ARB 0x873e
+#define GL_MODELVIEW31_ARB 0x873f
#endif
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTPOINTERARB) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTBV) (GLint size, const GLbyte *weights);
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTSV) (GLint size, const GLshort *weights);
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTIV) (GLint size, const GLint *weights);
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTFV) (GLint size, const GLfloat *weights);
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTDV) (GLint size, const GLdouble *weights);
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTUBV) (GLint size, const GLubyte *weights);
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTUSV) (GLint size, const GLushort *weights);
-typedef void (WINE_GLAPI * PGLFNGLWEIGHTUIV) (GLint size, const GLuint *weights);
-typedef void (WINE_GLAPI * PGLFNGLVERTEXBLENDARB) (GLint count);
-/* GL_ARB_pixel_buffer_object */
-#ifndef GL_ARB_pixel_buffer_object
-#define GL_ARB_pixel_buffer_object 1
-#endif
-#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
-#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
-#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
-#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
-/* GL_EXT_framebuffer_object */
-#ifndef GL_EXT_framebuffer_object
-#define GL_EXT_framebuffer_object 1
-#define GL_FRAMEBUFFER_EXT 0x8D40
-#define GL_RENDERBUFFER_EXT 0x8D41
-#define GL_STENCIL_INDEX1_EXT 0x8D46
-#define GL_STENCIL_INDEX4_EXT 0x8D47
-#define GL_STENCIL_INDEX8_EXT 0x8D48
-#define GL_STENCIL_INDEX16_EXT 0x8D49
-#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42
-#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43
-#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44
-#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50
-#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51
-#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52
-#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53
-#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54
-#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55
-#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0
-#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1
-#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2
-#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3
-#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4
-#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0
-#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1
-#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2
-#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3
-#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4
-#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5
-#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6
-#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7
-#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8
-#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9
-#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA
-#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB
-#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC
-#define GL_COLOR_ATTACHMENT13_EXT 0x8CED
-#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE
-#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF
-#define GL_DEPTH_ATTACHMENT_EXT 0x8D00
-#define GL_STENCIL_ATTACHMENT_EXT 0x8D20
-#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5
-#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6
-#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7
-#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9
-#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA
-#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB
-#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC
-#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD
-#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6
-#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7
-#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF
-#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8
-#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTPOINTERARB)(GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTBV)(GLint size, const GLbyte *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTSV)(GLint size, const GLshort *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTIV)(GLint size, const GLint *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTFV)(GLint size, const GLfloat *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTDV)(GLint size, const GLdouble *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUBV)(GLint size, const GLubyte *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUSV)(GLint size, const GLushort *weights);
+typedef void (WINE_GLAPI *PGLFNGLWEIGHTUIV)(GLint size, const GLuint *weights);
+typedef void (WINE_GLAPI *PGLFNGLVERTEXBLENDARB)(GLint count);
+/* GL_ARB_vertex_buffer_object */
+#ifndef GL_ARB_vertex_buffer_object
+#define GL_ARB_vertex_buffer_object 1
+#define GL_BUFFER_SIZE_ARB 0x8764
+#define GL_BUFFER_USAGE_ARB 0x8765
+#define GL_ARRAY_BUFFER_ARB 0x8892
+#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
+#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
+#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
+#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
+#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
+#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
+#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
+#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889a
+#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889b
+#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889c
+#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889d
+#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889e
+#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889f
+#define GL_READ_ONLY_ARB 0x88b8
+#define GL_WRITE_ONLY_ARB 0x88b9
+#define GL_READ_WRITE_ARB 0x88ba
+#define GL_BUFFER_ACCESS_ARB 0x88bb
+#define GL_BUFFER_MAPPED_ARB 0x88bc
+#define GL_BUFFER_MAP_POINTER_ARB 0x88bd
+#define GL_STREAM_DRAW_ARB 0x88e0
+#define GL_STREAM_READ_ARB 0x88e1
+#define GL_STREAM_COPY_ARB 0x88e2
+#define GL_STATIC_DRAW_ARB 0x88e4
+#define GL_STATIC_READ_ARB 0x88e5
+#define GL_STATIC_COPY_ARB 0x88e6
+#define GL_DYNAMIC_DRAW_ARB 0x88e8
+#define GL_DYNAMIC_READ_ARB 0x88e9
+#define GL_DYNAMIC_COPY_ARB 0x88ea
#endif
-typedef GLboolean (WINE_GLAPI * PGLFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer);
-typedef void (WINE_GLAPI * PGLFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer);
-typedef void (WINE_GLAPI * PGLFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint *renderbuffers);
-typedef void (WINE_GLAPI * PGLFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint *renderbuffers);
-typedef void (WINE_GLAPI * PGLFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
-typedef void (WINE_GLAPI * PGLFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params);
-typedef GLboolean (WINE_GLAPI * PGLFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer);
-typedef void (WINE_GLAPI * PGLFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer);
-typedef void (WINE_GLAPI * PGLFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint *framebuffers);
-typedef void (WINE_GLAPI * PGLFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint *framebuffers);
-typedef GLenum (WINE_GLAPI * PGLFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);
-typedef void (WINE_GLAPI * PGLFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
-typedef void (WINE_GLAPI * PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGLGENERATEMIPMAPEXTPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNBINDBUFFERARBPROC)(GLenum target, GLuint buffer);
+typedef void (WINE_GLAPI *PGLFNDELETEBUFFERSARBPROC)(GLsizei n, const GLuint *buffers);
+typedef void (WINE_GLAPI *PGLFNGENBUFFERSARBPROC)(GLsizei n, GLuint *buffers);
+typedef GLboolean (WINE_GLAPI *PGLFNISBUFFERARBPROC)(GLuint buffer);
+typedef void (WINE_GLAPI *PGLFNBUFFERDATAARBPROC)(GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef void (WINE_GLAPI *PGLFNBUFFERSUBDATAARBPROC)(GLenum target,
+ GLintptr offset, GLsizeiptr size, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERSUBDATAARBPROC)(GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
+typedef GLvoid* (WINE_GLAPI *PGLFNMAPBUFFERARBPROC)(GLenum target, GLenum access);
+typedef GLboolean (WINE_GLAPI *PGLFNUNMAPBUFFERARBPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERPARAMETERIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETBUFFERPOINTERVARBPROC)(GLenum target, GLenum pname, GLvoid* *params);
+
+/* GL_ARB_vertex_program */
+#ifndef GL_ARB_vertex_program
+#define GL_ARB_vertex_program 1
+#define GL_VERTEX_PROGRAM_ARB 0x8620
+#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
+#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
+#define GL_COLOR_SUM_ARB 0x8458
+#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
+#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
+#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
+#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
+#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
+#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886a
+#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
+#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
+#define GL_PROGRAM_LENGTH_ARB 0x8627
+#define GL_PROGRAM_FORMAT_ARB 0x8876
+#define GL_PROGRAM_BINDING_ARB 0x8677
+#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88a0
+#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88a1
+#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88a2
+#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88a3
+#define GL_PROGRAM_TEMPORARIES_ARB 0x88a4
+#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88a5
+#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88a6
+#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88a7
+#define GL_PROGRAM_PARAMETERS_ARB 0x88a8
+#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88a9
+#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88aa
+#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88ab
+#define GL_PROGRAM_ATTRIBS_ARB 0x88ac
+#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88ad
+#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88ae
+#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88af
+#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88b0
+#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88b1
+#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88b2
+#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88b3
+#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88b4
+#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88b5
+#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88b6
+#define GL_PROGRAM_STRING_ARB 0x8628
+#define GL_PROGRAM_ERROR_POSITION_ARB 0x864b
+#define GL_CURRENT_MATRIX_ARB 0x8641
+#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88b7
+#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
+#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
+#define GL_MAX_PROGRAM_MATRICES_ARB 0x862f
+#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862e
+#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
+#define GL_MATRIX0_ARB 0x88c0
+#define GL_MATRIX1_ARB 0x88c1
+#define GL_MATRIX2_ARB 0x88c2
+#define GL_MATRIX3_ARB 0x88c3
+#define GL_MATRIX4_ARB 0x88c4
+#define GL_MATRIX5_ARB 0x88c5
+#define GL_MATRIX6_ARB 0x88c6
+#define GL_MATRIX7_ARB 0x88c7
+#define GL_MATRIX8_ARB 0x88c8
+#define GL_MATRIX9_ARB 0x88c9
+#define GL_MATRIX10_ARB 0x88ca
+#define GL_MATRIX11_ARB 0x88cb
+#define GL_MATRIX12_ARB 0x88cc
+#define GL_MATRIX13_ARB 0x88cd
+#define GL_MATRIX14_ARB 0x88ce
+#define GL_MATRIX15_ARB 0x88cf
+#define GL_MATRIX16_ARB 0x88d0
+#define GL_MATRIX17_ARB 0x88d1
+#define GL_MATRIX18_ARB 0x88d2
+#define GL_MATRIX19_ARB 0x88d3
+#define GL_MATRIX20_ARB 0x88d4
+#define GL_MATRIX21_ARB 0x88d5
+#define GL_MATRIX22_ARB 0x88d6
+#define GL_MATRIX23_ARB 0x88d7
+#define GL_MATRIX24_ARB 0x88d8
+#define GL_MATRIX25_ARB 0x88d9
+#define GL_MATRIX26_ARB 0x88da
+#define GL_MATRIX27_ARB 0x88db
+#define GL_MATRIX28_ARB 0x88dc
+#define GL_MATRIX29_ARB 0x88dd
+#define GL_MATRIX30_ARB 0x88de
+#define GL_MATRIX31_ARB 0x88df
+#endif
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DARBPROC)(GLuint index, GLdouble x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FARBPROC)(GLuint index, GLfloat x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SARBPROC)(GLuint index, GLshort x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DARBPROC)(GLuint index, GLdouble x, GLdouble y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FARBPROC)(GLuint index, GLfloat x, GLfloat y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SARBPROC)(GLuint index, GLshort x, GLshort y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NBVARBPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NIVARBPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NSVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBARBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUBVARBPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUIVARBPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4NUSVARBPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4BVARBPROC)(GLuint index, const GLbyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DARBPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4DVARBPROC)(GLuint index, const GLdouble *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FARBPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4FVARBPROC)(GLuint index, const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4IVARBPROC)(GLuint index, const GLint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SARBPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4SVARBPROC)(GLuint index, const GLshort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UBVARBPROC)(GLuint index, const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4UIVARBPROC)(GLuint index, const GLuint *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4USVARBPROC)(GLuint index, const GLushort *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBPOINTERARBPROC)(GLuint index, GLint size,
+ GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+typedef void (WINE_GLAPI *PGLFNENABLEVERTEXATTRIBARRAYARBPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNDISABLEVERTEXATTRIBARRAYARBPROC)(GLuint index);
+typedef void (WINE_GLAPI *PGLFNPROGRAMSTRINGARBPROC)(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
+typedef void (WINE_GLAPI *PGLFNBINDPROGRAMARBPROC)(GLenum target, GLuint program);
+typedef void (WINE_GLAPI *PGLFNDELETEPROGRAMSARBPROC)(GLsizei n, const GLuint *programs);
+typedef void (WINE_GLAPI *PGLFNGENPROGRAMSARBPROC)(GLsizei n, GLuint *programs);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4DARBPROC)(GLenum target,
+ GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4FARBPROC)(GLenum target,
+ GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4DARBPROC)(GLenum target,
+ GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4DVARBPROC)(GLenum target, GLuint index, const GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4FARBPROC)(GLenum target,
+ GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETER4FVARBPROC)(GLenum target, GLuint index, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMENVPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMENVPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMLOCALPARAMETERDVARBPROC)(GLenum target, GLuint index, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMLOCALPARAMETERFVARBPROC)(GLenum target, GLuint index, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMIVARBPROC)(GLenum target, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETPROGRAMSTRINGARBPROC)(GLenum target, GLenum pname, GLvoid *string);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBDVARBPROC)(GLuint index, GLenum pname, GLdouble *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBFVARBPROC)(GLuint index, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBIVARBPROC)(GLuint index, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETVERTEXATTRIBPOINTERVARBPROC)(GLuint index, GLenum pname, GLvoid* *pointer);
+typedef GLboolean (WINE_GLAPI *PGLFNISPROGRAMARBPROC)(GLuint program);
+
+/* GL_ARB_vertex_shader */
+#ifndef GL_ARB_vertex_shader
+#define GL_ARB_vertex_shader 1
+#define GL_VERTEX_SHADER_ARB 0x8b31
+#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8b4a
+#define GL_MAX_VARYING_FLOATS_ARB 0x8b4b
+#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8b4c
+#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8b4d
+#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8b89
+#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8b8a
+#endif
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC)(GLhandleARB obj, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC)(GLhandleARB obj, GLenum pname, GLfloat *params);
+typedef GLint (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB *name);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETACTIVEUNIFORMARBPROC)(GLhandleARB programObj, GLuint index,
+ GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1IARBPROC)(GLint location, GLint v0);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2IARBPROC)(GLint location, GLint v0, GLint v1);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4IARBPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1FARBPROC)(GLint location, GLfloat v0);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2FARBPROC)(GLint location, GLfloat v0, GLfloat v1);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3FARBPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4FARBPROC)(GLint location,
+ GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4IVARBPROC)(GLint location, GLsizei count, const GLint *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM1FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM2FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM3FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORM4FVARBPROC)(GLint location, GLsizei count, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC)(GLint location,
+ GLsizei count, GLboolean transpose, const GLfloat *value);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMFVARBPROC)(GLhandleARB programObj, GLint location, GLfloat *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETUNIFORMIVARBPROC)(GLhandleARB programObj, GLint location, GLint *params);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETINFOLOGARBPROC)(GLhandleARB obj,
+ GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
+typedef void (WINE_GLAPI *WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC)(GLhandleARB programObj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLCREATESHADEROBJECTARBPROC)(GLenum shaderType);
+typedef void (WINE_GLAPI *WINED3D_PFNGLSHADERSOURCEARBPROC)(GLhandleARB shaderObj,
+ GLsizei count, const GLcharARB* *string, const GLint *length);
+typedef void (WINE_GLAPI *WINED3D_PFNGLCOMPILESHADERARBPROC)(GLhandleARB shaderObj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC)(void);
+typedef void (WINE_GLAPI *WINED3D_PFNGLATTACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB obj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLLINKPROGRAMARBPROC)(GLhandleARB programObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLDETACHOBJECTARBPROC)(GLhandleARB containerObj, GLhandleARB attachedObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLDELETEOBJECTARBPROC)(GLhandleARB obj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLVALIDATEPROGRAMARBPROC)(GLhandleARB programObj);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC)(GLhandleARB containerObj,
+ GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
+typedef GLhandleARB (WINE_GLAPI *WINED3D_PFNGLGETHANDLEARBPROC)(GLenum pname);
+typedef void (WINE_GLAPI *WINED3D_PFNGLGETSHADERSOURCEARBPROC)(GLhandleARB obj,
+ GLsizei maxLength, GLsizei *length, GLcharARB *source);
+typedef void (WINE_GLAPI *WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC)(GLhandleARB programObj,
+ GLuint index, const GLcharARB *name);
+typedef GLint (WINE_GLAPI *WINED3D_PFNGLGETATTRIBLOCATIONARBPROC)(GLhandleARB programObj, const GLcharARB *name);
+
+/* GL_ATI_fragment_shader */
+#ifndef GL_ATI_fragment_shader
+#define GL_ATI_fragment_shader 1
+#define GL_FRAGMENT_SHADER_ATI 0x8920
+#define GL_REG_0_ATI 0x8921
+#define GL_REG_1_ATI 0x8922
+#define GL_REG_2_ATI 0x8923
+#define GL_REG_3_ATI 0x8924
+#define GL_REG_4_ATI 0x8925
+#define GL_REG_5_ATI 0x8926
+#define GL_CON_0_ATI 0x8941
+#define GL_CON_1_ATI 0x8942
+#define GL_CON_2_ATI 0x8943
+#define GL_CON_3_ATI 0x8944
+#define GL_CON_4_ATI 0x8945
+#define GL_CON_5_ATI 0x8946
+#define GL_CON_6_ATI 0x8947
+#define GL_CON_7_ATI 0x8948
+#define GL_MOV_ATI 0x8961
+#define GL_ADD_ATI 0x8963
+#define GL_MUL_ATI 0x8964
+#define GL_SUB_ATI 0x8965
+#define GL_DOT3_ATI 0x8966
+#define GL_DOT4_ATI 0x8967
+#define GL_MAD_ATI 0x8968
+#define GL_LERP_ATI 0x8969
+#define GL_CND_ATI 0x896a
+#define GL_CND0_ATI 0x896b
+#define GL_DOT2_ADD_ATI 0x896c
+#define GL_SECONDARY_INTERPOLATOR_ATI 0x896d
+#define GL_SWIZZLE_STR_ATI 0x8976
+#define GL_SWIZZLE_STQ_ATI 0x8977
+#define GL_SWIZZLE_STR_DR_ATI 0x8978
+#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
+#define GL_RED_BIT_ATI 0x00000001
+#define GL_GREEN_BIT_ATI 0x00000002
+#define GL_BLUE_BIT_ATI 0x00000004
+#define GL_2X_BIT_ATI 0x00000001
+#define GL_4X_BIT_ATI 0x00000002
+#define GL_8X_BIT_ATI 0x00000004
+#define GL_HALF_BIT_ATI 0x00000008
+#define GL_QUARTER_BIT_ATI 0x00000010
+#define GL_EIGHTH_BIT_ATI 0x00000020
+#define GL_SATURATE_BIT_ATI 0x00000040
+#define GL_COMP_BIT_ATI 0x00000002
+#define GL_NEGATE_BIT_ATI 0x00000004
+#define GL_BIAS_BIT_ATI 0x00000008
+#endif
+typedef GLuint (WINE_GLAPI *PGLFNGENFRAGMENTSHADERSATI)(GLuint range);
+typedef void (WINE_GLAPI *PGLFNBINDFRAGMENTSHADERATI)(GLuint id);
+typedef void (WINE_GLAPI *PGLFNDELETEFRAGMENTSHADERATI)(GLuint id);
+typedef void (WINE_GLAPI *PGLFNBEGINFRAGMENTSHADERATI)(void);
+typedef void (WINE_GLAPI *PGLFNENDFRAGMENTSHADERATI)(void);
+typedef void (WINE_GLAPI *PGLFNPASSTEXCOORDATI)(GLuint dst, GLuint coord, GLenum swizzle);
+typedef void (WINE_GLAPI *PGLFNSAMPLEMAPATI)(GLuint dst, GLuint interp, GLenum swizzle);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP1ATI)(GLenum op, GLuint dst, GLuint dstMask,
+ GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP2ATI)(GLenum op, GLuint dst, GLuint dstMask,
+ GLuint dstMod, GLuint arg1, GLuint arg1Rep,
+ GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
+ GLuint arg2Mod);
+typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP3ATI)(GLenum op, GLuint dst, GLuint dstMask,
+ GLuint dstMod, GLuint arg1, GLuint arg1Rep,
+ GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
+ GLuint arg2Mod, GLuint arg3, GLuint arg3Rep,
+ GLuint arg3Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP1ATI)(GLenum op, GLuint dst, GLuint dstMod,
+ GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP2ATI)(GLenum op, GLuint dst, GLuint dstMod,
+ GLuint arg1, GLuint arg1Rep, GLuint arg1Mod,
+ GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
+typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP3ATI)(GLenum op, GLuint dst, GLuint dstMod,
+ GLuint arg1, GLuint arg1Rep, GLuint arg1Mod,
+ GLuint arg2, GLuint arg2Rep, GLuint arg2Mod,
+ GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
+typedef void (WINE_GLAPI *PGLFNSETFRAGMENTSHADERCONSTANTATI)(GLuint dst, const GLfloat *value);
+
+/* GL_ATI_separate_stencil */
+#ifndef GL_ATI_separate_stencil
+#define GL_ATI_separate_stencil 1
+#define GL_STENCIL_BACK_FUNC_ATI 0x8800
+#define GL_STENCIL_BACK_FAIL_ATI 0x8801
+#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
+#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
+#endif
+typedef void (WINE_GLAPI *PGLFNSTENCILOPSEPARATEATIPROC)(GLenum, GLenum, GLenum, GLenum);
+typedef void (WINE_GLAPI *PGLFNSTENCILFUNCSEPARATEATIPROC)(GLenum, GLenum, GLint, GLuint);
+
+/* GL_ATI_texture_compression_3dc */
+#ifndef GL_ATI_texture_compression_3dc
+#define GL_ATI_texture_compression_3dc 1
+#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837
+#endif
+
+/* GL_ATI_texture_env_combine3 */
+#ifndef GL_ATI_texture_env_combine3
+#define GL_ATI_texture_env_combine3 1
+#define GL_MODULATE_ADD_ATI 0x8744
+#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
+#define GL_MODULATE_SUBTRACT_ATI 0x8746
+/* #define ONE */
+/* #define ZERO */
+#endif
+
+/* GL_ATI_texture_mirror_once */
+#ifndef GL_ATI_texture_mirror_once
+#define GL_ATI_texture_mirror_once 1
+#define GL_MIRROR_CLAMP_ATI 0x8742
+#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
+#endif
+
+/* GL_EXT_blend_equation_separate */
+typedef void (WINE_GLAPI *PGLFNBLENDEQUATIONSEPARATEEXTPROC)(GLenum modeRGB, GLenum modeAlpha);
+
+/* GL_EXT_blend_func_separate */
+#ifndef GL_EXT_blend_func_separate
+#define GL_EXT_blend_func_separate 1
+#define GL_BLEND_DST_RGB_EXT 0x80c8
+#define GL_BLEND_SRC_RGB_EXT 0x80c9
+#define GL_BLEND_DST_ALPHA_EXT 0x80ca
+#define GL_BLEND_SRC_ALPHA_EXT 0x80cb
+#endif
+typedef void (WINE_GLAPI *PGLFNBLENDFUNCSEPARATEEXTPROC)(GLenum sfactorRGB, GLenum dfactorRGB,
+ GLenum sfactorAlpha, GLenum dfactorAlpha);
+
+/* GL_EXT_fog_coord */
+#ifndef GL_EXT_fog_coord
+#define GL_EXT_fog_coord 1
+#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
+#define GL_FOG_COORDINATE_EXT 0x8451
+#define GL_FRAGMENT_DEPTH_EXT 0x8452
+#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
+#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
+#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
+#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
+#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
+#endif
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDFEXTPROC)(GLfloat coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDFVEXTPROC)(const GLfloat *coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDDEXTPROC)(GLdouble coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDDVEXTPROC)(const GLdouble *coord);
+typedef void (WINE_GLAPI *PGLFNGLFOGCOORDPOINTEREXTPROC)(GLenum type, GLsizei stride, GLvoid *data);
+
/* GL_EXT_framebuffer_blit */
#ifndef GL_EXT_framebuffer_blit
#define GL_EXT_framebuffer_blit 1
-#define GL_READ_FRAMEBUFFER_EXT 0x8CA8
-#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9
-#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6
-#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA
+#define GL_READ_FRAMEBUFFER_EXT 0x8ca8
+#define GL_DRAW_FRAMEBUFFER_EXT 0x8ca9
+#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8ca6
+#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8caa
#endif
-typedef void (WINE_GLAPI * PGLFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
+typedef void (WINE_GLAPI *PGLFNGLBLITFRAMEBUFFEREXTPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
/* GL_EXT_framebuffer_multisample */
#ifndef GL_EXT_framebuffer_multisample
#define GL_EXT_framebuffer_multisample 1
-#define GL_RENDERBUFFER_SAMPLES_EXT 0x8cab
-#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8d56
-#define GL_MAX_SAMPLES_EXT 0x8d57
+#define GL_RENDERBUFFER_SAMPLES_EXT 0x8cab
+#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8d56
+#define GL_MAX_SAMPLES_EXT 0x8d57
#endif
-typedef void (WINE_GLAPI * PGLFNRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (WINE_GLAPI *PGLFNRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC)(GLenum target, GLsizei samples,
+ GLenum internalformat, GLsizei width, GLsizei height);
+
+/* GL_EXT_framebuffer_object */
+#ifndef GL_EXT_framebuffer_object
+#define GL_EXT_framebuffer_object 1
+#define GL_FRAMEBUFFER_EXT 0x8d40
+#define GL_RENDERBUFFER_EXT 0x8d41
+#define GL_STENCIL_INDEX1_EXT 0x8d46
+#define GL_STENCIL_INDEX4_EXT 0x8d47
+#define GL_STENCIL_INDEX8_EXT 0x8d48
+#define GL_STENCIL_INDEX16_EXT 0x8d49
+#define GL_RENDERBUFFER_WIDTH_EXT 0x8d42
+#define GL_RENDERBUFFER_HEIGHT_EXT 0x8d43
+#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8d44
+#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8d50
+#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8d51
+#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8d52
+#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8d53
+#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8d54
+#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8d55
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8cd0
+#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8cd1
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8cd2
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8cd3
+#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8cd4
+#define GL_COLOR_ATTACHMENT0_EXT 0x8ce0
+#define GL_COLOR_ATTACHMENT1_EXT 0x8ce1
+#define GL_COLOR_ATTACHMENT2_EXT 0x8ce2
+#define GL_COLOR_ATTACHMENT3_EXT 0x8ce3
+#define GL_COLOR_ATTACHMENT4_EXT 0x8ce4
+#define GL_COLOR_ATTACHMENT5_EXT 0x8ce5
+#define GL_COLOR_ATTACHMENT6_EXT 0x8ce6
+#define GL_COLOR_ATTACHMENT7_EXT 0x8ce7
+#define GL_COLOR_ATTACHMENT8_EXT 0x8ce8
+#define GL_COLOR_ATTACHMENT9_EXT 0x8ce9
+#define GL_COLOR_ATTACHMENT10_EXT 0x8cea
+#define GL_COLOR_ATTACHMENT11_EXT 0x8ceb
+#define GL_COLOR_ATTACHMENT12_EXT 0x8cec
+#define GL_COLOR_ATTACHMENT13_EXT 0x8ced
+#define GL_COLOR_ATTACHMENT14_EXT 0x8cee
+#define GL_COLOR_ATTACHMENT15_EXT 0x8cef
+#define GL_DEPTH_ATTACHMENT_EXT 0x8d00
+#define GL_STENCIL_ATTACHMENT_EXT 0x8d20
+#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8cd5
+#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8cd6
+#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8cd7
+#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8cd9
+#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8cda
+#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8cdb
+#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8cdc
+#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8cdd
+#define GL_FRAMEBUFFER_BINDING_EXT 0x8ca6
+#define GL_RENDERBUFFER_BINDING_EXT 0x8ca7
+#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8cdF
+#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84e8
+#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506
+#endif
+typedef GLboolean (WINE_GLAPI *PGLFNGLISRENDERBUFFEREXTPROC)(GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDRENDERBUFFEREXTPROC)(GLenum target, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETERENDERBUFFERSEXTPROC)(GLsizei n, const GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENRENDERBUFFERSEXTPROC)(GLsizei n, GLuint *renderbuffers);
+typedef void (WINE_GLAPI *PGLFNGLRENDERBUFFERSTORAGEEXTPROC)(GLenum target,
+ GLenum internalformat, GLsizei width, GLsizei height);
+typedef void (WINE_GLAPI *PGLFNGLGETRENDERBUFFERPARAMETERIVEXTPROC)(GLenum target, GLenum pname, GLint *params);
+typedef GLboolean (WINE_GLAPI *PGLFNGLISFRAMEBUFFEREXTPROC)(GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLBINDFRAMEBUFFEREXTPROC)(GLenum target, GLuint framebuffer);
+typedef void (WINE_GLAPI *PGLFNGLDELETEFRAMEBUFFERSEXTPROC)(GLsizei n, const GLuint *framebuffers);
+typedef void (WINE_GLAPI *PGLFNGLGENFRAMEBUFFERSEXTPROC)(GLsizei n, GLuint *framebuffers);
+typedef GLenum (WINE_GLAPI *PGLFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)(GLenum target);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE1DEXTPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE2DEXTPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERTEXTURE3DEXTPROC)(GLenum target, GLenum attachment,
+ GLenum textarget, GLuint texture, GLint level, GLint zoffset);
+typedef void (WINE_GLAPI *PGLFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)(GLenum target, GLenum attachment,
+ GLenum renderbuffertarget, GLuint renderbuffer);
+typedef void (WINE_GLAPI *PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC)(GLenum target,
+ GLenum attachment, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGLGENERATEMIPMAPEXTPROC)(GLenum target);
+
+/* GL_EXT_gpu_program_parameters */
+#ifndef GL_EXT_gpu_program_parameters
+#define GL_EXT_gpu_program_parameters 1
+typedef void (WINE_GLAPI *PGLFNPROGRAMENVPARAMETERS4FVEXTPROC)(GLenum target,
+ GLuint index, GLsizei count, const float *params);
+typedef void (WINE_GLAPI *PGLFNPROGRAMLOCALPARAMETERS4FVEXTPROC)(GLenum target,
+ GLuint index, GLsizei count, const float *params);
+#endif
+
+/* GL_EXT_gpu_shader4 */
+#ifndef GL_EXT_gpu_shader4
+#define GL_EXT_gpu_shader4 1
+#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88fd
+#define GL_SAMPLER_1D_ARRAY_EXT 0x8dc0
+#define GL_SAMPLER_2D_ARRAY_EXT 0x8dc1
+#define GL_SAMPLER_BUFFER_EXT 0x8dc2
+#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8dc3
+#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8dc4
+#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8dc5
+#define GL_UNSIGNED_INT_VEC2_EXT 0x8dc6
+#define GL_UNSIGNED_INT_VEC3_EXT 0x8dc7
+#define GL_UNSIGNED_INT_VEC4_EXT 0x8dc8
+#define GL_INT_SAMPLER_1D_EXT 0x8dc9
+#define GL_INT_SAMPLER_2D_EXT 0x8dca
+#define GL_INT_SAMPLER_3D_EXT 0x8dcb
+#define GL_INT_SAMPLER_CUBE_EXT 0x8dcc
+#define GL_INT_SAMPLER_2D_RECT_EXT 0x8dcd
+#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8dce
+#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8dcf
+#define GL_INT_SAMPLER_BUFFER_EXT 0x8dd0
+#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8dd1
+#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8dd2
+#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8dd3
+#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8dd4
+#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8dd5
+#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8dd6
+#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8dd7
+#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8dd8
+#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904
+#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905
+#endif
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1IEXTPROC)(GLuint index, GLint x);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2IEXTPROC)(GLuint index, GLint x, GLint y);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3IEXTPROC)(GLuint index, GLint x, GLint y, GLint z);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4IEXTPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1UIEXTPROC)(GLuint index, GLuint x);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2UIEXTPROC)(GLuint index, GLuint x, GLuint y);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UIEXTPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4IVEXTPROC)(GLuint index, const GLint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI1UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI2UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI3UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UIVEXTPROC)(GLuint index, const GLuint *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4BVEXTPROC)(GLuint index, const GLbyte *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4SVEXTPROC)(GLuint index, const GLshort *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4UBVEXTPROC)(GLuint index, const GLubyte *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBI4USVEXTPROC)(GLuint index, const GLushort *v);
+typedef GLvoid (WINE_GLAPI *PGLFNVERTEXATTRIBIPOINTEREXTPROC)(GLuint index, GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer);
+typedef GLvoid (WINE_GLAPI *PGLFNGETVERTEXATTRIBIIVEXTPROC)(GLuint index, GLenum pname, GLint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNGETVERTEXATTRIBIUIVEXTPROC)(GLuint index, GLenum pname, GLuint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM1UIEXTPROC)(GLint location, GLuint v0);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM2UIEXTPROC)(GLint location, GLuint v0, GLuint v1);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM3UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM4UIEXTPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM1UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM2UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM3UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNUNIFORM4UIVEXTPROC)(GLint location, GLsizei count, const GLuint *value);
+typedef GLvoid (WINE_GLAPI *PGLFNGETUNIFORMUIVEXTPROC)(GLuint program, GLint location, const GLuint *params);
+typedef GLvoid (WINE_GLAPI *PGLFNBINDFRAGDATALOCATIONEXTPROC)(GLuint program, GLuint color_number, const GLchar *name);
+typedef GLint (WINE_GLAPI *PGLFNGETFRAGDATALOCATIONEXTPROC)(GLuint program, const GLchar *name);
/* GL_EXT_packed_depth_stencil */
#ifndef GL_EXT_packed_depth_stencil
#define GL_EXT_packed_depth_stencil 1
-#define GL_DEPTH_STENCIL_EXT 0x84f9
-#define GL_UNSIGNED_INT_24_8_EXT 0x84fa
-#define GL_DEPTH24_STENCIL8_EXT 0x88f0
-#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88f1
+#define GL_DEPTH_STENCIL_EXT 0x84f9
+#define GL_UNSIGNED_INT_24_8_EXT 0x84fa
+#define GL_DEPTH24_STENCIL8_EXT 0x88f0
+#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88f1
#endif
-/* GL_EXT_secondary_color */
-#ifndef GL_EXT_secondary_color
-#define GL_EXT_secondary_color 1
-#define GL_COLOR_SUM_EXT 0x8458
-#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
-#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A
-#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B
-#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C
-#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D
-#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E
-#endif
-typedef void (WINE_GLAPI * PGLFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);
-typedef void (WINE_GLAPI * PGLFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);
-typedef void (WINE_GLAPI * PGLFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);
-typedef void (WINE_GLAPI * PGLFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);
/* GL_EXT_paletted_texture */
#ifndef GL_EXT_paletted_texture
#define GL_EXT_paletted_texture 1
-#define GL_COLOR_INDEX1_EXT 0x80E2
-#define GL_COLOR_INDEX2_EXT 0x80E3
-#define GL_COLOR_INDEX4_EXT 0x80E4
-#define GL_COLOR_INDEX8_EXT 0x80E5
-#define GL_COLOR_INDEX12_EXT 0x80E6
-#define GL_COLOR_INDEX16_EXT 0x80E7
-#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
+#define GL_COLOR_INDEX1_EXT 0x80e2
+#define GL_COLOR_INDEX2_EXT 0x80e3
+#define GL_COLOR_INDEX4_EXT 0x80e4
+#define GL_COLOR_INDEX8_EXT 0x80e5
+#define GL_COLOR_INDEX12_EXT 0x80e6
+#define GL_COLOR_INDEX16_EXT 0x80e7
+#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ed
#endif
-typedef void (WINE_GLAPI * PGLFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+typedef void (WINE_GLAPI *PGLFNGLCOLORTABLEEXTPROC)(GLenum target, GLenum internalFormat,
+ GLsizei width, GLenum format, GLenum type, const GLvoid *table);
+
/* GL_EXT_point_parameters */
#ifndef GL_EXT_point_parameters
#define GL_EXT_point_parameters 1
-#define GL_POINT_SIZE_MIN_EXT 0x8126
-#define GL_POINT_SIZE_MAX_EXT 0x8127
-#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
-#define GL_DISTANCE_ATTENUATION_EXT 0x8129
+#define GL_POINT_SIZE_MIN_EXT 0x8126
+#define GL_POINT_SIZE_MAX_EXT 0x8127
+#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128
+#define GL_DISTANCE_ATTENUATION_EXT 0x8129
#endif
-typedef void (WINE_GLAPI * PGLFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);
-typedef void (WINE_GLAPI * PGLFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFEXTPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNGLPOINTPARAMETERFVEXTPROC)(GLenum pname, const GLfloat *params);
/* GL_EXT_provoking_vertex */
#ifndef GL_EXT_provoking_vertex
@@ -2109,2025 +3196,1304 @@ typedef void (WINE_GLAPI * PGLFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const
#define GL_PROVOKING_VERTEX_EXT 0x8e4f
#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8e4c
#endif
-typedef void (WINE_GLAPI * PGLFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode);
+typedef void (WINE_GLAPI *PGLFNGLPROVOKINGVERTEXEXTPROC)(GLenum mode);
+
+/* GL_EXT_secondary_color */
+#ifndef GL_EXT_secondary_color
+#define GL_EXT_secondary_color 1
+#define GL_COLOR_SUM_EXT 0x8458
+#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459
+#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845a
+#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845b
+#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845c
+#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845d
+#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845e
+#endif
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3FEXTPROC)(GLfloat red, GLfloat green, GLfloat blue);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3FVEXTPROC)(const GLfloat *v);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3UBEXTPROC)(GLubyte red, GLubyte green, GLubyte blue);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLOR3UBVEXTPROC)(const GLubyte *v);
+typedef void (WINE_GLAPI *PGLFNGLSECONDARYCOLORPOINTEREXTPROC)(GLint size, GLenum type,
+ GLsizei stride, const GLvoid *pointer);
+
+/* GL_EXT_stencil_two_side */
+#ifndef GL_EXT_stencil_two_side
+#define GL_EXT_stencil_two_side 1
+#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
+#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
+#endif
+typedef void (WINE_GLAPI *PGLFNACTIVESTENCILFACEEXTPROC)(GLenum face);
+
+/* GL_EXT_stencil_wrap */
+#ifndef GL_EXT_stencil_wrap
+#define GL_EXT_stencil_wrap 1
+#define GL_INCR_WRAP_EXT 0x8507
+#define GL_DECR_WRAP_EXT 0x8508
+#endif
/* GL_EXT_texture3D */
#ifndef GL_EXT_texture3D
#define GL_EXT_texture3D 1
-#define GL_PACK_SKIP_IMAGES_EXT 0x806B
-#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C
-#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D
-#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E
-#define GL_TEXTURE_3D_EXT 0x806F
-#define GL_PROXY_TEXTURE_3D_EXT 0x8070
-#define GL_TEXTURE_DEPTH_EXT 0x8071
-#define GL_TEXTURE_WRAP_R_EXT 0x8072
-#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
+#define GL_PACK_SKIP_IMAGES_EXT 0x806b
+#define GL_PACK_IMAGE_HEIGHT_EXT 0x806c
+#define GL_UNPACK_SKIP_IMAGES_EXT 0x806d
+#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806e
+#define GL_TEXTURE_3D_EXT 0x806f
+#define GL_PROXY_TEXTURE_3D_EXT 0x8070
+#define GL_TEXTURE_DEPTH_EXT 0x8071
+#define GL_TEXTURE_WRAP_R_EXT 0x8072
+#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073
#endif
-typedef void (WINE_GLAPI * PGLFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
-typedef void (WINE_GLAPI * PGLFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
-/* GL_EXT_texture_env_combine */
-#ifndef GL_EXT_texture_env_combine
-#define GL_EXT_texture_env_combine 1
-#define GL_COMBINE_EXT 0x8570
-#define GL_COMBINE_RGB_EXT 0x8571
-#define GL_COMBINE_ALPHA_EXT 0x8572
-#define GL_RGB_SCALE_EXT 0x8573
-#define GL_ADD_SIGNED_EXT 0x8574
-#define GL_INTERPOLATE_EXT 0x8575
-#define GL_SUBTRACT_EXT 0x84E7
-#define GL_CONSTANT_EXT 0x8576
-#define GL_PRIMARY_COLOR_EXT 0x8577
-#define GL_PREVIOUS_EXT 0x8578
-#define GL_SOURCE0_RGB_EXT 0x8580
-#define GL_SOURCE1_RGB_EXT 0x8581
-#define GL_SOURCE2_RGB_EXT 0x8582
-#define GL_SOURCE3_RGB_EXT 0x8583
-#define GL_SOURCE4_RGB_EXT 0x8584
-#define GL_SOURCE5_RGB_EXT 0x8585
-#define GL_SOURCE6_RGB_EXT 0x8586
-#define GL_SOURCE7_RGB_EXT 0x8587
-#define GL_SOURCE0_ALPHA_EXT 0x8588
-#define GL_SOURCE1_ALPHA_EXT 0x8589
-#define GL_SOURCE2_ALPHA_EXT 0x858A
-#define GL_SOURCE3_ALPHA_EXT 0x858B
-#define GL_SOURCE4_ALPHA_EXT 0x858C
-#define GL_SOURCE5_ALPHA_EXT 0x858D
-#define GL_SOURCE6_ALPHA_EXT 0x858E
-#define GL_SOURCE7_ALPHA_EXT 0x858F
-#define GL_OPERAND0_RGB_EXT 0x8590
-#define GL_OPERAND1_RGB_EXT 0x8591
-#define GL_OPERAND2_RGB_EXT 0x8592
-#define GL_OPERAND3_RGB_EXT 0x8593
-#define GL_OPERAND4_RGB_EXT 0x8594
-#define GL_OPERAND5_RGB_EXT 0x8595
-#define GL_OPERAND6_RGB_EXT 0x8596
-#define GL_OPERAND7_RGB_EXT 0x8597
-#define GL_OPERAND0_ALPHA_EXT 0x8598
-#define GL_OPERAND1_ALPHA_EXT 0x8599
-#define GL_OPERAND2_ALPHA_EXT 0x859A
-#define GL_OPERAND3_ALPHA_EXT 0x859B
-#define GL_OPERAND4_ALPHA_EXT 0x859C
-#define GL_OPERAND5_ALPHA_EXT 0x859D
-#define GL_OPERAND6_ALPHA_EXT 0x859E
-#define GL_OPERAND7_ALPHA_EXT 0x859F
-#endif
-/* GL_EXT_texture_env_dot3 */
-#ifndef GL_EXT_texture_env_dot3
-#define GL_EXT_texture_env_dot3 1
-#define GL_DOT3_RGB_EXT 0x8740
-#define GL_DOT3_RGBA_EXT 0x8741
-#endif
-/* GL_EXT_texture_lod_bias */
-#ifndef GL_EXT_texture_lod_bias
-#define GL_EXT_texture_lod_bias 1
-#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD
-#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
-#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
-#endif
-/* GL_ARB_texture_border_clamp */
-#ifndef GL_ARB_texture_border_clamp
-#define GL_ARB_texture_border_clamp 1
-#define GL_CLAMP_TO_BORDER_ARB 0x812D
-#endif
-/* GL_EXT_texture_filter_anisotropic */
-#ifndef GL_EXT_texture_filter_anisotropic
-#define GL_EXT_texture_filter_anisotropic 1
-#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
-#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
-#endif
-/* GL_ARB_texture_mirrored_repeat (full support GL1.4) */
-#ifndef GL_ARB_texture_mirrored_repeat
-#define GL_ARB_texture_mirrored_repeat 1
-#define GL_MIRRORED_REPEAT_ARB 0x8370
-#endif
-/* GL_ATI_texture_mirror_once */
-#ifndef GL_ATI_texture_mirror_once
-#define GL_ATI_texture_mirror_once 1
-#define GL_MIRROR_CLAMP_ATI 0x8742
-#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743
-#endif
-/* GL_ARB_texture_env_dot3 */
-#ifndef GL_ARB_texture_env_dot3
-#define GL_ARB_texture_env_dot3 1
-#define GL_DOT3_RGB_ARB 0x86AE
-#define GL_DOT3_RGBA_ARB 0x86AF
-#endif
-/* GL_EXT_texture_env_dot3 */
-#ifndef GL_EXT_texture_env_dot3
-#define GL_EXT_texture_env_dot3 1
-#define GL_DOT3_RGB_EXT 0x8740
-#define GL_DOT3_RGBA_EXT 0x8741
-#endif
-/* GL_EXT_texture_sRGB */
-#ifndef GL_EXT_texture_sRGB
-#define GL_EXT_texture_sRGB 1
-#define GL_SRGB_EXT 0x8C40
-#define GL_SRGB8_EXT 0x8C41
-#define GL_SRGB_ALPHA_EXT 0x8C42
-#define GL_SRGB8_ALPHA8_EXT 0x8C43
-#define GL_SLUMINANCE_ALPHA_EXT 0x8C44
-#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45
-#define GL_SLUMINANCE_EXT 0x8C46
-#define GL_SLUMINANCE8_EXT 0x8C47
-#define GL_COMPRESSED_SRGB_EXT 0x8C48
-#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49
-#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A
-#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B
-#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
-#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
-#endif
-/* GL_ARB_texture_float */
-#ifndef GL_ARB_texture_float
-#define GL_ARB_texture_float 1
-#define GL_RGBA32F_ARB 0x8814
-#define GL_RGB32F_ARB 0x8815
-#define GL_RGBA16F_ARB 0x881A
-#define GL_RGB16F_ARB 0x881B
-#endif
-/* GL_ARB_texture_rg */
-#ifndef GL_ARB_texture_rg
-#define GL_RG 0x8227
-#define GL_RG_INTEGER 0x8228
-#define GL_R8 0x8229
-#define GL_R16 0x822A
-#define GL_RG8 0x822B
-#define GL_RG16 0x822C
-#define GL_R16F 0x822D
-#define GL_R32F 0x822E
-#define GL_RG16F 0x822F
-#define GL_RG32F 0x8230
-#define GL_R8I 0x8231
-#define GL_R8UI 0x8232
-#define GL_R16I 0x8233
-#define GL_R16UI 0x8234
-#define GL_R32I 0x8235
-#define GL_R32UI 0x8236
-#define GL_RG8I 0x8237
-#define GL_RG8UI 0x8238
-#define GL_RG16I 0x8239
-#define GL_RG16UI 0x823A
-#define GL_RG32I 0x823B
-#define GL_RG32UI 0x823C
-#endif
-/* GL_EXT_texture_swizzle */
-#ifndef GL_EXT_texture_swizzle
-#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42
-#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43
-#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44
-#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45
-#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46
-#endif
-/* GL_ARB_half_float_pixel */
-#ifndef GL_ARB_half_float_pixel
-#define GL_ARB_half_float_pixel
-#define GL_HALF_FLOAT_ARB 0x140B
-#endif
-/* GL_ARB_vertex_program */
-#ifndef GL_ARB_vertex_program
-#define GL_ARB_vertex_program 1
-#define GL_VERTEX_PROGRAM_ARB 0x8620
-#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642
-#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643
-#define GL_COLOR_SUM_ARB 0x8458
-#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875
-#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622
-#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623
-#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624
-#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625
-#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A
-#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626
-#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645
-#define GL_PROGRAM_LENGTH_ARB 0x8627
-#define GL_PROGRAM_FORMAT_ARB 0x8876
-#define GL_PROGRAM_BINDING_ARB 0x8677
-#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0
-#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1
-#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2
-#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3
-#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4
-#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5
-#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6
-#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7
-#define GL_PROGRAM_PARAMETERS_ARB 0x88A8
-#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9
-#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA
-#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB
-#define GL_PROGRAM_ATTRIBS_ARB 0x88AC
-#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD
-#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE
-#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF
-#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0
-#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1
-#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2
-#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3
-#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4
-#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5
-#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6
-#define GL_PROGRAM_STRING_ARB 0x8628
-#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B
-#define GL_CURRENT_MATRIX_ARB 0x8641
-#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7
-#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640
-#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869
-#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F
-#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E
-#define GL_PROGRAM_ERROR_STRING_ARB 0x8874
-#define GL_MATRIX0_ARB 0x88C0
-#define GL_MATRIX1_ARB 0x88C1
-#define GL_MATRIX2_ARB 0x88C2
-#define GL_MATRIX3_ARB 0x88C3
-#define GL_MATRIX4_ARB 0x88C4
-#define GL_MATRIX5_ARB 0x88C5
-#define GL_MATRIX6_ARB 0x88C6
-#define GL_MATRIX7_ARB 0x88C7
-#define GL_MATRIX8_ARB 0x88C8
-#define GL_MATRIX9_ARB 0x88C9
-#define GL_MATRIX10_ARB 0x88CA
-#define GL_MATRIX11_ARB 0x88CB
-#define GL_MATRIX12_ARB 0x88CC
-#define GL_MATRIX13_ARB 0x88CD
-#define GL_MATRIX14_ARB 0x88CE
-#define GL_MATRIX15_ARB 0x88CF
-#define GL_MATRIX16_ARB 0x88D0
-#define GL_MATRIX17_ARB 0x88D1
-#define GL_MATRIX18_ARB 0x88D2
-#define GL_MATRIX19_ARB 0x88D3
-#define GL_MATRIX20_ARB 0x88D4
-#define GL_MATRIX21_ARB 0x88D5
-#define GL_MATRIX22_ARB 0x88D6
-#define GL_MATRIX23_ARB 0x88D7
-#define GL_MATRIX24_ARB 0x88D8
-#define GL_MATRIX25_ARB 0x88D9
-#define GL_MATRIX26_ARB 0x88DA
-#define GL_MATRIX27_ARB 0x88DB
-#define GL_MATRIX28_ARB 0x88DC
-#define GL_MATRIX29_ARB 0x88DD
-#define GL_MATRIX30_ARB 0x88DE
-#define GL_MATRIX31_ARB 0x88DF
-#endif
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
-typedef void (WINE_GLAPI * PGLFNENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
-typedef void (WINE_GLAPI * PGLFNDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);
-typedef void (WINE_GLAPI * PGLFNPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string);
-typedef void (WINE_GLAPI * PGLFNBINDPROGRAMARBPROC) (GLenum target, GLuint program);
-typedef void (WINE_GLAPI * PGLFNDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);
-typedef void (WINE_GLAPI * PGLFNGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);
-typedef void (WINE_GLAPI * PGLFNPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
-typedef void (WINE_GLAPI * PGLFNPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
-typedef void (WINE_GLAPI * PGLFNPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-typedef void (WINE_GLAPI * PGLFNPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
-typedef void (WINE_GLAPI * PGLFNPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);
-typedef void (WINE_GLAPI * PGLFNPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-typedef void (WINE_GLAPI * PGLFNPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
-typedef void (WINE_GLAPI * PGLFNGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);
-typedef void (WINE_GLAPI * PGLFNGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string);
-typedef void (WINE_GLAPI * PGLFNGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);
-typedef void (WINE_GLAPI * PGLFNGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
-typedef GLboolean (WINE_GLAPI * PGLFNISPROGRAMARBPROC) (GLuint program);
-#ifndef GL_ARB_fragment_program
-#define GL_ARB_fragment_program 1
-#define GL_FRAGMENT_PROGRAM_ARB 0x8804
-#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805
-#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806
-#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807
-#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808
-#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809
-#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A
-#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B
-#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C
-#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D
-#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E
-#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F
-#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810
-#define GL_MAX_TEXTURE_COORDS_ARB 0x8871
-#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872
-/* All ARB_fragment_program entry points are shared with ARB_vertex_program. */
-#endif
-/* GL_ARB_multisample */
-#ifndef GL_ARB_multisample
-#define GL_ARB_multisample 1
-#define GL_MULTISAMPLE_ARB 0x809D
-#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E
-#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F
-#define GL_SAMPLE_COVERAGE_ARB 0x80A0
-#define GL_SAMPLE_BUFFERS_ARB 0x80A8
-#define GL_SAMPLES_ARB 0x80A9
-#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA
-#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB
-#define GL_MULTISAMPLE_BIT_ARB 0x20000000
-#endif
-typedef void (WINE_GLAPI * WINED3D_PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);
-/* GL_ARB_vertex_buffer_object */
-#ifndef GL_ARB_vertex_buffer_object
-#define GL_ARB_vertex_buffer_object 1
-#define GL_BUFFER_SIZE_ARB 0x8764
-#define GL_BUFFER_USAGE_ARB 0x8765
-#define GL_ARRAY_BUFFER_ARB 0x8892
-#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893
-#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894
-#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895
-#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896
-#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897
-#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898
-#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899
-#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A
-#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B
-#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C
-#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D
-#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E
-#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F
-#define GL_READ_ONLY_ARB 0x88B8
-#define GL_WRITE_ONLY_ARB 0x88B9
-#define GL_READ_WRITE_ARB 0x88BA
-#define GL_BUFFER_ACCESS_ARB 0x88BB
-#define GL_BUFFER_MAPPED_ARB 0x88BC
-#define GL_BUFFER_MAP_POINTER_ARB 0x88BD
-#define GL_STREAM_DRAW_ARB 0x88E0
-#define GL_STREAM_READ_ARB 0x88E1
-#define GL_STREAM_COPY_ARB 0x88E2
-#define GL_STATIC_DRAW_ARB 0x88E4
-#define GL_STATIC_READ_ARB 0x88E5
-#define GL_STATIC_COPY_ARB 0x88E6
-#define GL_DYNAMIC_DRAW_ARB 0x88E8
-#define GL_DYNAMIC_READ_ARB 0x88E9
-#define GL_DYNAMIC_COPY_ARB 0x88EA
-#endif
-typedef void (WINE_GLAPI * PGLFNBINDBUFFERARBPROC) (GLenum target, GLuint buffer);
-typedef void (WINE_GLAPI * PGLFNDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);
-typedef void (WINE_GLAPI * PGLFNGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);
-typedef GLboolean (WINE_GLAPI * PGLFNISBUFFERARBPROC) (GLuint buffer);
-typedef void (WINE_GLAPI * PGLFNBUFFERDATAARBPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);
-typedef void (WINE_GLAPI * PGLFNBUFFERSUBDATAARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);
-typedef void (WINE_GLAPI * PGLFNGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);
-typedef GLvoid* (WINE_GLAPI * PGLFNMAPBUFFERARBPROC) (GLenum target, GLenum access);
-typedef GLboolean (WINE_GLAPI * PGLFNUNMAPBUFFERARBPROC) (GLenum target);
-typedef void (WINE_GLAPI * PGLFNGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params);
-/* GL_EXT_blend_equation_separate */
-typedef void (WINE_GLAPI * PGLFNBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
-/* GL_EXT_blend_func_separate */
-#ifndef GL_EXT_blend_func_separate
-#define GL_BLEND_DST_RGB_EXT 0x80C8
-#define GL_BLEND_SRC_RGB_EXT 0x80C9
-#define GL_BLEND_DST_ALPHA_EXT 0x80CA
-#define GL_BLEND_SRC_ALPHA_EXT 0x80CB
-#endif
-typedef void (WINE_GLAPI * PGLFNBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);
-/* GL_EXT_fog_coord */
-#ifndef GL_EXT_fog_coord
-#define GL_EXT_fog_coord 1
-#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450
-#define GL_FOG_COORDINATE_EXT 0x8451
-#define GL_FRAGMENT_DEPTH_EXT 0x8452
-#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453
-#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454
-#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455
-#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456
-#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457
-#endif /* GL_EXT_fog_coord */
-typedef void (WINE_GLAPI * PGLFNGLFOGCOORDFEXTPROC) (GLfloat coord);
-typedef void (WINE_GLAPI * PGLFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
-typedef void (WINE_GLAPI * PGLFNGLFOGCOORDDEXTPROC) (GLdouble coord);
-typedef void (WINE_GLAPI * PGLFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
-typedef void (WINE_GLAPI * PGLFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, GLvoid *data);
-/* GL_ARB_shader_objects (GLSL) */
-#ifndef GL_ARB_shader_objects
-#define GL_ARB_shader_objects 1
-typedef char GLcharARB;
-typedef unsigned int GLhandleARB;
-#define GL_PROGRAM_OBJECT_ARB 0x8B40
-#define GL_OBJECT_TYPE_ARB 0x8B4E
-#define GL_OBJECT_SUBTYPE_ARB 0x8B4F
-#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80
-#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81
-#define GL_OBJECT_LINK_STATUS_ARB 0x8B82
-#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83
-#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84
-#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85
-#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86
-#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87
-#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88
-#define GL_SHADER_OBJECT_ARB 0x8B48
-#define GL_FLOAT_VEC2_ARB 0x8B50
-#define GL_FLOAT_VEC3_ARB 0x8B51
-#define GL_FLOAT_VEC4_ARB 0x8B52
-#define GL_INT_VEC2_ARB 0x8B53
-#define GL_INT_VEC3_ARB 0x8B54
-#define GL_INT_VEC4_ARB 0x8B55
-#define GL_BOOL_ARB 0x8B56
-#define GL_BOOL_VEC2_ARB 0x8B57
-#define GL_BOOL_VEC3_ARB 0x8B58
-#define GL_BOOL_VEC4_ARB 0x8B59
-#define GL_FLOAT_MAT2_ARB 0x8B5A
-#define GL_FLOAT_MAT3_ARB 0x8B5B
-#define GL_FLOAT_MAT4_ARB 0x8B5C
-#define GL_SAMPLER_1D_ARB 0x8B5D
-#define GL_SAMPLER_2D_ARB 0x8B5E
-#define GL_SAMPLER_3D_ARB 0x8B5F
-#define GL_SAMPLER_CUBE_ARB 0x8B60
-#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61
-#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62
-#define GL_SAMPLER_2D_RECT_ARB 0x8B63
-#define GL_SAMPELR_2D_RECT_SHADOW_ARB 0x8B64
-#endif
-#ifndef GL_ARB_shading_language_100
-#define GL_ARB_shading_language_100 1
-#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C
-#endif
-#ifndef GL_ARB_fragment_shader
-#define GL_ARB_fragment_shader 1
-#define GL_FRAGMENT_SHADER_ARB 0x8B30
-#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49
-#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B
-#endif
-#ifndef GL_ARB_vertex_shader
-#define GL_ARB_vertex_shader 1
-#define GL_VERTEX_SHADER_ARB 0x8B31
-#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A
-#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B
-#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C
-#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D
-#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89
-#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A
-#endif
-typedef void (WINE_GLAPI * WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params);
-typedef GLint (WINE_GLAPI * WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
-typedef void (WINE_GLAPI * WINED3D_PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
-typedef void (WINE_GLAPI * WINED3D_PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);
-typedef void (WINE_GLAPI * WINED3D_PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);
-typedef void (WINE_GLAPI * WINED3D_PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
-typedef void (WINE_GLAPI * WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);
-typedef GLhandleARB (WINE_GLAPI * WINED3D_PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);
-typedef void (WINE_GLAPI * WINED3D_PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);
-typedef void (WINE_GLAPI * WINED3D_PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);
-typedef GLhandleARB (WINE_GLAPI * WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC) (void);
-typedef void (WINE_GLAPI * WINED3D_PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);
-typedef void (WINE_GLAPI * WINED3D_PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);
-typedef void (WINE_GLAPI * WINED3D_PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);
-typedef void (WINE_GLAPI * WINED3D_PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);
-typedef void (WINE_GLAPI * WINED3D_PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);
-typedef void (WINE_GLAPI * WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);
-typedef GLhandleARB (WINE_GLAPI * WINED3D_PFNGLGETHANDLEARBPROC) (GLenum pname);
-typedef void (WINE_GLAPI * WINED3D_PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);
-typedef void (WINE_GLAPI * WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);
-typedef GLint (WINE_GLAPI * WINED3D_PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);
-/* GL_ARB_pixel_buffer_object */
-#ifndef GL_ARB_pixel_buffer_object
-#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB
-#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC
-#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED
-#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF
-#endif
-/* GL_EXT_texture */
-#ifndef GL_EXT_texture
-#define GL_EXT_texture 1
-#define GL_ALPHA4_EXT 0x803B
-#define GL_ALPHA8_EXT 0x803C
-#define GL_ALPHA12_EXT 0x803D
-#define GL_ALPHA16_EXT 0x803E
-#define GL_LUMINANCE4_EXT 0x803F
-#define GL_LUMINANCE8_EXT 0x8040
-#define GL_LUMINANCE12_EXT 0x8041
-#define GL_LUMINANCE16_EXT 0x8042
-#define GL_LUMINANCE4_ALPHA4_EXT 0x8043
-#define GL_LUMINANCE6_ALPHA2_EXT 0x8044
-#define GL_LUMINANCE8_ALPHA8_EXT 0x8045
-#define GL_LUMINANCE12_ALPHA4_EXT 0x8046
-#define GL_LUMINANCE12_ALPHA12_EXT 0x8047
-#define GL_LUMINANCE16_ALPHA16_EXT 0x8048
-#define GL_INTENSITY_EXT 0x8049
-#define GL_INTENSITY4_EXT 0x804A
-#define GL_INTENSITY8_EXT 0x804B
-#define GL_INTENSITY12_EXT 0x804C
-#define GL_INTENSITY16_EXT 0x804D
-#define GL_RGB2_EXT 0x804E
-#define GL_RGB4_EXT 0x804F
-#define GL_RGB5_EXT 0x8050
-#define GL_RGB8_EXT 0x8051
-#define GL_RGB10_EXT 0x8052
-#define GL_RGB12_EXT 0x8053
-#define GL_RGB16_EXT 0x8054
-#define GL_RGBA2_EXT 0x8055
-#define GL_RGBA4_EXT 0x8056
-#define GL_RGB5_A1_EXT 0x8057
-#define GL_RGBA8_EXT 0x8058
-#define GL_RGB10_A2_EXT 0x8059
-#define GL_RGBA12_EXT 0x805A
-#define GL_RGBA16_EXT 0x805B
-#define GL_TEXTURE_RED_SIZE_EXT 0x805C
-#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D
-#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E
-#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F
-#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060
-#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061
-#define GL_REPLACE_EXT 0x8062
-#define GL_PROXY_TEXTURE_1D_EXT 0x8063
-#define GL_PROXY_TEXTURE_2D_EXT 0x8064
-#define GL_TEXTURE_TOO_LARGE_EXT 0x8065
+typedef void (WINE_GLAPI *PGLFNGLTEXIMAGE3DEXTPROC)(GLenum target, GLint level, GLenum internalformat,
+ GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);
+typedef void (WINE_GLAPI *PGLFNGLTEXSUBIMAGE3DEXTPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+ GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);
+
+/* GL_EXT_texture_compression_rgtc */
+#ifndef GL_EXT_texture_compression_rgtc
+#define GL_EXT_texture_compression_rgtc 1
+#define GL_COMPRESSED_RED_RGTC1_EXT 0x8dbb
+#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8dbc
+#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8dbd
+#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8dbe
#endif
+
/* GL_EXT_texture_compression_s3tc */
#ifndef GL_EXT_texture_compression_s3tc
#define GL_EXT_texture_compression_s3tc 1
-#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
-#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
-#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
-#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
+#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83f0
+#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83f1
+#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83f2
+#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83f3
#endif
-typedef void (WINE_GLAPI * PGLFNCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
-typedef void (WINE_GLAPI * PGLFNCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
-typedef void (WINE_GLAPI * PGLFNCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
-typedef void (WINE_GLAPI * PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);
-typedef void (WINE_GLAPI * PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
-typedef void (WINE_GLAPI * PGLFNCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
-typedef void (WINE_GLAPI * PGLFNGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img);
-/* GL_EXT_stencil_wrap */
-#ifndef GL_EXT_stencil_wrap
-#define GL_EXT_stencil_wrap 1
-#define GL_INCR_WRAP_EXT 0x8507
-#define GL_DECR_WRAP_EXT 0x8508
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat,
+ GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat,
+ GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat,
+ GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level,
+ GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
+ GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+ GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset,
+ GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);
+typedef void (WINE_GLAPI *PGLFNGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img);
+
+/* GL_EXT_texture_env_combine */
+#ifndef GL_EXT_texture_env_combine
+#define GL_EXT_texture_env_combine 1
+#define GL_COMBINE_EXT 0x8570
+#define GL_COMBINE_RGB_EXT 0x8571
+#define GL_COMBINE_ALPHA_EXT 0x8572
+#define GL_RGB_SCALE_EXT 0x8573
+#define GL_ADD_SIGNED_EXT 0x8574
+#define GL_INTERPOLATE_EXT 0x8575
+#define GL_SUBTRACT_EXT 0x84e7
+#define GL_CONSTANT_EXT 0x8576
+#define GL_PRIMARY_COLOR_EXT 0x8577
+#define GL_PREVIOUS_EXT 0x8578
+#define GL_SOURCE0_RGB_EXT 0x8580
+#define GL_SOURCE1_RGB_EXT 0x8581
+#define GL_SOURCE2_RGB_EXT 0x8582
+#define GL_SOURCE3_RGB_EXT 0x8583
+#define GL_SOURCE4_RGB_EXT 0x8584
+#define GL_SOURCE5_RGB_EXT 0x8585
+#define GL_SOURCE6_RGB_EXT 0x8586
+#define GL_SOURCE7_RGB_EXT 0x8587
+#define GL_SOURCE0_ALPHA_EXT 0x8588
+#define GL_SOURCE1_ALPHA_EXT 0x8589
+#define GL_SOURCE2_ALPHA_EXT 0x858a
+#define GL_SOURCE3_ALPHA_EXT 0x858b
+#define GL_SOURCE4_ALPHA_EXT 0x858c
+#define GL_SOURCE5_ALPHA_EXT 0x858d
+#define GL_SOURCE6_ALPHA_EXT 0x858e
+#define GL_SOURCE7_ALPHA_EXT 0x858f
+#define GL_OPERAND0_RGB_EXT 0x8590
+#define GL_OPERAND1_RGB_EXT 0x8591
+#define GL_OPERAND2_RGB_EXT 0x8592
+#define GL_OPERAND3_RGB_EXT 0x8593
+#define GL_OPERAND4_RGB_EXT 0x8594
+#define GL_OPERAND5_RGB_EXT 0x8595
+#define GL_OPERAND6_RGB_EXT 0x8596
+#define GL_OPERAND7_RGB_EXT 0x8597
+#define GL_OPERAND0_ALPHA_EXT 0x8598
+#define GL_OPERAND1_ALPHA_EXT 0x8599
+#define GL_OPERAND2_ALPHA_EXT 0x859a
+#define GL_OPERAND3_ALPHA_EXT 0x859b
+#define GL_OPERAND4_ALPHA_EXT 0x859c
+#define GL_OPERAND5_ALPHA_EXT 0x859d
+#define GL_OPERAND6_ALPHA_EXT 0x859e
+#define GL_OPERAND7_ALPHA_EXT 0x859f
#endif
-/* GL_ARB_half_float_vertex */
-#ifndef GL_ARB_half_float_vertex
-#define GL_ARB_half_float_vertex
-/* No _ARB, see extension spec */
-#define GL_HALF_FLOAT 0x140B
+/* GL_EXT_texture_env_dot3 */
+#ifndef GL_EXT_texture_env_dot3
+#define GL_EXT_texture_env_dot3 1
+#define GL_DOT3_RGB_EXT 0x8740
+#define GL_DOT3_RGBA_EXT 0x8741
#endif
-/* GL_NV_half_float */
-#ifndef GL_NV_half_float
-#define GL_NV_half_float 1
-typedef unsigned short GLhalfNV;
-#define GL_HALF_FLOAT_NV 0x140B
+
+/* GL_EXT_texture_filter_anisotropic */
+#ifndef GL_EXT_texture_filter_anisotropic
+#define GL_EXT_texture_filter_anisotropic 1
+#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84fe
+#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84ff
#endif
-typedef void (WINE_GLAPI * PGLFNVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);
-typedef void (WINE_GLAPI * PGLFNVERTEX2HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);
-typedef void (WINE_GLAPI * PGLFNVERTEX3HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
-typedef void (WINE_GLAPI * PGLFNVERTEX4HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
-typedef void (WINE_GLAPI * PGLFNNORMAL3HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
-typedef void (WINE_GLAPI * PGLFNCOLOR3HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
-typedef void (WINE_GLAPI * PGLFNCOLOR4HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNTEXCOORD1HNVPROC) (GLhalfNV s);
-typedef void (WINE_GLAPI * PGLFNTEXCOORD1HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);
-typedef void (WINE_GLAPI * PGLFNTEXCOORD2HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);
-typedef void (WINE_GLAPI * PGLFNTEXCOORD3HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
-typedef void (WINE_GLAPI * PGLFNTEXCOORD4HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);
-typedef void (WINE_GLAPI * PGLFNMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);
-typedef void (WINE_GLAPI * PGLFNMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
-typedef void (WINE_GLAPI * PGLFNMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
-typedef void (WINE_GLAPI * PGLFNMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNFOGCOORDHNVPROC) (GLhalfNV fog);
-typedef void (WINE_GLAPI * PGLFNFOGCOORDHVNVPROC) (const GLhalfNV *fog);
-typedef void (WINE_GLAPI * PGLFNSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);
-typedef void (WINE_GLAPI * PGLFNSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXWEIGHTHNVPROC) (GLhalfNV weight);
-typedef void (WINE_GLAPI * PGLFNVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);
+
+/* GL_EXT_texture_lod_bias */
+#ifndef GL_EXT_texture_lod_bias
+#define GL_EXT_texture_lod_bias 1
+#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84fd
+#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500
+#define GL_TEXTURE_LOD_BIAS_EXT 0x8501
+#endif
+
+/* GL_EXT_texture_sRGB */
+#ifndef GL_EXT_texture_sRGB
+#define GL_EXT_texture_sRGB 1
+#define GL_SRGB_EXT 0x8c40
+#define GL_SRGB8_EXT 0x8c41
+#define GL_SRGB_ALPHA_EXT 0x8c42
+#define GL_SRGB8_ALPHA8_EXT 0x8c43
+#define GL_SLUMINANCE_ALPHA_EXT 0x8c44
+#define GL_SLUMINANCE8_ALPHA8_EXT 0x8c45
+#define GL_SLUMINANCE_EXT 0x8c46
+#define GL_SLUMINANCE8_EXT 0x8c47
+#define GL_COMPRESSED_SRGB_EXT 0x8c48
+#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8c49
+#define GL_COMPRESSED_SLUMINANCE_EXT 0x8c4a
+#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8c4b
+#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8c4c
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8c4d
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8c4e
+#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8c4f
+#endif
+
+/* GL_NV_depth_clamp */
+#ifndef GL_NV_depth_clamp
+#define GL_NV_depth_clamp 1
+#define GL_DEPTH_CLAMP_NV 0x864f
+#endif
+
+/* GL_NV_fence */
+#ifndef GL_NV_fence
+#define GL_NV_fence 1
+#define GL_ALL_COMPLETED_NV 0x84f2
+#define GL_FENCE_STATUS_NV 0x84f3
+#define GL_FENCE_CONDITION_NV 0x84f4
+#endif
+typedef void (WINE_GLAPI *PGLFNGENFENCESNVPROC)(GLsizei, GLuint *);
+typedef void (WINE_GLAPI *PGLFNDELETEFENCESNVPROC)(GLuint, const GLuint *);
+typedef void (WINE_GLAPI *PGLFNSETFENCENVPROC)(GLuint, GLenum);
+typedef GLboolean (WINE_GLAPI *PGLFNTESTFENCENVPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNFINISHFENCENVPROC)(GLuint);
+typedef GLboolean (WINE_GLAPI *PGLFNISFENCENVPROC)(GLuint);
+typedef void (WINE_GLAPI *PGLFNGETFENCEIVNVPROC)(GLuint, GLenum, GLint *);
/* GL_NV_fog_distance */
#ifndef GL_NV_fog_distance
#define GL_NV_fog_distance 1
-#define GL_FOG_DISTANCE_MODE_NV 0x855A
-#define GL_EYE_RADIAL_NV 0x855B
-#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C
+#define GL_FOG_DISTANCE_MODE_NV 0x855a
+#define GL_EYE_RADIAL_NV 0x855b
+#define GL_EYE_PLANE_ABSOLUTE_NV 0x855c
/* reuse GL_EYE_PLANE */
#endif
-/* GL_NV_texgen_reflection */
-#ifndef GL_NV_texgen_reflection
-#define GL_NV_texgen_reflection 1
-#define GL_NORMAL_MAP_NV 0x8511
-#define GL_REFLECTION_MAP_NV 0x8512
+
+/* GL_NV_half_float */
+#ifndef GL_NV_half_float
+#define GL_NV_half_float 1
+typedef unsigned short GLhalfNV;
+#define GL_HALF_FLOAT_NV 0x140b
#endif
-/* GL_NV_texture_env_combine4 */
-#ifndef GL_NV_texture_env_combine4
-#define GL_NV_texture_env_combine4 1
-#define GL_COMBINE4_NV 0x8503
-#define GL_SOURCE3_RGB_NV 0x8583
-#define GL_SOURCE3_ALPHA_NV 0x858B
-#define GL_OPERAND3_RGB_NV 0x8593
-#define GL_OPERAND3_ALPHA_NV 0x859B
+typedef void (WINE_GLAPI *PGLFNVERTEX2HNVPROC)(GLhalfNV x, GLhalfNV y);
+typedef void (WINE_GLAPI *PGLFNVERTEX2HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEX3HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (WINE_GLAPI *PGLFNVERTEX3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEX4HNVPROC)(GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (WINE_GLAPI *PGLFNVERTEX4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNNORMAL3HNVPROC)(GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);
+typedef void (WINE_GLAPI *PGLFNNORMAL3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (WINE_GLAPI *PGLFNCOLOR3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNCOLOR4HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);
+typedef void (WINE_GLAPI *PGLFNCOLOR4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD1HNVPROC)(GLhalfNV s);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD1HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD2HNVPROC)(GLhalfNV s, GLhalfNV t);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD2HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD3HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD4HNVPROC)(GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (WINE_GLAPI *PGLFNTEXCOORD4HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD1HNVPROC)(GLenum target, GLhalfNV s);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD1HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD2HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD2HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD3HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD3HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD4HNVPROC)(GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);
+typedef void (WINE_GLAPI *PGLFNMULTITEXCOORD4HVNVPROC)(GLenum target, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNFOGCOORDHNVPROC)(GLhalfNV fog);
+typedef void (WINE_GLAPI *PGLFNFOGCOORDHVNVPROC)(const GLhalfNV *fog);
+typedef void (WINE_GLAPI *PGLFNSECONDARYCOLOR3HNVPROC)(GLhalfNV red, GLhalfNV green, GLhalfNV blue);
+typedef void (WINE_GLAPI *PGLFNSECONDARYCOLOR3HVNVPROC)(const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXWEIGHTHNVPROC)(GLhalfNV weight);
+typedef void (WINE_GLAPI *PGLFNVERTEXWEIGHTHVNVPROC)(const GLhalfNV *weight);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1HNVPROC)(GLuint index, GLhalfNV x);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB1HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB2HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB3HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4HNVPROC)(GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIB4HVNVPROC)(GLuint index, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS1HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS2HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS3HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+typedef void (WINE_GLAPI *PGLFNVERTEXATTRIBS4HVNVPROC)(GLuint index, GLsizei n, const GLhalfNV *v);
+
+/* GL_NV_light_max_exponent */
+#ifndef GL_NV_light_max_exponent
+#define GL_NV_light_max_exponent 1
+#define GL_MAX_SHININESS_NV 0x8504
+#define GL_MAX_SPOT_EXPONENT_NV 0x8505
#endif
+
/* GL_NV_register_combiners */
#ifndef GL_NV_register_combiners
#define GL_NV_register_combiners 1
-#define GL_REGISTER_COMBINERS_NV 0x8522
-#define GL_VARIABLE_A_NV 0x8523
-#define GL_VARIABLE_B_NV 0x8524
-#define GL_VARIABLE_C_NV 0x8525
-#define GL_VARIABLE_D_NV 0x8526
-#define GL_VARIABLE_E_NV 0x8527
-#define GL_VARIABLE_F_NV 0x8528
-#define GL_VARIABLE_G_NV 0x8529
-#define GL_CONSTANT_COLOR0_NV 0x852A
-#define GL_CONSTANT_COLOR1_NV 0x852B
-#define GL_PRIMARY_COLOR_NV 0x852C
-#define GL_SECONDARY_COLOR_NV 0x852D
-#define GL_SPARE0_NV 0x852E
-#define GL_SPARE1_NV 0x852F
-#define GL_DISCARD_NV 0x8530
-#define GL_E_TIMES_F_NV 0x8531
-#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
-#define GL_UNSIGNED_IDENTITY_NV 0x8536
-#define GL_UNSIGNED_INVERT_NV 0x8537
-#define GL_EXPAND_NORMAL_NV 0x8538
-#define GL_EXPAND_NEGATE_NV 0x8539
-#define GL_HALF_BIAS_NORMAL_NV 0x853A
-#define GL_HALF_BIAS_NEGATE_NV 0x853B
-#define GL_SIGNED_IDENTITY_NV 0x853C
-#define GL_SIGNED_NEGATE_NV 0x853D
-#define GL_SCALE_BY_TWO_NV 0x853E
-#define GL_SCALE_BY_FOUR_NV 0x853F
-#define GL_SCALE_BY_ONE_HALF_NV 0x8540
-#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
-#define GL_COMBINER_INPUT_NV 0x8542
-#define GL_COMBINER_MAPPING_NV 0x8543
-#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
-#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
-#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
-#define GL_COMBINER_MUX_SUM_NV 0x8547
-#define GL_COMBINER_SCALE_NV 0x8548
-#define GL_COMBINER_BIAS_NV 0x8549
-#define GL_COMBINER_AB_OUTPUT_NV 0x854A
-#define GL_COMBINER_CD_OUTPUT_NV 0x854B
-#define GL_COMBINER_SUM_OUTPUT_NV 0x854C
-#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
-#define GL_NUM_GENERAL_COMBINERS_NV 0x854E
-#define GL_COLOR_SUM_CLAMP_NV 0x854F
-#define GL_COMBINER0_NV 0x8550
-#define GL_COMBINER1_NV 0x8551
-#define GL_COMBINER2_NV 0x8552
-#define GL_COMBINER3_NV 0x8553
-#define GL_COMBINER4_NV 0x8554
-#define GL_COMBINER5_NV 0x8555
-#define GL_COMBINER6_NV 0x8556
-#define GL_COMBINER7_NV 0x8557
+#define GL_REGISTER_COMBINERS_NV 0x8522
+#define GL_VARIABLE_A_NV 0x8523
+#define GL_VARIABLE_B_NV 0x8524
+#define GL_VARIABLE_C_NV 0x8525
+#define GL_VARIABLE_D_NV 0x8526
+#define GL_VARIABLE_E_NV 0x8527
+#define GL_VARIABLE_F_NV 0x8528
+#define GL_VARIABLE_G_NV 0x8529
+#define GL_CONSTANT_COLOR0_NV 0x852a
+#define GL_CONSTANT_COLOR1_NV 0x852b
+#define GL_PRIMARY_COLOR_NV 0x852c
+#define GL_SECONDARY_COLOR_NV 0x852d
+#define GL_SPARE0_NV 0x852e
+#define GL_SPARE1_NV 0x852f
+#define GL_DISCARD_NV 0x8530
+#define GL_E_TIMES_F_NV 0x8531
+#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532
+#define GL_UNSIGNED_IDENTITY_NV 0x8536
+#define GL_UNSIGNED_INVERT_NV 0x8537
+#define GL_EXPAND_NORMAL_NV 0x8538
+#define GL_EXPAND_NEGATE_NV 0x8539
+#define GL_HALF_BIAS_NORMAL_NV 0x853a
+#define GL_HALF_BIAS_NEGATE_NV 0x853b
+#define GL_SIGNED_IDENTITY_NV 0x853c
+#define GL_SIGNED_NEGATE_NV 0x853d
+#define GL_SCALE_BY_TWO_NV 0x853e
+#define GL_SCALE_BY_FOUR_NV 0x853f
+#define GL_SCALE_BY_ONE_HALF_NV 0x8540
+#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541
+#define GL_COMBINER_INPUT_NV 0x8542
+#define GL_COMBINER_MAPPING_NV 0x8543
+#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544
+#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545
+#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546
+#define GL_COMBINER_MUX_SUM_NV 0x8547
+#define GL_COMBINER_SCALE_NV 0x8548
+#define GL_COMBINER_BIAS_NV 0x8549
+#define GL_COMBINER_AB_OUTPUT_NV 0x854a
+#define GL_COMBINER_CD_OUTPUT_NV 0x854b
+#define GL_COMBINER_SUM_OUTPUT_NV 0x854c
+#define GL_MAX_GENERAL_COMBINERS_NV 0x854d
+#define GL_NUM_GENERAL_COMBINERS_NV 0x854e
+#define GL_COLOR_SUM_CLAMP_NV 0x854f
+#define GL_COMBINER0_NV 0x8550
+#define GL_COMBINER1_NV 0x8551
+#define GL_COMBINER2_NV 0x8552
+#define GL_COMBINER3_NV 0x8553
+#define GL_COMBINER4_NV 0x8554
+#define GL_COMBINER5_NV 0x8555
+#define GL_COMBINER6_NV 0x8556
+#define GL_COMBINER7_NV 0x8557
/* reuse GL_TEXTURE0_ARB */
/* reuse GL_TEXTURE1_ARB */
/* reuse GL_ZERO */
/* reuse GL_NONE */
/* reuse GL_FOG */
#endif
-typedef void (WINE_GLAPI * PGLFNCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);
-typedef void (WINE_GLAPI * PGLFNCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);
-typedef void (WINE_GLAPI * PGLFNCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);
-typedef void (WINE_GLAPI * PGLFNCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
-typedef void (WINE_GLAPI * PGLFNCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
-typedef void (WINE_GLAPI * PGLFNFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
-typedef void (WINE_GLAPI * PGLFNGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERFVNVPROC)(GLenum pname, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERFNVPROC)(GLenum pname, GLfloat param);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERIVNVPROC)(GLenum pname, const GLint *params);
+typedef void (WINE_GLAPI *PGLFNCOMBINERPARAMETERINVPROC)(GLenum pname, GLint param);
+typedef void (WINE_GLAPI *PGLFNCOMBINERINPUTNVPROC)(GLenum stage, GLenum portion,
+ GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);
+typedef void (WINE_GLAPI *PGLFNCOMBINEROUTPUTNVPROC)(GLenum stage, GLenum portion,
+ GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias,
+ GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);
+typedef void (WINE_GLAPI *PGLFNFINALCOMBINERINPUTNVPROC)(GLenum variable, GLenum input,
+ GLenum mapping, GLenum componentUsage);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERINPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion,
+ GLenum variable, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERINPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion,
+ GLenum variable, GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINEROUTPUTPARAMETERFVNVPROC)(GLenum stage, GLenum portion,
+ GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINEROUTPUTPARAMETERIVNVPROC)(GLenum stage, GLenum portion,
+ GLenum pname, GLint *params);
+typedef void (WINE_GLAPI *PGLFNGETFINALCOMBINERINPUTPARAMETERFVNVPROC)(GLenum variable, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETFINALCOMBINERINPUTPARAMETERIVNVPROC)(GLenum variable, GLenum pname, GLint *params);
+
/* GL_NV_register_combiners2 */
#ifndef GL_NV_register_combiners2
#define GL_NV_register_combiners2 1
-#define GL_PER_STAGE_CONSTANTS_NV 0x8535
+#define GL_PER_STAGE_CONSTANTS_NV 0x8535
#endif
-typedef void (WINE_GLAPI * PGLFNCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, const GLfloat *params);
+typedef void (WINE_GLAPI *PGLFNGETCOMBINERSTAGEPARAMETERFVNVPROC)(GLenum stage, GLenum pname, GLfloat *params);
+
+/* GL_NV_texgen_reflection */
+#ifndef GL_NV_texgen_reflection
+#define GL_NV_texgen_reflection 1
+#define GL_NORMAL_MAP_NV 0x8511
+#define GL_REFLECTION_MAP_NV 0x8512
+#endif
+
+/* GL_NV_texture_env_combine4 */
+#ifndef GL_NV_texture_env_combine4
+#define GL_NV_texture_env_combine4 1
+#define GL_COMBINE4_NV 0x8503
+#define GL_SOURCE3_RGB_NV 0x8583
+#define GL_SOURCE3_ALPHA_NV 0x858b
+#define GL_OPERAND3_RGB_NV 0x8593
+#define GL_OPERAND3_ALPHA_NV 0x859b
+#endif
+
/* GL_NV_texture_shader */
#ifndef GL_NV_texture_shader
#define GL_NV_texture_shader 1
-#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C
-#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D
-#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E
-#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9
-#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA
-#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB
-#define GL_DSDT_MAG_INTENSITY_NV 0x86DC
-#define GL_SHADER_CONSISTENT_NV 0x86DD
-#define GL_TEXTURE_SHADER_NV 0x86DE
-#define GL_SHADER_OPERATION_NV 0x86DF
-#define GL_CULL_MODES_NV 0x86E0
-#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
-#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
-#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
-#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV
-#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV
-#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV
-#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
-#define GL_CONST_EYE_NV 0x86E5
-#define GL_PASS_THROUGH_NV 0x86E6
-#define GL_CULL_FRAGMENT_NV 0x86E7
-#define GL_OFFSET_TEXTURE_2D_NV 0x86E8
-#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9
-#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA
-#define GL_DOT_PRODUCT_NV 0x86EC
-#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED
-#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE
-#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0
-#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1
-#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2
-#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3
-#define GL_HILO_NV 0x86F4
-#define GL_DSDT_NV 0x86F5
-#define GL_DSDT_MAG_NV 0x86F6
-#define GL_DSDT_MAG_VIB_NV 0x86F7
-#define GL_HILO16_NV 0x86F8
-#define GL_SIGNED_HILO_NV 0x86F9
-#define GL_SIGNED_HILO16_NV 0x86FA
-#define GL_SIGNED_RGBA_NV 0x86FB
-#define GL_SIGNED_RGBA8_NV 0x86FC
-#define GL_SIGNED_RGB_NV 0x86FE
-#define GL_SIGNED_RGB8_NV 0x86FF
-#define GL_SIGNED_LUMINANCE_NV 0x8701
-#define GL_SIGNED_LUMINANCE8_NV 0x8702
-#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
-#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
-#define GL_SIGNED_ALPHA_NV 0x8705
-#define GL_SIGNED_ALPHA8_NV 0x8706
-#define GL_SIGNED_INTENSITY_NV 0x8707
-#define GL_SIGNED_INTENSITY8_NV 0x8708
-#define GL_DSDT8_NV 0x8709
-#define GL_DSDT8_MAG8_NV 0x870A
-#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B
-#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C
-#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D
-#define GL_HI_SCALE_NV 0x870E
-#define GL_LO_SCALE_NV 0x870F
-#define GL_DS_SCALE_NV 0x8710
-#define GL_DT_SCALE_NV 0x8711
-#define GL_MAGNITUDE_SCALE_NV 0x8712
-#define GL_VIBRANCE_SCALE_NV 0x8713
-#define GL_HI_BIAS_NV 0x8714
-#define GL_LO_BIAS_NV 0x8715
-#define GL_DS_BIAS_NV 0x8716
-#define GL_DT_BIAS_NV 0x8717
-#define GL_MAGNITUDE_BIAS_NV 0x8718
-#define GL_VIBRANCE_BIAS_NV 0x8719
-#define GL_TEXTURE_BORDER_VALUES_NV 0x871A
-#define GL_TEXTURE_HI_SIZE_NV 0x871B
-#define GL_TEXTURE_LO_SIZE_NV 0x871C
-#define GL_TEXTURE_DS_SIZE_NV 0x871D
-#define GL_TEXTURE_DT_SIZE_NV 0x871E
-#define GL_TEXTURE_MAG_SIZE_NV 0x871F
+#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864c
+#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864d
+#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864e
+#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86d9
+#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86da
+#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86db
+#define GL_DSDT_MAG_INTENSITY_NV 0x86dc
+#define GL_SHADER_CONSISTENT_NV 0x86dd
+#define GL_TEXTURE_SHADER_NV 0x86de
+#define GL_SHADER_OPERATION_NV 0x86df
+#define GL_CULL_MODES_NV 0x86e0
+#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86e1
+#define GL_OFFSET_TEXTURE_SCALE_NV 0x86e2
+#define GL_OFFSET_TEXTURE_BIAS_NV 0x86e3
+#define GL_OFFSET_TEXTURE_2D_MATRIX_NV GL_OFFSET_TEXTURE_MATRIX_NV
+#define GL_OFFSET_TEXTURE_2D_SCALE_NV GL_OFFSET_TEXTURE_SCALE_NV
+#define GL_OFFSET_TEXTURE_2D_BIAS_NV GL_OFFSET_TEXTURE_BIAS_NV
+#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86e4
+#define GL_CONST_EYE_NV 0x86e5
+#define GL_PASS_THROUGH_NV 0x86e6
+#define GL_CULL_FRAGMENT_NV 0x86e7
+#define GL_OFFSET_TEXTURE_2D_NV 0x86e8
+#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86e9
+#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86ea
+#define GL_DOT_PRODUCT_NV 0x86ec
+#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ed
+#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86ee
+#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86f0
+#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86f1
+#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86f2
+#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86f3
+#define GL_HILO_NV 0x86f4
+#define GL_DSDT_NV 0x86f5
+#define GL_DSDT_MAG_NV 0x86f6
+#define GL_DSDT_MAG_VIB_NV 0x86f7
+#define GL_HILO16_NV 0x86f8
+#define GL_SIGNED_HILO_NV 0x86f9
+#define GL_SIGNED_HILO16_NV 0x86fa
+#define GL_SIGNED_RGBA_NV 0x86fb
+#define GL_SIGNED_RGBA8_NV 0x86fc
+#define GL_SIGNED_RGB_NV 0x86fe
+#define GL_SIGNED_RGB8_NV 0x86ff
+#define GL_SIGNED_LUMINANCE_NV 0x8701
+#define GL_SIGNED_LUMINANCE8_NV 0x8702
+#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703
+#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704
+#define GL_SIGNED_ALPHA_NV 0x8705
+#define GL_SIGNED_ALPHA8_NV 0x8706
+#define GL_SIGNED_INTENSITY_NV 0x8707
+#define GL_SIGNED_INTENSITY8_NV 0x8708
+#define GL_DSDT8_NV 0x8709
+#define GL_DSDT8_MAG8_NV 0x870a
+#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870b
+#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870c
+#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870d
+#define GL_HI_SCALE_NV 0x870e
+#define GL_LO_SCALE_NV 0x870f
+#define GL_DS_SCALE_NV 0x8710
+#define GL_DT_SCALE_NV 0x8711
+#define GL_MAGNITUDE_SCALE_NV 0x8712
+#define GL_VIBRANCE_SCALE_NV 0x8713
+#define GL_HI_BIAS_NV 0x8714
+#define GL_LO_BIAS_NV 0x8715
+#define GL_DS_BIAS_NV 0x8716
+#define GL_DT_BIAS_NV 0x8717
+#define GL_MAGNITUDE_BIAS_NV 0x8718
+#define GL_VIBRANCE_BIAS_NV 0x8719
+#define GL_TEXTURE_BORDER_VALUES_NV 0x871a
+#define GL_TEXTURE_HI_SIZE_NV 0x871b
+#define GL_TEXTURE_LO_SIZE_NV 0x871c
+#define GL_TEXTURE_DS_SIZE_NV 0x871d
+#define GL_TEXTURE_DT_SIZE_NV 0x871e
+#define GL_TEXTURE_MAG_SIZE_NV 0x871f
#endif
+
/* GL_NV_texture_shader2 */
#ifndef GL_NV_texture_shader2
#define GL_NV_texture_shader2 1
-#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF
-#endif
-/* GL_NV_texture_shader3 */
-#ifndef GL_NV_texture_shader3
-#define GL_NV_texture_shader3 1
-#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850
-#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851
-#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852
-#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853
-#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854
-#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855
-#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856
-#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857
-#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858
-#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859
-#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A
-#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B
-#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C
-#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D
-#define GL_HILO8_NV 0x885E
-#define GL_SIGNED_HILO8_NV 0x885F
-#define GL_FORCE_BLUE_TO_ONE_NV 0x8860
-#endif
-/* GL_ATI_texture_env_combine3 */
-#ifndef GL_ATI_texture_env_combine3
-#define GL_ATI_texture_env_combine3 1
-#define GL_MODULATE_ADD_ATI 0x8744
-#define GL_MODULATE_SIGNED_ADD_ATI 0x8745
-#define GL_MODULATE_SUBTRACT_ATI 0x8746
-/* #define ONE */
-/* #define ZERO */
-#endif
-
-/**
- * Point sprites
- */
-/* GL_ARB_point_sprite */
-#ifndef GL_ARB_point_sprite
-#define GL_ARB_point_sprite 1
-#define GL_POINT_SPRITE_ARB 0x8861
-#define GL_COORD_REPLACE_ARB 0x8862
-#endif
-/**
- * @TODO: GL_NV_point_sprite
- */
-
-/**
- * Occlusion Queries
- */
-/* GL_ARB_occlusion_query */
-#ifndef GL_ARB_occlusion_query
-#define GL_ARB_occlusion_query 1
-#define GL_SAMPLES_PASSED_ARB 0x8914
-#define GL_QUERY_COUNTER_BITS_ARB 0x8864
-#define GL_CURRENT_QUERY_ARB 0x8865
-#define GL_QUERY_RESULT_ARB 0x8866
-#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867
-#endif
-typedef void (WINE_GLAPI * PGLFNGENQUERIESARBPROC) (GLsizei n, GLuint *queries);
-typedef void (WINE_GLAPI * PGLFNDELETEQUERIESARBPROC) (GLsizei n, const GLuint *queries);
-typedef GLboolean (WINE_GLAPI * PGLFNISQUERYARBPROC) (GLuint query);
-typedef void (WINE_GLAPI * PGLFNBEGINQUERYARBPROC) (GLenum target, GLuint query);
-typedef void (WINE_GLAPI * PGLFNENDQUERYARBPROC) (GLenum target);
-typedef void (WINE_GLAPI * PGLFNGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETQUERYOBJECTIVARBPROC) (GLuint query, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETQUERYOBJECTUIVARBPROC) (GLuint query, GLenum pname, GLuint *params);
-/* GL_HP_occlusion_test isn't complete, but it's constants are used by GL_NV_occlusion_query */
-#ifndef GL_HP_occlusion_test
-#define GL_HP_occlusion_test 1
-#define GL_OCCLUSION_TEST_HP 0x8165
-#define GL_OCCLUSION_TEST_RESULT_HP 0x8165
-#endif
-/* GL_NV_occlusion_query */
-#ifndef GL_NV_occlusion_query
-#define GL_NV_occlusion_query 1
-#define GL_PIXEL_COUNTER_BITS_NV 0x8864
-#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865
-#define GL_PIXEL_COUNT_NV 0x8866
-#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867
-#endif
-typedef void (WINE_GLAPI * PGLFNGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);
-typedef void (WINE_GLAPI * PGLFNDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);
-typedef GLboolean (WINE_GLAPI * PGLFNISOCCLUSIONQUERYNVPROC) (GLuint id);
-typedef void (WINE_GLAPI * PGLFNBEGINOCCLUSIONQUERYNVPROC) (GLuint id);
-typedef void (WINE_GLAPI * PGLFNENDOCCLUSIONQUERYNVPROC) (void);
-typedef void (WINE_GLAPI * PGLFNGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);
-/* GL_EXT_stencil_two_side */
-#ifndef GL_EXT_stencil_two_side
-#define GL_EXT_stencil_two_side 1
-#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910
-#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911
-#endif
-typedef void (WINE_GLAPI * PGLFNACTIVESTENCILFACEEXTPROC) (GLenum face);
-/* GL_ATI_separate_stencil */
-#ifndef GL_ATI_separate_stencil
-#define GL_ATI_separate_stencil 1
-#define GL_STENCIL_BACK_FUNC_ATI 0x8800
-#define GL_STENCIL_BACK_FAIL_ATI 0x8801
-#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802
-#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803
-#endif
-typedef void (WINE_GLAPI * PGLFNSTENCILOPSEPARATEATIPROC) (GLenum, GLenum, GLenum, GLenum);
-typedef void (WINE_GLAPI * PGLFNSTENCILFUNCSEPARATEATIPROC) (GLenum, GLenum, GLint, GLuint);
-/* GL_NV_fence */
-#ifndef GL_NV_fence
-#define GL_NV_fence 1
-#define GL_ALL_COMPLETED_NV 0x84F2
-#define GL_FENCE_STATUS_NV 0x84F3
-#define GL_FENCE_CONDITION_NV 0x84F4
-#endif
-typedef void (WINE_GLAPI * PGLFNGENFENCESNVPROC) (GLsizei, GLuint *);
-typedef void (WINE_GLAPI * PGLFNDELETEFENCESNVPROC) (GLuint, const GLuint *);
-typedef void (WINE_GLAPI * PGLFNSETFENCENVPROC) (GLuint, GLenum);
-typedef GLboolean (WINE_GLAPI * PGLFNTESTFENCENVPROC) (GLuint);
-typedef void (WINE_GLAPI * PGLFNFINISHFENCENVPROC) (GLuint);
-typedef GLboolean (WINE_GLAPI * PGLFNISFENCENVPROC) (GLuint);
-typedef void (WINE_GLAPI * PGLFNGETFENCEIVNVPROC) (GLuint, GLenum, GLint *);
-/* GL_APPLE_fence */
-#ifndef GL_APPLE_fence
-#define GL_APPLE_fence 1
-#define GL_DRAW_PIXELS_APPLE 0x8A0A
-#define GL_FENCE_APPLE 0x8A0B
-#endif
-typedef void (WINE_GLAPI * PGLFNGENFENCESAPPLEPROC) (GLsizei, GLuint *);
-typedef void (WINE_GLAPI * PGLFNDELETEFENCESAPPLEPROC) (GLuint, const GLuint *);
-typedef void (WINE_GLAPI * PGLFNSETFENCEAPPLEPROC) (GLuint);
-typedef GLboolean (WINE_GLAPI * PGLFNTESTFENCEAPPLEPROC) (GLuint);
-typedef void (WINE_GLAPI * PGLFNFINISHFENCEAPPLEPROC) (GLuint);
-typedef GLboolean (WINE_GLAPI * PGLFNISFENCEAPPLEPROC) (GLuint);
-typedef GLboolean (WINE_GLAPI * PGLFNTESTOBJECTAPPLEPROC) (GLenum, GLuint);
-typedef void (WINE_GLAPI * PGLFNFINISHOBJECTAPPLEPROC) (GLenum, GLuint);
-/* GL_APPLE_client_storage */
-#ifndef GL_APPLE_client_storage
-#define GL_APPLE_client_storage 1
-#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2
-#endif
-/* GLX_SGI_video_sync */
-typedef int (WINE_GLAPI * PGLXFNGETVIDEOSYNCSGIPROC) (unsigned int *);
-typedef int (WINE_GLAPI * PGLXFNWAITVIDEOSYNCSGIPROC) (int, int, unsigned int *);
-
-/* GL_SGIS_generate_mipmap */
-#ifndef GLX_SGIS_generate_mipmap
-#define GL_GENERATE_MIPMAP_SGIS 0x8191
-#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
-#define GLX_SGIS_generate_mipmap
-#endif
-
-/* GL_NV_depth_clamp */
-#ifndef GL_NV_depth_clamp
-#define GL_DEPTH_CLAMP_NV 0x864F
-#endif
-
-/* GL_APPLE_flush_render */
-typedef void (WINE_GLAPI * PGLFNFLUSHRENDERAPPLEPROC) (void);
-typedef void (WINE_GLAPI * PGLFNFINISHRENDERAPPLEPROC) (void);
-
-/* GL_APPLE_ycbcr_422 */
-#ifndef GL_APPLE_ycbcr_422
-#define GL_APPLE_ycbcr_422
-#define GL_YCBCR_422_APPLE 0x85B9
-#define UNSIGNED_SHORT_8_8_APPLE 0x85BA
-#define UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB
-#endif
-
-/* GL_ARB_texture_rectangle */
-#ifndef GL_ARB_texture_rectangle
-#define GL_ARB_texture_rectangle
-#define GL_TEXTURE_RECTANGLE_ARB 0x84F5
-#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6
-#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7
-#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8
-#define GL_SAMPLER_2D_RECT_ARB 0x8B63
-#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64
-#endif
-
-/* GL_APPLE_float_pixels */
-#ifndef GL_APPLE_float_pixels
-#define GL_APPLE_float_pixels
-#define GL_HALF_APPLE 0x140B
-#define GL_COLOR_FLOAT_APPLE 0x8A0F
-#define GL_RGBA_FLOAT32_APPLE 0x8814
-#define GL_RGB_FLOAT32_APPLE 0x8815
-#define GL_ALPHA_FLOAT32_APPLE 0x8816
-#define GL_INTENSITY_FLOAT32_APPLE 0x8817
-#define GL_LUMINANCE_FLOAT32_APPLE 0x8818
-#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819
-#define GL_RGBA_FLOAT16_APPLE 0x881A
-#define GL_RGB_FLOAT16_APPLE 0x881B
-#define GL_ALPHA_FLOAT16_APPLE 0x881C
-#define GL_INTENSITY_FLOAT16_APPLE 0x881D
-#define GL_LUMINANCE_FLOAT16_APPLE 0x881E
-#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F
-#endif
-
-/* GL_EXT_gpu_program_parameters */
-#ifndef GL_EXT_gpu_program_parameters
-#define GL_EXT_gpu_program_parameters
-typedef void (WINE_GLAPI * PGLFNPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const float *params);
-typedef void (WINE_GLAPI * PGLFNPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const float *params);
-#endif
-
-/* GL_NV_light_max_exponent */
-#ifndef GL_NV_light_max_exponent
-#define GL_NV_light_max_exponent
-#define GL_MAX_SHININESS_NV 0x8504
-#define GL_MAX_SPOT_EXPONENT_NV 0x8505
-#endif
-
-/* GL_ATI_fragment_shader */
-#ifndef GL_ATI_fragment_shader
-#define GL_ATI_fragment_shader
-typedef GLuint (WINE_GLAPI *PGLFNGENFRAGMENTSHADERSATI) (GLuint range);
-typedef void (WINE_GLAPI *PGLFNBINDFRAGMENTSHADERATI) (GLuint id);
-typedef void (WINE_GLAPI *PGLFNDELETEFRAGMENTSHADERATI) (GLuint id);
-typedef void (WINE_GLAPI *PGLFNBEGINFRAGMENTSHADERATI) (void);
-typedef void (WINE_GLAPI *PGLFNENDFRAGMENTSHADERATI) (void);
-typedef void (WINE_GLAPI *PGLFNPASSTEXCOORDATI) (GLuint dst, GLuint coord, GLenum swizzle);
-typedef void (WINE_GLAPI *PGLFNSAMPLEMAPATI) (GLuint dst, GLuint interp, GLenum swizzle);
-typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP1ATI) (GLenum op, GLuint dst, GLuint dstMask,
- GLuint dstMod, GLuint arg1, GLuint arg1Rep,
- GLuint arg1Mod);
-typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP2ATI) (GLenum op, GLuint dst, GLuint dstMask,
- GLuint dstMod, GLuint arg1, GLuint arg1Rep,
- GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
- GLuint arg2Mod);
-typedef void (WINE_GLAPI *PGLFNCOLORFRAGMENTOP3ATI) (GLenum op, GLuint dst, GLuint dstMask,
- GLuint dstMod, GLuint arg1, GLuint arg1Rep,
- GLuint arg1Mod, GLuint arg2, GLuint arg2Rep,
- GLuint arg2Mod, GLuint arg3, GLuint arg3Rep,
- GLuint arg3Mod);
-typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP1ATI) (GLenum op, GLuint dst, GLuint dstMod,
- GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);
-typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP2ATI) (GLenum op, GLuint dst, GLuint dstMod,
- GLuint arg1, GLuint arg1Rep, GLuint arg1Mod,
- GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);
-typedef void (WINE_GLAPI *PGLFNALPHAFRAGMENTOP3ATI) (GLenum op, GLuint dst, GLuint dstMod,
- GLuint arg1, GLuint arg1Rep, GLuint arg1Mod,
- GLuint arg2, GLuint arg2Rep, GLuint arg2Mod,
- GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);
-typedef void (WINE_GLAPI *PGLFNSETFRAGMENTSHADERCONSTANTATI) (GLuint dst, const GLfloat *value);
-#define GL_FRAGMENT_SHADER_ATI 0x8920
-#define GL_REG_0_ATI 0x8921
-#define GL_REG_1_ATI 0x8922
-#define GL_REG_2_ATI 0x8923
-#define GL_REG_3_ATI 0x8924
-#define GL_REG_4_ATI 0x8925
-#define GL_REG_5_ATI 0x8926
-#define GL_CON_0_ATI 0x8941
-#define GL_CON_1_ATI 0x8942
-#define GL_CON_2_ATI 0x8943
-#define GL_CON_3_ATI 0x8944
-#define GL_CON_4_ATI 0x8945
-#define GL_CON_5_ATI 0x8946
-#define GL_CON_6_ATI 0x8947
-#define GL_CON_7_ATI 0x8948
-#define GL_MOV_ATI 0x8961
-#define GL_ADD_ATI 0x8963
-#define GL_MUL_ATI 0x8964
-#define GL_SUB_ATI 0x8965
-#define GL_DOT3_ATI 0x8966
-#define GL_DOT4_ATI 0x8967
-#define GL_MAD_ATI 0x8968
-#define GL_LERP_ATI 0x8969
-#define GL_CND_ATI 0x896A
-#define GL_CND0_ATI 0x896B
-#define GL_DOT2_ADD_ATI 0x896C
-#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D
-#define GL_SWIZZLE_STR_ATI 0x8976
-#define GL_SWIZZLE_STQ_ATI 0x8977
-#define GL_SWIZZLE_STR_DR_ATI 0x8978
-#define GL_SWIZZLE_STQ_DQ_ATI 0x8979
-#define GL_RED_BIT_ATI 0x00000001
-#define GL_GREEN_BIT_ATI 0x00000002
-#define GL_BLUE_BIT_ATI 0x00000004
-#define GL_2X_BIT_ATI 0x00000001
-#define GL_4X_BIT_ATI 0x00000002
-#define GL_8X_BIT_ATI 0x00000004
-#define GL_HALF_BIT_ATI 0x00000008
-#define GL_QUARTER_BIT_ATI 0x00000010
-#define GL_EIGHTH_BIT_ATI 0x00000020
-#define GL_SATURATE_BIT_ATI 0x00000040
-#define GL_2X_BIT_ATI 0x00000001
-#define GL_COMP_BIT_ATI 0x00000002
-#define GL_NEGATE_BIT_ATI 0x00000004
-#define GL_BIAS_BIT_ATI 0x00000008
-#endif
-/* GL_ATI_texture_compression_3dc */
-#ifndef GL_ATI_texture_compression_3dc
-#define GL_ATI_texture_compression_3dc
-#define GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI 0x8837
-#endif
-/* GL_EXT_texture_compression_rgtc */
-#ifndef GL_EXT_texture_compression_rgtc
-#define GL_EXT_texture_compression_rgtc
-#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB
-#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC
-#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD
-#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE
+#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86ef
#endif
/* GL_NV_vertex_program2_option */
#ifndef GL_NV_vertex_program2_option
-#define GL_NV_vertex_program2_option
-#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4
-#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5
+#define GL_NV_vertex_program2_option 1
+#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88f4
+#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88f5
#endif
-/* GL_APPLE_flush_buffer_range */
-#ifndef GL_APPLE_flush_buffer_range
-#define GL_APPLE_flush_buffer_range
-#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12
-#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13
-typedef void (WINE_GLAPI *PGLFNBUFFERPARAMETERIAPPLE) (GLenum target, GLenum pname, GLint param);
-typedef void (WINE_GLAPI *PGLFNFLUSHMAPPEDBUFFERRANGEAPPLE) (GLenum target, GLintptr offset, GLsizeiptr size);
+/* GL_SGIS_generate_mipmap */
+#ifndef GLX_SGIS_generate_mipmap
+#define GLX_SGIS_generate_mipmap 1
+#define GL_GENERATE_MIPMAP_SGIS 0x8191
+#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192
#endif
-/* GL_VERSION_2_0 */
-#ifndef GL_VERSION_2_0
-#define GL_VERSION_2_0 1
-#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION
-#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622
-#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623
-#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624
-#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625
-#define GL_CURRENT_VERTEX_ATTRIB 0x8626
-#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642
-#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643
-#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645
-#define GL_STENCIL_BACK_FUNC 0x8800
-#define GL_STENCIL_BACK_FAIL 0x8801
-#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802
-#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803
-#define GL_MAX_DRAW_BUFFERS 0x8824
-#define GL_DRAW_BUFFER0 0x8825
-#define GL_DRAW_BUFFER1 0x8826
-#define GL_DRAW_BUFFER2 0x8827
-#define GL_DRAW_BUFFER3 0x8828
-#define GL_DRAW_BUFFER4 0x8829
-#define GL_DRAW_BUFFER5 0x882A
-#define GL_DRAW_BUFFER6 0x882B
-#define GL_DRAW_BUFFER7 0x882C
-#define GL_DRAW_BUFFER8 0x882D
-#define GL_DRAW_BUFFER9 0x882E
-#define GL_DRAW_BUFFER10 0x882F
-#define GL_DRAW_BUFFER11 0x8830
-#define GL_DRAW_BUFFER12 0x8831
-#define GL_DRAW_BUFFER13 0x8832
-#define GL_DRAW_BUFFER14 0x8833
-#define GL_DRAW_BUFFER15 0x8834
-#define GL_BLEND_EQUATION_ALPHA 0x883D
-#define GL_POINT_SPRITE 0x8861
-#define GL_COORD_REPLACE 0x8862
-#define GL_MAX_VERTEX_ATTRIBS 0x8869
-#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A
-#define GL_MAX_TEXTURE_COORDS 0x8871
-#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872
-#define GL_FRAGMENT_SHADER 0x8B30
-#define GL_VERTEX_SHADER 0x8B31
-#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49
-#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A
-#define GL_MAX_VARYING_FLOATS 0x8B4B
-#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C
-#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D
-#define GL_SHADER_TYPE 0x8B4F
-#define GL_FLOAT_VEC2 0x8B50
-#define GL_FLOAT_VEC3 0x8B51
-#define GL_FLOAT_VEC4 0x8B52
-#define GL_INT_VEC2 0x8B53
-#define GL_INT_VEC3 0x8B54
-#define GL_INT_VEC4 0x8B55
-#define GL_BOOL 0x8B56
-#define GL_BOOL_VEC2 0x8B57
-#define GL_BOOL_VEC3 0x8B58
-#define GL_BOOL_VEC4 0x8B59
-#define GL_FLOAT_MAT2 0x8B5A
-#define GL_FLOAT_MAT3 0x8B5B
-#define GL_FLOAT_MAT4 0x8B5C
-#define GL_SAMPLER_1D 0x8B5D
-#define GL_SAMPLER_2D 0x8B5E
-#define GL_SAMPLER_3D 0x8B5F
-#define GL_SAMPLER_CUBE 0x8B60
-#define GL_SAMPLER_1D_SHADOW 0x8B61
-#define GL_SAMPLER_2D_SHADOW 0x8B62
-#define GL_DELETE_STATUS 0x8B80
-#define GL_COMPILE_STATUS 0x8B81
-#define GL_LINK_STATUS 0x8B82
-#define GL_VALIDATE_STATUS 0x8B83
-#define GL_INFO_LOG_LENGTH 0x8B84
-#define GL_ATTACHED_SHADERS 0x8B85
-#define GL_ACTIVE_UNIFORMS 0x8B86
-#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87
-#define GL_SHADER_SOURCE_LENGTH 0x8B88
-#define GL_ACTIVE_ATTRIBUTES 0x8B89
-#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A
-#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B
-#define GL_SHADING_LANGUAGE_VERSION 0x8B8C
-#define GL_CURRENT_PROGRAM 0x8B8D
-#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0
-#define GL_LOWER_LEFT 0x8CA1
-#define GL_UPPER_LEFT 0x8CA2
-#define GL_STENCIL_BACK_REF 0x8CA3
-#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4
-#define GL_STENCIL_BACK_WRITEMASK 0x8CA5
-typedef char GLchar;
-#endif
-typedef void (WINE_GLAPI * PGLFNBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);
-typedef void (WINE_GLAPI * PGLFNDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);
-typedef void (WINE_GLAPI * PGLFNSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
-typedef void (WINE_GLAPI * PGLFNSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
-typedef void (WINE_GLAPI * PGLFNSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);
-typedef void (WINE_GLAPI * PGLFNATTACHSHADERPROC) (GLuint program, GLuint shader);
-typedef void (WINE_GLAPI * PGLFNBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);
-typedef void (WINE_GLAPI * PGLFNCOMPILESHADERPROC) (GLuint shader);
-typedef GLuint (WINE_GLAPI * PGLFNCREATEPROGRAMPROC) (void);
-typedef GLuint (WINE_GLAPI * PGLFNCREATESHADERPROC) (GLenum type);
-typedef void (WINE_GLAPI * PGLFNDELETEPROGRAMPROC) (GLuint program);
-typedef void (WINE_GLAPI * PGLFNDELETESHADERPROC) (GLuint shader);
-typedef void (WINE_GLAPI * PGLFNDETACHSHADERPROC) (GLuint program, GLuint shader);
-typedef void (WINE_GLAPI * PGLFNDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);
-typedef void (WINE_GLAPI * PGLFNENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
-typedef void (WINE_GLAPI * PGLFNGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
-typedef void (WINE_GLAPI * PGLFNGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);
-typedef void (WINE_GLAPI * PGLFNGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);
-typedef GLint (WINE_GLAPI * PGLFNGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);
-typedef void (WINE_GLAPI * PGLFNGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
-typedef void (WINE_GLAPI * PGLFNGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
-typedef void (WINE_GLAPI * PGLFNGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);
-typedef GLint (WINE_GLAPI * PGLFNGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
-typedef void (WINE_GLAPI * PGLFNGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);
-typedef void (WINE_GLAPI * PGLFNGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);
-typedef void (WINE_GLAPI * PGLFNGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);
-typedef void (WINE_GLAPI * PGLFNGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);
-typedef GLboolean (WINE_GLAPI * PGLFNISPROGRAMPROC) (GLuint program);
-typedef GLboolean (WINE_GLAPI * PGLFNISSHADERPROC) (GLuint shader);
-typedef void (WINE_GLAPI * PGLFNLINKPROGRAMPROC) (GLuint program);
-typedef void (WINE_GLAPI * PGLFNSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);
-typedef void (WINE_GLAPI * PGLFNUSEPROGRAMPROC) (GLuint program);
-typedef void (WINE_GLAPI * PGLFNUNIFORM1FPROC) (GLint location, GLfloat v0);
-typedef void (WINE_GLAPI * PGLFNUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
-typedef void (WINE_GLAPI * PGLFNUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
-typedef void (WINE_GLAPI * PGLFNUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
-typedef void (WINE_GLAPI * PGLFNUNIFORM1IPROC) (GLint location, GLint v0);
-typedef void (WINE_GLAPI * PGLFNUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);
-typedef void (WINE_GLAPI * PGLFNUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);
-typedef void (WINE_GLAPI * PGLFNUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
-typedef void (WINE_GLAPI * PGLFNUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
-typedef void (WINE_GLAPI * PGLFNUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
-typedef void (WINE_GLAPI * PGLFNVALIDATEPROGRAMPROC) (GLuint program);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1SPROC) (GLuint index, GLshort x);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);
-typedef void (WINE_GLAPI * PGLFNVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
-
-
-/****************************************************
- * OpenGL Official Version
- * defines
- ****************************************************/
-/* GL_VERSION_1_3 */
-#if !defined(GL_DOT3_RGBA)
-# define GL_DOT3_RGBA 0x8741
-#endif
-#if !defined(GL_SUBTRACT)
-# define GL_SUBTRACT 0x84E7
-#endif
-
-
-/****************************************************
- * Enumerated types
- ****************************************************/
-#define WINE_DEFAULT_VIDMEM 64*1024*1024
-
-#define MAKEDWORD_VERSION(maj, min) ((maj & 0x0000FFFF) << 16) | (min & 0x0000FFFF)
-
-/* OpenGL Supported Extensions (ARB and EXT) */
-typedef enum _GL_SupportedExt {
- WINED3D_GL_EXT_NONE,
- /* ARB */
- ARB_COLOR_BUFFER_FLOAT,
- ARB_DEPTH_BUFFER_FLOAT,
- ARB_DEPTH_CLAMP,
- ARB_DEPTH_TEXTURE,
- ARB_DRAW_BUFFERS,
- ARB_FRAGMENT_PROGRAM,
- ARB_FRAGMENT_SHADER,
- ARB_FRAMEBUFFER_OBJECT,
- ARB_GEOMETRY_SHADER4,
- ARB_IMAGING,
- ARB_MULTISAMPLE,
- ARB_MULTITEXTURE,
- ARB_OCCLUSION_QUERY,
- ARB_POINT_PARAMETERS,
- ARB_PROVOKING_VERTEX,
- ARB_PIXEL_BUFFER_OBJECT,
- ARB_POINT_SPRITE,
- ARB_TEXTURE_COMPRESSION,
- ARB_TEXTURE_CUBE_MAP,
- ARB_TEXTURE_ENV_ADD,
- ARB_TEXTURE_ENV_COMBINE,
- ARB_TEXTURE_ENV_DOT3,
- ARB_TEXTURE_FLOAT,
- ARB_HALF_FLOAT_PIXEL,
- ARB_TEXTURE_BORDER_CLAMP,
- ARB_TEXTURE_MIRRORED_REPEAT,
- ARB_TEXTURE_NON_POWER_OF_TWO,
- ARB_TEXTURE_RECTANGLE,
- ARB_TEXTURE_RG,
- ARB_VERTEX_PROGRAM,
- ARB_VERTEX_BLEND,
- ARB_VERTEX_BUFFER_OBJECT,
- ARB_VERTEX_SHADER,
- ARB_SHADER_OBJECTS,
- ARB_SHADER_TEXTURE_LOD,
- ARB_HALF_FLOAT_VERTEX,
- /* EXT */
- EXT_BLEND_COLOR,
- EXT_BLEND_MINMAX,
- EXT_BLEND_EQUATION_SEPARATE,
- EXT_BLEND_FUNC_SEPARATE,
- EXT_FOG_COORD,
- EXT_FRAMEBUFFER_OBJECT,
- EXT_FRAMEBUFFER_BLIT,
- EXT_FRAMEBUFFER_MULTISAMPLE,
- EXT_PACKED_DEPTH_STENCIL,
- EXT_PALETTED_TEXTURE,
- EXT_PIXEL_BUFFER_OBJECT,
- EXT_POINT_PARAMETERS,
- EXT_PROVOKING_VERTEX,
- EXT_SECONDARY_COLOR,
- EXT_STENCIL_TWO_SIDE,
- EXT_STENCIL_WRAP,
- EXT_TEXTURE3D,
- EXT_TEXTURE_COMPRESSION_S3TC,
- EXT_TEXTURE_COMPRESSION_RGTC,
- EXT_TEXTURE_FILTER_ANISOTROPIC,
- EXT_TEXTURE_LOD,
- EXT_TEXTURE_LOD_BIAS,
- EXT_TEXTURE_ENV_ADD,
- EXT_TEXTURE_ENV_COMBINE,
- EXT_TEXTURE_ENV_DOT3,
- EXT_TEXTURE_SRGB,
- EXT_TEXTURE_SWIZZLE,
- EXT_GPU_PROGRAM_PARAMETERS,
- EXT_VERTEX_ARRAY_BGRA,
- /* NVIDIA */
- NV_HALF_FLOAT,
- NV_FOG_DISTANCE,
- NV_FRAGMENT_PROGRAM,
- NV_FRAGMENT_PROGRAM2,
- NV_OCCLUSION_QUERY,
- NV_REGISTER_COMBINERS,
- NV_REGISTER_COMBINERS2,
- NV_TEXGEN_REFLECTION,
- NV_TEXTURE_ENV_COMBINE4,
- NV_TEXTURE_SHADER,
- NV_TEXTURE_SHADER2,
- NV_TEXTURE_SHADER3,
- NV_VERTEX_PROGRAM,
- NV_VERTEX_PROGRAM1_1,
- NV_VERTEX_PROGRAM2,
- NV_VERTEX_PROGRAM2_OPTION,
- NV_VERTEX_PROGRAM3,
- NV_FRAGMENT_PROGRAM_OPTION,
- NV_FENCE,
- NV_DEPTH_CLAMP,
- NV_LIGHT_MAX_EXPONENT,
- /* ATI */
- ATI_SEPARATE_STENCIL,
- ATI_TEXTURE_ENV_COMBINE3,
- ATI_TEXTURE_MIRROR_ONCE,
- EXT_VERTEX_SHADER,
- ATI_FRAGMENT_SHADER,
- ATI_TEXTURE_COMPRESSION_3DC,
- /* APPLE */
- APPLE_FENCE,
- APPLE_CLIENT_STORAGE,
- APPLE_FLUSH_RENDER,
- APPLE_YCBCR_422,
- APPLE_FLOAT_PIXELS,
- APPLE_FLUSH_BUFFER_RANGE,
- /* SGI */
- SGI_VIDEO_SYNC,
- SGIS_GENERATE_MIPMAP,
-
- /* Internally used */
- WINE_NORMALIZED_TEXRECT,
-
- /* WGL extensions */
- WGL_ARB_PBUFFER,
- WGL_ARB_PIXEL_FORMAT,
- WGL_WINE_PIXEL_FORMAT_PASSTHROUGH,
-
- WINED3D_GL_EXT_COUNT,
-} GL_SupportedExt;
-
-
-/****************************************************
- * #Defines
- ****************************************************/
-#define GL_EXT_FUNCS_GEN \
- /** ARB Extensions **/ \
- /* GL_ARB_color_buffer_float */ \
- USE_GL_FUNC(PGLFNCLAMPCOLORARBPROC, glClampColorARB, ARB_COLOR_BUFFER_FLOAT, NULL )\
- /* GL_ARB_draw_buffers */ \
- USE_GL_FUNC(PGLFNDRAWBUFFERSARBPROC, glDrawBuffersARB, ARB_DRAW_BUFFERS, NULL )\
- /* GL_ARB_framebuffer_object */ \
- USE_GL_FUNC(PGLFNGLISRENDERBUFFERPROC, glIsRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLBINDRENDERBUFFERPROC, glBindRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLDELETERENDERBUFFERSPROC, glDeleteRenderbuffers, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGENRENDERBUFFERSPROC, glGenRenderbuffers, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLRENDERBUFFERSTORAGEPROC, glRenderbufferStorage, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC, glRenderbufferStorageMultisample, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGETRENDERBUFFERPARAMETERIVPROC, glGetRenderbufferParameteriv, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLISFRAMEBUFFERPROC, glIsFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLCHECKFRAMEBUFFERSTATUSPROC, glCheckFramebufferStatus, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE1DPROC, glFramebufferTexture1D, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE3DPROC, glFramebufferTexture3D, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURELAYERPROC, glFramebufferTextureLayer, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERRENDERBUFFERPROC, glFramebufferRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC, glGetFramebufferAttachmentParameteriv, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLBLITFRAMEBUFFERPROC, glBlitFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGENERATEMIPMAPPROC, glGenerateMipmap, ARB_FRAMEBUFFER_OBJECT, NULL )\
- /* GL_ARB_geometry_shader4 */ \
- USE_GL_FUNC(PGLFNPROGRAMPARAMETERIARBPROC, glProgramParameteriARB, ARB_GEOMETRY_SHADER4, NULL ) \
- USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTUREARBPROC, glFramebufferTextureARB, ARB_GEOMETRY_SHADER4, NULL ) \
- USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTURELAYERARBPROC, glFramebufferTextureLayerARB, ARB_GEOMETRY_SHADER4, NULL ) \
- USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTUREFACEARBPROC, glFramebufferTextureFaceARB, ARB_GEOMETRY_SHADER4, NULL ) \
- /* GL_ARB_imaging, GL_EXT_blend_minmax */ \
- USE_GL_FUNC(PGLFNBLENDCOLORPROC, glBlendColorEXT, EXT_BLEND_COLOR, NULL )\
- USE_GL_FUNC(PGLFNBLENDEQUATIONPROC, glBlendEquationEXT, EXT_BLEND_MINMAX, NULL )\
- /* GL_ARB_multisample */ \
- USE_GL_FUNC(WINED3D_PFNGLSAMPLECOVERAGEARBPROC, glSampleCoverageARB, ARB_MULTISAMPLE, NULL )\
- /* GL_ARB_multitexture */ \
- USE_GL_FUNC(WINED3D_PFNGLACTIVETEXTUREARBPROC, glActiveTextureARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLCLIENTACTIVETEXTUREARBPROC, glClientActiveTextureARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD1FARBPROC, glMultiTexCoord1fARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD1FVARBPROC, glMultiTexCoord1fvARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2FARBPROC, glMultiTexCoord2fARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2FVARBPROC, glMultiTexCoord2fvARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD3FARBPROC, glMultiTexCoord3fARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD3FVARBPROC, glMultiTexCoord3fvARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4FARBPROC, glMultiTexCoord4fARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4FVARBPROC, glMultiTexCoord4fvARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2SVARBPROC, glMultiTexCoord2svARB, ARB_MULTITEXTURE, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4SVARBPROC, glMultiTexCoord4svARB, ARB_MULTITEXTURE, NULL )\
- /* GL_ARB_occlusion_query */ \
- USE_GL_FUNC(PGLFNGENQUERIESARBPROC, glGenQueriesARB, ARB_OCCLUSION_QUERY, NULL )\
- USE_GL_FUNC(PGLFNDELETEQUERIESARBPROC, glDeleteQueriesARB, ARB_OCCLUSION_QUERY, NULL )\
- USE_GL_FUNC(PGLFNBEGINQUERYARBPROC, glBeginQueryARB, ARB_OCCLUSION_QUERY, NULL )\
- USE_GL_FUNC(PGLFNENDQUERYARBPROC, glEndQueryARB, ARB_OCCLUSION_QUERY, NULL )\
- USE_GL_FUNC(PGLFNGETQUERYOBJECTIVARBPROC, glGetQueryObjectivARB, ARB_OCCLUSION_QUERY, NULL )\
- USE_GL_FUNC(PGLFNGETQUERYOBJECTUIVARBPROC, glGetQueryObjectuivARB, ARB_OCCLUSION_QUERY, NULL )\
- /* GL_ARB_point_parameters */ \
- USE_GL_FUNC(PGLFNGLPOINTPARAMETERFARBPROC, glPointParameterfARB, ARB_POINT_PARAMETERS, NULL )\
- USE_GL_FUNC(PGLFNGLPOINTPARAMETERFVARBPROC, glPointParameterfvARB, ARB_POINT_PARAMETERS, NULL )\
- /* GL_ARB_provoking_vertex */ \
- USE_GL_FUNC(PGLFNGLPROVOKINGVERTEXPROC, glProvokingVertex, ARB_PROVOKING_VERTEX, NULL)\
- /* GL_ARB_texture_compression */ \
- USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE2DPROC, glCompressedTexImage2DARB, ARB_TEXTURE_COMPRESSION,NULL )\
- USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE3DPROC, glCompressedTexImage3DARB, ARB_TEXTURE_COMPRESSION,NULL )\
- USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC, glCompressedTexSubImage2DARB, ARB_TEXTURE_COMPRESSION,NULL )\
- USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC, glCompressedTexSubImage3DARB, ARB_TEXTURE_COMPRESSION,NULL )\
- USE_GL_FUNC(PGLFNGETCOMPRESSEDTEXIMAGEPROC, glGetCompressedTexImageARB, ARB_TEXTURE_COMPRESSION,NULL )\
- /* GL_ARB_vertex_blend */ \
- USE_GL_FUNC(PGLFNGLWEIGHTPOINTERARB, glWeightPointerARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLWEIGHTBV, glWeightbvARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLWEIGHTSV, glWeightsvARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLWEIGHTIV, glWeightivARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLWEIGHTFV, glWeightfvARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLWEIGHTDV, glWeightdvARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLWEIGHTUBV, glWeightubvARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLWEIGHTUSV, glWeightusvARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLWEIGHTUIV, glWeightuivARB, ARB_VERTEX_BLEND, NULL )\
- USE_GL_FUNC(PGLFNGLVERTEXBLENDARB, glVertexBlendARB, ARB_VERTEX_BLEND, NULL )\
- /* GL_ARB_vertex_buffer_object */ \
- USE_GL_FUNC(PGLFNBINDBUFFERARBPROC, glBindBufferARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNDELETEBUFFERSARBPROC, glDeleteBuffersARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNGENBUFFERSARBPROC, glGenBuffersARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNISBUFFERARBPROC, glIsBufferARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNBUFFERDATAARBPROC, glBufferDataARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNBUFFERSUBDATAARBPROC, glBufferSubDataARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNGETBUFFERSUBDATAARBPROC, glGetBufferSubDataARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNMAPBUFFERARBPROC, glMapBufferARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNUNMAPBUFFERARBPROC, glUnmapBufferARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNGETBUFFERPARAMETERIVARBPROC, glGetBufferParameterivARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- USE_GL_FUNC(PGLFNGETBUFFERPOINTERVARBPROC, glGetBufferPointervARB, ARB_VERTEX_BUFFER_OBJECT,NULL)\
- /** EXT Extensions **/ \
- /* GL_EXT_blend_equation_separate */ \
- USE_GL_FUNC(PGLFNBLENDFUNCSEPARATEEXTPROC, glBlendFuncSeparateEXT, EXT_BLEND_FUNC_SEPARATE, NULL)\
- /* GL_EXT_blend_func_separate */ \
- USE_GL_FUNC(PGLFNBLENDEQUATIONSEPARATEEXTPROC, glBlendEquationSeparateEXT, EXT_BLEND_EQUATION_SEPARATE, NULL)\
- /* GL_EXT_fog_coord */ \
- USE_GL_FUNC(PGLFNGLFOGCOORDFEXTPROC, glFogCoordfEXT, EXT_FOG_COORD, NULL )\
- USE_GL_FUNC(PGLFNGLFOGCOORDFVEXTPROC, glFogCoordfvEXT, EXT_FOG_COORD, NULL )\
- USE_GL_FUNC(PGLFNGLFOGCOORDDEXTPROC, glFogCoorddEXT, EXT_FOG_COORD, NULL )\
- USE_GL_FUNC(PGLFNGLFOGCOORDDVEXTPROC, glFogCoorddvEXT, EXT_FOG_COORD, NULL )\
- USE_GL_FUNC(PGLFNGLFOGCOORDPOINTEREXTPROC, glFogCoordPointerEXT, EXT_FOG_COORD, NULL )\
- /* GL_EXT_framebuffer_object */ \
- USE_GL_FUNC(PGLFNGLISRENDERBUFFEREXTPROC, glIsRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLBINDRENDERBUFFEREXTPROC, glBindRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLDELETERENDERBUFFERSEXTPROC, glDeleteRenderbuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGENRENDERBUFFERSEXTPROC, glGenRenderbuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLRENDERBUFFERSTORAGEEXTPROC, glRenderbufferStorageEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLISFRAMEBUFFEREXTPROC, glIsFramebufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLBINDFRAMEBUFFEREXTPROC, glBindFramebufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLDELETEFRAMEBUFFERSEXTPROC, glDeleteFramebuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGENFRAMEBUFFERSEXTPROC, glGenFramebuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, glCheckFramebufferStatusEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE1DEXTPROC, glFramebufferTexture1DEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE2DEXTPROC, glFramebufferTexture2DEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE3DEXTPROC, glFramebufferTexture3DEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, glFramebufferRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGENERATEMIPMAPEXTPROC, glGenerateMipmapEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGETRENDERBUFFERPARAMETERIVEXTPROC, glGetRenderbufferParameterivEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- USE_GL_FUNC(PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC, glGetFramebufferAttachmentParameterivEXT, EXT_FRAMEBUFFER_OBJECT, NULL )\
- /* GL_EXT_framebuffer_blit */ \
- USE_GL_FUNC(PGLFNGLBLITFRAMEBUFFEREXTPROC, glBlitFramebufferEXT, EXT_FRAMEBUFFER_BLIT, NULL )\
- /* GL_EXT_framebuffer_multisample */ \
- USE_GL_FUNC(PGLFNRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC, glRenderbufferStorageMultisampleEXT, EXT_FRAMEBUFFER_MULTISAMPLE, NULL )\
- /* GL_EXT_paletted_texture */ \
- USE_GL_FUNC(PGLFNGLCOLORTABLEEXTPROC, glColorTableEXT, EXT_PALETTED_TEXTURE, NULL )\
- /* GL_EXT_point_parameters */ \
- USE_GL_FUNC(PGLFNGLPOINTPARAMETERFEXTPROC, glPointParameterfEXT, EXT_POINT_PARAMETERS, NULL )\
- USE_GL_FUNC(PGLFNGLPOINTPARAMETERFVEXTPROC, glPointParameterfvEXT, EXT_POINT_PARAMETERS, NULL )\
- /* GL_EXT_provoking_vertex */ \
- USE_GL_FUNC(PGLFNGLPROVOKINGVERTEXEXTPROC, glProvokingVertexEXT, EXT_PROVOKING_VERTEX, NULL)\
- /* GL_EXT_secondary_color */ \
- USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3UBEXTPROC, glSecondaryColor3ubEXT, EXT_SECONDARY_COLOR, NULL )\
- USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3UBVEXTPROC, glSecondaryColor3ubvEXT, EXT_SECONDARY_COLOR, NULL )\
- USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FEXTPROC, glSecondaryColor3fEXT, EXT_SECONDARY_COLOR, NULL )\
- USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FVEXTPROC, glSecondaryColor3fvEXT, EXT_SECONDARY_COLOR, NULL )\
- USE_GL_FUNC(PGLFNGLSECONDARYCOLORPOINTEREXTPROC, glSecondaryColorPointerEXT, EXT_SECONDARY_COLOR, NULL )\
- /* GL_EXT_texture3D */ \
- USE_GL_FUNC(PGLFNGLTEXIMAGE3DEXTPROC, glTexImage3DEXT, EXT_TEXTURE3D, glTexImage3D)\
- USE_GL_FUNC(PGLFNGLTEXSUBIMAGE3DEXTPROC, glTexSubImage3DEXT, EXT_TEXTURE3D, glTexSubImage3D)\
- /* GL_ARB_vertex_program */ \
- USE_GL_FUNC(PGLFNGENPROGRAMSARBPROC, glGenProgramsARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNBINDPROGRAMARBPROC, glBindProgramARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNPROGRAMSTRINGARBPROC, glProgramStringARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNDELETEPROGRAMSARBPROC, glDeleteProgramsARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNPROGRAMENVPARAMETER4FVARBPROC, glProgramEnvParameter4fvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNPROGRAMLOCALPARAMETER4FVARBPROC, glProgramLocalParameter4fvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIBPOINTERARBPROC, glVertexAttribPointerARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNENABLEVERTEXATTRIBARRAYARBPROC, glEnableVertexAttribArrayARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNDISABLEVERTEXATTRIBARRAYARBPROC, glDisableVertexAttribArrayARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB1DARBPROC, glVertexAttrib1dARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB1DVARBPROC, glVertexAttrib1dvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB1FARBPROC, glVertexAttrib1fARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB1FVARBPROC, glVertexAttrib1fvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB1SARBPROC, glVertexAttrib1sARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB1SVARBPROC, glVertexAttrib1svARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB2DARBPROC, glVertexAttrib2dARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB2DVARBPROC, glVertexAttrib2dvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB2FARBPROC, glVertexAttrib2fARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB2FVARBPROC, glVertexAttrib2fvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB2SARBPROC, glVertexAttrib2sARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB2SVARBPROC, glVertexAttrib2svARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB3DARBPROC, glVertexAttrib3dARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB3DVARBPROC, glVertexAttrib3dvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB3FARBPROC, glVertexAttrib3fARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB3FVARBPROC, glVertexAttrib3fvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB3SARBPROC, glVertexAttrib3sARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB3SVARBPROC, glVertexAttrib3svARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4NBVARBPROC, glVertexAttrib4NbvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4NIVARBPROC, glVertexAttrib4NivARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4NSVARBPROC, glVertexAttrib4NsvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4NUBARBPROC, glVertexAttrib4NubARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4NUBVARBPROC, glVertexAttrib4NubvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4NUIVARBPROC, glVertexAttrib4NuivARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4NUSVARBPROC, glVertexAttrib4NusvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4BVARBPROC, glVertexAttrib4bvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4DARBPROC, glVertexAttrib4dARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4DVARBPROC, glVertexAttrib4dvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4FARBPROC, glVertexAttrib4fARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4FVARBPROC, glVertexAttrib4fvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4IVARBPROC, glVertexAttrib4ivARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4SARBPROC, glVertexAttrib4sARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4SVARBPROC, glVertexAttrib4svARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4UBVARBPROC, glVertexAttrib4ubvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4UIVARBPROC, glVertexAttrib4uivARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4USVARBPROC, glVertexAttrib4usvARB, ARB_VERTEX_PROGRAM, NULL )\
- USE_GL_FUNC(PGLFNGETPROGRAMIVARBPROC, glGetProgramivARB, ARB_VERTEX_PROGRAM, NULL )\
- /* GL_ARB_shader_objects */ \
- USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC, glGetObjectParameterivARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC, glGetObjectParameterfvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC, glGetUniformLocationARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETACTIVEUNIFORMARBPROC, glGetActiveUniformARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IARBPROC, glUniform1iARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IARBPROC, glUniform2iARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IARBPROC, glUniform3iARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IARBPROC, glUniform4iARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IARBPROC, glUniform1fARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FARBPROC, glUniform2fARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FARBPROC, glUniform3fARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FARBPROC, glUniform4fARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FVARBPROC, glUniform1fvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FVARBPROC, glUniform2fvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FVARBPROC, glUniform3fvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FVARBPROC, glUniform4fvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IVARBPROC, glUniform1ivARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IVARBPROC, glUniform2ivARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IVARBPROC, glUniform3ivARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IVARBPROC, glUniform4ivARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC, glUniformMatrix2fvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC, glUniformMatrix3fvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC, glUniformMatrix4fvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMFVARBPROC, glGetUniformfvARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMIVARBPROC, glGetUniformivARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETINFOLOGARBPROC, glGetInfoLogARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC, glUseProgramObjectARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLCREATESHADEROBJECTARBPROC, glCreateShaderObjectARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLSHADERSOURCEARBPROC, glShaderSourceARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLCOMPILESHADERARBPROC, glCompileShaderARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC, glCreateProgramObjectARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLATTACHOBJECTARBPROC, glAttachObjectARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLLINKPROGRAMARBPROC, glLinkProgramARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLDETACHOBJECTARBPROC, glDetachObjectARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLDELETEOBJECTARBPROC, glDeleteObjectARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLVALIDATEPROGRAMARBPROC, glValidateProgramARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC, glGetAttachedObjectsARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETHANDLEARBPROC, glGetHandleARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETSHADERSOURCEARBPROC, glGetShaderSourceARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC, glBindAttribLocationARB, ARB_SHADER_OBJECTS, NULL )\
- USE_GL_FUNC(WINED3D_PFNGLGETATTRIBLOCATIONARBPROC, glGetAttribLocationARB, ARB_SHADER_OBJECTS, NULL )\
- /* GL_EXT_stencil_two_side */ \
- USE_GL_FUNC(PGLFNACTIVESTENCILFACEEXTPROC, glActiveStencilFaceEXT, EXT_STENCIL_TWO_SIDE, NULL )\
- /* GL_ATI_separate_stencil */ \
- USE_GL_FUNC(PGLFNSTENCILOPSEPARATEATIPROC, glStencilOpSeparateATI, ATI_SEPARATE_STENCIL, NULL )\
- USE_GL_FUNC(PGLFNSTENCILFUNCSEPARATEATIPROC, glStencilFuncSeparateATI, ATI_SEPARATE_STENCIL, NULL )\
- /* GL_NV_half_float */ \
- USE_GL_FUNC(PGLFNVERTEX2HNVPROC, glVertex2hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEX2HVNVPROC, glVertex2hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEX3HNVPROC, glVertex3hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEX3HVNVPROC, glVertex3hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEX4HNVPROC, glVertex4hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEX4HVNVPROC, glVertex4hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNNORMAL3HNVPROC, glNormal3hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNNORMAL3HVNVPROC, glNormal3hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNCOLOR3HNVPROC, glColor3hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNCOLOR3HVNVPROC, glColor3hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNCOLOR4HNVPROC, glColor4hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNCOLOR4HVNVPROC, glColor4hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNTEXCOORD1HNVPROC, glTexCoord1hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNTEXCOORD1HVNVPROC, glTexCoord1hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNTEXCOORD2HNVPROC, glTexCoord2hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNTEXCOORD2HVNVPROC, glTexCoord2hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNTEXCOORD3HNVPROC, glTexCoord3hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNTEXCOORD3HVNVPROC, glTexCoord3hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNTEXCOORD4HNVPROC, glTexCoord4hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNTEXCOORD4HVNVPROC, glTexCoord4hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNMULTITEXCOORD1HNVPROC, glMultiTexCoord1hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNMULTITEXCOORD1HVNVPROC, glMultiTexCoord1hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNMULTITEXCOORD2HNVPROC, glMultiTexCoord2hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNMULTITEXCOORD2HVNVPROC, glMultiTexCoord2hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNMULTITEXCOORD3HNVPROC, glMultiTexCoord3hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNMULTITEXCOORD3HVNVPROC, glMultiTexCoord3hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNMULTITEXCOORD4HNVPROC, glMultiTexCoord4hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNMULTITEXCOORD4HVNVPROC, glMultiTexCoord4hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNFOGCOORDHNVPROC, glFogCoordhNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNFOGCOORDHVNVPROC, glFogCoordhvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNSECONDARYCOLOR3HNVPROC, glSecondaryColor3hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNSECONDARYCOLOR3HVNVPROC, glSecondaryColor3hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXWEIGHTHNVPROC, glVertexWeighthNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXWEIGHTHVNVPROC, glVertexWeighthvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB1HNVPROC, glVertexAttrib1hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB1HVNVPROC, glVertexAttrib1hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB2HNVPROC, glVertexAttrib2hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB2HVNVPROC, glVertexAttrib2hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB3HNVPROC, glVertexAttrib3hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB3HVNVPROC, glVertexAttrib3hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4HNVPROC, glVertexAttrib4hNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIB4HVNVPROC, glVertexAttrib4hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIBS1HVNVPROC, glVertexAttribs1hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIBS2HVNVPROC, glVertexAttribs2hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIBS3HVNVPROC, glVertexAttribs3hvNV, NV_HALF_FLOAT, NULL )\
- USE_GL_FUNC(PGLFNVERTEXATTRIBS4HVNVPROC, glVertexAttribs4hvNV, NV_HALF_FLOAT, NULL )\
- /* GL_NV_register_combiners */ \
- USE_GL_FUNC(PGLFNCOMBINERINPUTNVPROC, glCombinerInputNV, NV_REGISTER_COMBINERS, NULL )\
- USE_GL_FUNC(PGLFNCOMBINEROUTPUTNVPROC, glCombinerOutputNV, NV_REGISTER_COMBINERS, NULL )\
- USE_GL_FUNC(PGLFNCOMBINERPARAMETERFNVPROC, glCombinerParameterfNV, NV_REGISTER_COMBINERS, NULL )\
- USE_GL_FUNC(PGLFNCOMBINERPARAMETERFVNVPROC, glCombinerParameterfvNV, NV_REGISTER_COMBINERS, NULL )\
- USE_GL_FUNC(PGLFNCOMBINERPARAMETERINVPROC, glCombinerParameteriNV, NV_REGISTER_COMBINERS, NULL )\
- USE_GL_FUNC(PGLFNCOMBINERPARAMETERIVNVPROC, glCombinerParameterivNV, NV_REGISTER_COMBINERS, NULL )\
- USE_GL_FUNC(PGLFNFINALCOMBINERINPUTNVPROC, glFinalCombinerInputNV, NV_REGISTER_COMBINERS, NULL )\
- /* GL_NV_fence */ \
- USE_GL_FUNC(PGLFNGENFENCESNVPROC, glGenFencesNV, NV_FENCE, NULL )\
- USE_GL_FUNC(PGLFNDELETEFENCESNVPROC, glDeleteFencesNV, NV_FENCE, NULL )\
- USE_GL_FUNC(PGLFNSETFENCENVPROC, glSetFenceNV, NV_FENCE, NULL )\
- USE_GL_FUNC(PGLFNTESTFENCENVPROC, glTestFenceNV, NV_FENCE, NULL )\
- USE_GL_FUNC(PGLFNFINISHFENCENVPROC, glFinishFenceNV, NV_FENCE, NULL )\
- USE_GL_FUNC(PGLFNISFENCENVPROC, glIsFenceNV, NV_FENCE, NULL )\
- USE_GL_FUNC(PGLFNGETFENCEIVNVPROC, glGetFenceivNV, NV_FENCE, NULL )\
- /* GL_APPLE_fence */ \
- USE_GL_FUNC(PGLFNGENFENCESAPPLEPROC, glGenFencesAPPLE, APPLE_FENCE, NULL )\
- USE_GL_FUNC(PGLFNDELETEFENCESAPPLEPROC, glDeleteFencesAPPLE, APPLE_FENCE, NULL )\
- USE_GL_FUNC(PGLFNSETFENCEAPPLEPROC, glSetFenceAPPLE, APPLE_FENCE, NULL )\
- USE_GL_FUNC(PGLFNTESTFENCEAPPLEPROC, glTestFenceAPPLE, APPLE_FENCE, NULL )\
- USE_GL_FUNC(PGLFNFINISHFENCEAPPLEPROC, glFinishFenceAPPLE, APPLE_FENCE, NULL )\
- USE_GL_FUNC(PGLFNISFENCEAPPLEPROC, glIsFenceAPPLE, APPLE_FENCE, NULL )\
- USE_GL_FUNC(PGLFNTESTOBJECTAPPLEPROC, glTestObjectAPPLE, APPLE_FENCE, NULL )\
- USE_GL_FUNC(PGLFNFINISHOBJECTAPPLEPROC, glFinishObjectAPPLE, APPLE_FENCE, NULL )\
- /* GLX_SGI_video_sync */ \
- USE_GL_FUNC(PGLXFNGETVIDEOSYNCSGIPROC, glXGetVideoSyncSGI, SGI_VIDEO_SYNC, NULL )\
- USE_GL_FUNC(PGLXFNWAITVIDEOSYNCSGIPROC, glXWaitVideoSyncSGI, SGI_VIDEO_SYNC, NULL )\
- /* GL_APPLE_flush_render */ \
- USE_GL_FUNC(PGLFNFLUSHRENDERAPPLEPROC, glFlushRenderAPPLE, APPLE_FLUSH_RENDER, NULL )\
- USE_GL_FUNC(PGLFNFINISHRENDERAPPLEPROC, glFinishRenderAPPLE, APPLE_FLUSH_RENDER, NULL )\
- /* GL_EXT_gpu_program_parameters */ \
- USE_GL_FUNC(PGLFNPROGRAMENVPARAMETERS4FVEXTPROC, glProgramEnvParameters4fvEXT, EXT_GPU_PROGRAM_PARAMETERS,NULL )\
- USE_GL_FUNC(PGLFNPROGRAMLOCALPARAMETERS4FVEXTPROC, glProgramLocalParameters4fvEXT, EXT_GPU_PROGRAM_PARAMETERS,NULL )\
- /* GL_ATI_fragment_shader */ \
- USE_GL_FUNC(PGLFNGENFRAGMENTSHADERSATI, glGenFragmentShadersATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNBINDFRAGMENTSHADERATI, glBindFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNDELETEFRAGMENTSHADERATI, glDeleteFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNBEGINFRAGMENTSHADERATI, glBeginFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNENDFRAGMENTSHADERATI, glEndFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNPASSTEXCOORDATI, glPassTexCoordATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNSAMPLEMAPATI, glSampleMapATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNCOLORFRAGMENTOP1ATI, glColorFragmentOp1ATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNCOLORFRAGMENTOP2ATI, glColorFragmentOp2ATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNCOLORFRAGMENTOP3ATI, glColorFragmentOp3ATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNALPHAFRAGMENTOP1ATI, glAlphaFragmentOp1ATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNALPHAFRAGMENTOP2ATI, glAlphaFragmentOp2ATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNALPHAFRAGMENTOP3ATI, glAlphaFragmentOp3ATI, ATI_FRAGMENT_SHADER, NULL )\
- USE_GL_FUNC(PGLFNSETFRAGMENTSHADERCONSTANTATI, glSetFragmentShaderConstantATI, ATI_FRAGMENT_SHADER, NULL )\
- /* GL_APPLE_flush_buffer_range */ \
- USE_GL_FUNC(PGLFNBUFFERPARAMETERIAPPLE, glBufferParameteriAPPLE, APPLE_FLUSH_BUFFER_RANGE,NULL)\
- USE_GL_FUNC(PGLFNFLUSHMAPPEDBUFFERRANGEAPPLE, glFlushMappedBufferRangeAPPLE, APPLE_FLUSH_BUFFER_RANGE,NULL)
-
-
-/****************************************************
- * OpenGL WGL defines and functions pointer
- ****************************************************/
+/* GLX_SGI_video_sync */
+typedef int (WINE_GLAPI *PGLXFNGETVIDEOSYNCSGIPROC)(unsigned int *);
+typedef int (WINE_GLAPI *PGLXFNWAITVIDEOSYNCSGIPROC)(int, int, unsigned int *);
/* WGL_ARB_extensions_string */
-typedef const char * (WINAPI * WINED3D_PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc);
+typedef const char *(WINAPI *WINED3D_PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc);
+
/* WGL_ARB_multisample */
#ifndef WGL_ARB_multisample
-#define WGL_SAMPLE_BUFFERS_ARB 0x2041
-#define WGL_SAMPLES_ARB 0x2042
+#define WGL_ARB_multisample 1
+#define WGL_SAMPLE_BUFFERS_ARB 0x2041
+#define WGL_SAMPLES_ARB 0x2042
#endif
-/* WGL_ARB_pixel_format */
-#ifndef WGL_ARB_pixel_format
-#define WGL_ARB_pixel_format 1
-#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
-#define WGL_DRAW_TO_WINDOW_ARB 0x2001
-#define WGL_DRAW_TO_BITMAP_ARB 0x2002
-#define WGL_ACCELERATION_ARB 0x2003
-#define WGL_NEED_PALETTE_ARB 0x2004
-#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
-#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
-#define WGL_SWAP_METHOD_ARB 0x2007
-#define WGL_NUMBER_OVERLAYS_ARB 0x2008
-#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
-#define WGL_TRANSPARENT_ARB 0x200A
-#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
-#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
-#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
-#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A
-#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B
-#define WGL_SHARE_DEPTH_ARB 0x200C
-#define WGL_SHARE_STENCIL_ARB 0x200D
-#define WGL_SHARE_ACCUM_ARB 0x200E
-#define WGL_SUPPORT_GDI_ARB 0x200F
-#define WGL_SUPPORT_OPENGL_ARB 0x2010
-#define WGL_DOUBLE_BUFFER_ARB 0x2011
-#define WGL_STEREO_ARB 0x2012
-#define WGL_PIXEL_TYPE_ARB 0x2013
-#define WGL_COLOR_BITS_ARB 0x2014
-#define WGL_RED_BITS_ARB 0x2015
-#define WGL_RED_SHIFT_ARB 0x2016
-#define WGL_GREEN_BITS_ARB 0x2017
-#define WGL_GREEN_SHIFT_ARB 0x2018
-#define WGL_BLUE_BITS_ARB 0x2019
-#define WGL_BLUE_SHIFT_ARB 0x201A
-#define WGL_ALPHA_BITS_ARB 0x201B
-#define WGL_ALPHA_SHIFT_ARB 0x201C
-#define WGL_ACCUM_BITS_ARB 0x201D
-#define WGL_ACCUM_RED_BITS_ARB 0x201E
-#define WGL_ACCUM_GREEN_BITS_ARB 0x201F
-#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
-#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
-#define WGL_DEPTH_BITS_ARB 0x2022
-#define WGL_STENCIL_BITS_ARB 0x2023
-#define WGL_AUX_BUFFERS_ARB 0x2024
-#define WGL_NO_ACCELERATION_ARB 0x2025
-#define WGL_GENERIC_ACCELERATION_ARB 0x2026
-#define WGL_FULL_ACCELERATION_ARB 0x2027
-#define WGL_SWAP_EXCHANGE_ARB 0x2028
-#define WGL_SWAP_COPY_ARB 0x2029
-#define WGL_SWAP_UNDEFINED_ARB 0x202A
-#define WGL_TYPE_RGBA_ARB 0x202B
-#define WGL_TYPE_COLORINDEX_ARB 0x202C
-#endif
-typedef BOOL (WINAPI * WINED3D_PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
-typedef BOOL (WINAPI * WINED3D_PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
-typedef BOOL (WINAPI * WINED3D_PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
-/* WGL_ARB_make_current_read */
-typedef BOOL (WINAPI * WINED3D_PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc);
-typedef HDC (WINAPI * WINED3D_PFNWGLGETCURRENTREADDCARBPROC) (void);
+
/* WGL_ARB_pbuffer */
#ifndef WGL_ARB_pbuffer
#define WGL_ARB_pbuffer 1
-#define WGL_DRAW_TO_PBUFFER_ARB 0x202D
-#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E
-#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F
-#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
-#define WGL_PBUFFER_LARGEST_ARB 0x2033
-#define WGL_PBUFFER_WIDTH_ARB 0x2034
-#define WGL_PBUFFER_HEIGHT_ARB 0x2035
-#define WGL_PBUFFER_LOST_ARB 0x2036
+#define WGL_DRAW_TO_PBUFFER_ARB 0x202d
+#define WGL_MAX_PBUFFER_PIXELS_ARB 0x202e
+#define WGL_MAX_PBUFFER_WIDTH_ARB 0x202f
+#define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030
+#define WGL_PBUFFER_LARGEST_ARB 0x2033
+#define WGL_PBUFFER_WIDTH_ARB 0x2034
+#define WGL_PBUFFER_HEIGHT_ARB 0x2035
+#define WGL_PBUFFER_LOST_ARB 0x2036
#endif
DECLARE_HANDLE(HPBUFFERARB);
-typedef HPBUFFERARB (WINAPI * WINED3D_PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList);
-typedef HDC (WINAPI * WINED3D_PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer);
-typedef int (WINAPI * WINED3D_PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC);
-typedef BOOL (WINAPI * WINED3D_PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer);
-typedef BOOL (WINAPI * WINED3D_PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+typedef HPBUFFERARB (WINAPI *WINED3D_PFNWGLCREATEPBUFFERARBPROC)(HDC hDC, int iPixelFormat,
+ int iWidth, int iHeight, const int *piAttribList);
+typedef HDC (WINAPI *WINED3D_PFNWGLGETPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer);
+typedef int (WINAPI *WINED3D_PFNWGLRELEASEPBUFFERDCARBPROC)(HPBUFFERARB hPbuffer, HDC hDC);
+typedef BOOL (WINAPI *WINED3D_PFNWGLDESTROYPBUFFERARBPROC)(HPBUFFERARB hPbuffer);
+typedef BOOL (WINAPI *WINED3D_PFNWGLQUERYPBUFFERARBPROC)(HPBUFFERARB hPbuffer, int iAttribute, int *piValue);
+
+/* WGL_ARB_pixel_format */
+#ifndef WGL_ARB_pixel_format
+#define WGL_ARB_pixel_format 1
+#define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000
+#define WGL_DRAW_TO_WINDOW_ARB 0x2001
+#define WGL_DRAW_TO_BITMAP_ARB 0x2002
+#define WGL_ACCELERATION_ARB 0x2003
+#define WGL_NEED_PALETTE_ARB 0x2004
+#define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005
+#define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006
+#define WGL_SWAP_METHOD_ARB 0x2007
+#define WGL_NUMBER_OVERLAYS_ARB 0x2008
+#define WGL_NUMBER_UNDERLAYS_ARB 0x2009
+#define WGL_TRANSPARENT_ARB 0x200a
+#define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037
+#define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038
+#define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039
+#define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203a
+#define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203b
+#define WGL_SHARE_DEPTH_ARB 0x200c
+#define WGL_SHARE_STENCIL_ARB 0x200d
+#define WGL_SHARE_ACCUM_ARB 0x200e
+#define WGL_SUPPORT_GDI_ARB 0x200f
+#define WGL_SUPPORT_OPENGL_ARB 0x2010
+#define WGL_DOUBLE_BUFFER_ARB 0x2011
+#define WGL_STEREO_ARB 0x2012
+#define WGL_PIXEL_TYPE_ARB 0x2013
+#define WGL_COLOR_BITS_ARB 0x2014
+#define WGL_RED_BITS_ARB 0x2015
+#define WGL_RED_SHIFT_ARB 0x2016
+#define WGL_GREEN_BITS_ARB 0x2017
+#define WGL_GREEN_SHIFT_ARB 0x2018
+#define WGL_BLUE_BITS_ARB 0x2019
+#define WGL_BLUE_SHIFT_ARB 0x201a
+#define WGL_ALPHA_BITS_ARB 0x201b
+#define WGL_ALPHA_SHIFT_ARB 0x201c
+#define WGL_ACCUM_BITS_ARB 0x201d
+#define WGL_ACCUM_RED_BITS_ARB 0x201e
+#define WGL_ACCUM_GREEN_BITS_ARB 0x201f
+#define WGL_ACCUM_BLUE_BITS_ARB 0x2020
+#define WGL_ACCUM_ALPHA_BITS_ARB 0x2021
+#define WGL_DEPTH_BITS_ARB 0x2022
+#define WGL_STENCIL_BITS_ARB 0x2023
+#define WGL_AUX_BUFFERS_ARB 0x2024
+#define WGL_NO_ACCELERATION_ARB 0x2025
+#define WGL_GENERIC_ACCELERATION_ARB 0x2026
+#define WGL_FULL_ACCELERATION_ARB 0x2027
+#define WGL_SWAP_EXCHANGE_ARB 0x2028
+#define WGL_SWAP_COPY_ARB 0x2029
+#define WGL_SWAP_UNDEFINED_ARB 0x202a
+#define WGL_TYPE_RGBA_ARB 0x202b
+#define WGL_TYPE_COLORINDEX_ARB 0x202c
+#endif
+typedef BOOL (WINAPI *WINED3D_PFNWGLGETPIXELFORMATATTRIBIVARBPROC)(HDC hdc, int iPixelFormat,
+ int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues);
+typedef BOOL (WINAPI *WINED3D_PFNWGLGETPIXELFORMATATTRIBFVARBPROC)(HDC hdc, int iPixelFormat,
+ int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues);
+typedef BOOL (WINAPI *WINED3D_PFNWGLCHOOSEPIXELFORMATARBPROC)(HDC hdc, const int *piAttribIList,
+ const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats);
+
+/* WGL_ARB_pixel_format_float */
#ifndef WGL_ARB_pixel_format_float
#define WGL_ARB_pixel_format_float 1
-#define WGL_TYPE_RGBA_FLOAT_ARB 0x21A0
+#define WGL_TYPE_RGBA_FLOAT_ARB 0x21a0
#endif
+
/* WGL_WINE_pixel_format_passthrough */
-typedef BOOL (WINAPI * WINED3D_PFNWGLSETPIXELFORMATWINE) (HDC hdc, int iPixelFormat, const PIXELFORMATDESCRIPTOR* ppfd);
+typedef BOOL (WINAPI *WINED3D_PFNWGLSETPIXELFORMATWINE)(HDC hdc, int iPixelFormat,
+ const PIXELFORMATDESCRIPTOR *ppfd);
+
+#define GL_EXT_FUNCS_GEN \
+ /* GL_APPLE_fence */ \
+ USE_GL_FUNC(PGLFNGENFENCESAPPLEPROC, \
+ glGenFencesAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNDELETEFENCESAPPLEPROC, \
+ glDeleteFencesAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNSETFENCEAPPLEPROC, \
+ glSetFenceAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNTESTFENCEAPPLEPROC, \
+ glTestFenceAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNFINISHFENCEAPPLEPROC, \
+ glFinishFenceAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNISFENCEAPPLEPROC, \
+ glIsFenceAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNTESTOBJECTAPPLEPROC, \
+ glTestObjectAPPLE, APPLE_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNFINISHOBJECTAPPLEPROC, \
+ glFinishObjectAPPLE, APPLE_FENCE, NULL) \
+ /* GL_APPLE_flush_buffer_range */ \
+ USE_GL_FUNC(PGLFNBUFFERPARAMETERIAPPLE, \
+ glBufferParameteriAPPLE, APPLE_FLUSH_BUFFER_RANGE, NULL) \
+ USE_GL_FUNC(PGLFNFLUSHMAPPEDBUFFERRANGEAPPLE, \
+ glFlushMappedBufferRangeAPPLE, APPLE_FLUSH_BUFFER_RANGE, NULL) \
+ /* GL_APPLE_flush_render */ \
+ USE_GL_FUNC(PGLFNFLUSHRENDERAPPLEPROC, \
+ glFlushRenderAPPLE, APPLE_FLUSH_RENDER, NULL) \
+ USE_GL_FUNC(PGLFNFINISHRENDERAPPLEPROC, \
+ glFinishRenderAPPLE, APPLE_FLUSH_RENDER, NULL) \
+ /* GL_ARB_color_buffer_float */ \
+ USE_GL_FUNC(PGLFNCLAMPCOLORARBPROC, \
+ glClampColorARB, ARB_COLOR_BUFFER_FLOAT, NULL) \
+ /* GL_ARB_draw_buffers */ \
+ USE_GL_FUNC(PGLFNDRAWBUFFERSARBPROC, \
+ glDrawBuffersARB, ARB_DRAW_BUFFERS, NULL) \
+ /* GL_ARB_framebuffer_object */ \
+ USE_GL_FUNC(PGLFNGLISRENDERBUFFERPROC, \
+ glIsRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBINDRENDERBUFFERPROC, \
+ glBindRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLDELETERENDERBUFFERSPROC, \
+ glDeleteRenderbuffers, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENRENDERBUFFERSPROC, \
+ glGenRenderbuffers, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLRENDERBUFFERSTORAGEPROC, \
+ glRenderbufferStorage, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC, \
+ glRenderbufferStorageMultisample, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGETRENDERBUFFERPARAMETERIVPROC, \
+ glGetRenderbufferParameteriv, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLISFRAMEBUFFERPROC, \
+ glIsFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBINDFRAMEBUFFERPROC, \
+ glBindFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLDELETEFRAMEBUFFERSPROC, \
+ glDeleteFramebuffers, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENFRAMEBUFFERSPROC, \
+ glGenFramebuffers, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLCHECKFRAMEBUFFERSTATUSPROC, \
+ glCheckFramebufferStatus, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE1DPROC, \
+ glFramebufferTexture1D, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE2DPROC, \
+ glFramebufferTexture2D, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE3DPROC, \
+ glFramebufferTexture3D, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURELAYERPROC, \
+ glFramebufferTextureLayer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERRENDERBUFFERPROC, \
+ glFramebufferRenderbuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC, \
+ glGetFramebufferAttachmentParameteriv, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBLITFRAMEBUFFERPROC, \
+ glBlitFramebuffer, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENERATEMIPMAPPROC, \
+ glGenerateMipmap, ARB_FRAMEBUFFER_OBJECT, NULL) \
+ /* GL_ARB_geometry_shader4 */ \
+ USE_GL_FUNC(PGLFNPROGRAMPARAMETERIARBPROC, \
+ glProgramParameteriARB, ARB_GEOMETRY_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTUREARBPROC, \
+ glFramebufferTextureARB, ARB_GEOMETRY_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTURELAYERARBPROC, \
+ glFramebufferTextureLayerARB, ARB_GEOMETRY_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNFRAMEBUFFERTEXTUREFACEARBPROC, \
+ glFramebufferTextureFaceARB, ARB_GEOMETRY_SHADER4, NULL) \
+ /* GL_ARB_imaging, GL_EXT_blend_minmax */ \
+ USE_GL_FUNC(PGLFNBLENDCOLORPROC, \
+ glBlendColorEXT, EXT_BLEND_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNBLENDEQUATIONPROC, \
+ glBlendEquationEXT, EXT_BLEND_MINMAX, NULL) \
+ /* GL_ARB_map_buffer_range */ \
+ USE_GL_FUNC(PGLFNMAPBUFFERRANGEPROC, \
+ glMapBufferRange, ARB_MAP_BUFFER_RANGE, NULL) \
+ USE_GL_FUNC(PGLFNFLUSHMAPPEDBUFFERRANGEPROC, \
+ glFlushMappedBufferRange, ARB_MAP_BUFFER_RANGE, NULL) \
+ /* GL_ARB_multisample */ \
+ USE_GL_FUNC(WINED3D_PFNGLSAMPLECOVERAGEARBPROC, \
+ glSampleCoverageARB, ARB_MULTISAMPLE, NULL) \
+ /* GL_ARB_multitexture */ \
+ USE_GL_FUNC(WINED3D_PFNGLACTIVETEXTUREARBPROC, \
+ glActiveTextureARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCLIENTACTIVETEXTUREARBPROC, \
+ glClientActiveTextureARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD1FARBPROC, \
+ glMultiTexCoord1fARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD1FVARBPROC, \
+ glMultiTexCoord1fvARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2FARBPROC, \
+ glMultiTexCoord2fARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2FVARBPROC, \
+ glMultiTexCoord2fvARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD3FARBPROC, \
+ glMultiTexCoord3fARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD3FVARBPROC, \
+ glMultiTexCoord3fvARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4FARBPROC, \
+ glMultiTexCoord4fARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4FVARBPROC, \
+ glMultiTexCoord4fvARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD2SVARBPROC, \
+ glMultiTexCoord2svARB, ARB_MULTITEXTURE, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLMULTITEXCOORD4SVARBPROC, \
+ glMultiTexCoord4svARB, ARB_MULTITEXTURE, NULL) \
+ /* GL_ARB_occlusion_query */ \
+ USE_GL_FUNC(PGLFNGENQUERIESARBPROC, \
+ glGenQueriesARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNDELETEQUERIESARBPROC, \
+ glDeleteQueriesARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNBEGINQUERYARBPROC, \
+ glBeginQueryARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNENDQUERYARBPROC, \
+ glEndQueryARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNGETQUERYOBJECTIVARBPROC, \
+ glGetQueryObjectivARB, ARB_OCCLUSION_QUERY, NULL) \
+ USE_GL_FUNC(PGLFNGETQUERYOBJECTUIVARBPROC, \
+ glGetQueryObjectuivARB, ARB_OCCLUSION_QUERY, NULL) \
+ /* GL_ARB_point_parameters */ \
+ USE_GL_FUNC(PGLFNGLPOINTPARAMETERFARBPROC, \
+ glPointParameterfARB, ARB_POINT_PARAMETERS, NULL) \
+ USE_GL_FUNC(PGLFNGLPOINTPARAMETERFVARBPROC, \
+ glPointParameterfvARB, ARB_POINT_PARAMETERS, NULL) \
+ /* GL_ARB_provoking_vertex */ \
+ USE_GL_FUNC(PGLFNGLPROVOKINGVERTEXPROC, \
+ glProvokingVertex, ARB_PROVOKING_VERTEX, NULL) \
+ /* GL_ARB_shader_objects */ \
+ USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERIVARBPROC, \
+ glGetObjectParameterivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETOBJECTPARAMETERFVARBPROC, \
+ glGetObjectParameterfvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMLOCATIONARBPROC, \
+ glGetUniformLocationARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETACTIVEUNIFORMARBPROC, \
+ glGetActiveUniformARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IARBPROC, \
+ glUniform1iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IARBPROC, \
+ glUniform2iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IARBPROC, \
+ glUniform3iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IARBPROC, \
+ glUniform4iARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IARBPROC, \
+ glUniform1fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FARBPROC, \
+ glUniform2fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FARBPROC, \
+ glUniform3fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FARBPROC, \
+ glUniform4fARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1FVARBPROC, \
+ glUniform1fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2FVARBPROC, \
+ glUniform2fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3FVARBPROC, \
+ glUniform3fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4FVARBPROC, \
+ glUniform4fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM1IVARBPROC, \
+ glUniform1ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM2IVARBPROC, \
+ glUniform2ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM3IVARBPROC, \
+ glUniform3ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORM4IVARBPROC, \
+ glUniform4ivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX2FVARBPROC, \
+ glUniformMatrix2fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX3FVARBPROC, \
+ glUniformMatrix3fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUNIFORMMATRIX4FVARBPROC, \
+ glUniformMatrix4fvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMFVARBPROC, \
+ glGetUniformfvARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETUNIFORMIVARBPROC, \
+ glGetUniformivARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETINFOLOGARBPROC, \
+ glGetInfoLogARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLUSEPROGRAMOBJECTARBPROC, \
+ glUseProgramObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCREATESHADEROBJECTARBPROC, \
+ glCreateShaderObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLSHADERSOURCEARBPROC, \
+ glShaderSourceARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCOMPILESHADERARBPROC, \
+ glCompileShaderARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLCREATEPROGRAMOBJECTARBPROC, \
+ glCreateProgramObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLATTACHOBJECTARBPROC, \
+ glAttachObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLLINKPROGRAMARBPROC, \
+ glLinkProgramARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLDETACHOBJECTARBPROC, \
+ glDetachObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLDELETEOBJECTARBPROC, \
+ glDeleteObjectARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLVALIDATEPROGRAMARBPROC, \
+ glValidateProgramARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETATTACHEDOBJECTSARBPROC, \
+ glGetAttachedObjectsARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETHANDLEARBPROC, \
+ glGetHandleARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETSHADERSOURCEARBPROC, \
+ glGetShaderSourceARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLBINDATTRIBLOCATIONARBPROC, \
+ glBindAttribLocationARB, ARB_SHADER_OBJECTS, NULL) \
+ USE_GL_FUNC(WINED3D_PFNGLGETATTRIBLOCATIONARBPROC, \
+ glGetAttribLocationARB, ARB_SHADER_OBJECTS, NULL) \
+ /* GL_ARB_sync */ \
+ USE_GL_FUNC(PGLFNFENCESYNCPROC, \
+ glFenceSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNISSYNCPROC, \
+ glIsSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNDELETESYNCPROC, \
+ glDeleteSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNCLIENTWAITSYNCPROC, \
+ glClientWaitSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNWAITSYNCPROC, \
+ glWaitSync, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNGETINTEGER64VPROC, \
+ glGetInteger64v, ARB_SYNC, NULL) \
+ USE_GL_FUNC(PGLFNGETSYNCIVPROC, \
+ glGetSynciv, ARB_SYNC, NULL) \
+ /* GL_ARB_texture_compression */ \
+ USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE2DPROC, \
+ glCompressedTexImage2DARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ USE_GL_FUNC(PGLFNCOMPRESSEDTEXIMAGE3DPROC, \
+ glCompressedTexImage3DARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE2DPROC, \
+ glCompressedTexSubImage2DARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ USE_GL_FUNC(PGLFNCOMPRESSEDTEXSUBIMAGE3DPROC, \
+ glCompressedTexSubImage3DARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ USE_GL_FUNC(PGLFNGETCOMPRESSEDTEXIMAGEPROC, \
+ glGetCompressedTexImageARB, ARB_TEXTURE_COMPRESSION, NULL) \
+ /* GL_ARB_vertex_blend */ \
+ USE_GL_FUNC(PGLFNGLWEIGHTPOINTERARB, \
+ glWeightPointerARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTBV, \
+ glWeightbvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTSV, \
+ glWeightsvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTIV, \
+ glWeightivARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTFV, \
+ glWeightfvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTDV, \
+ glWeightdvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTUBV, \
+ glWeightubvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTUSV, \
+ glWeightusvARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLWEIGHTUIV, \
+ glWeightuivARB, ARB_VERTEX_BLEND, NULL) \
+ USE_GL_FUNC(PGLFNGLVERTEXBLENDARB, \
+ glVertexBlendARB, ARB_VERTEX_BLEND, NULL) \
+ /* GL_ARB_vertex_buffer_object */ \
+ USE_GL_FUNC(PGLFNBINDBUFFERARBPROC, \
+ glBindBufferARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNDELETEBUFFERSARBPROC, \
+ glDeleteBuffersARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGENBUFFERSARBPROC, \
+ glGenBuffersARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNISBUFFERARBPROC, \
+ glIsBufferARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNBUFFERDATAARBPROC, \
+ glBufferDataARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNBUFFERSUBDATAARBPROC, \
+ glBufferSubDataARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGETBUFFERSUBDATAARBPROC, \
+ glGetBufferSubDataARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNMAPBUFFERARBPROC, \
+ glMapBufferARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNUNMAPBUFFERARBPROC, \
+ glUnmapBufferARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGETBUFFERPARAMETERIVARBPROC, \
+ glGetBufferParameterivARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGETBUFFERPOINTERVARBPROC, \
+ glGetBufferPointervARB, ARB_VERTEX_BUFFER_OBJECT, NULL) \
+ /* GL_ARB_vertex_program */ \
+ USE_GL_FUNC(PGLFNGENPROGRAMSARBPROC, \
+ glGenProgramsARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNBINDPROGRAMARBPROC, \
+ glBindProgramARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNPROGRAMSTRINGARBPROC, \
+ glProgramStringARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNDELETEPROGRAMSARBPROC, \
+ glDeleteProgramsARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNPROGRAMENVPARAMETER4FVARBPROC, \
+ glProgramEnvParameter4fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNPROGRAMLOCALPARAMETER4FVARBPROC, \
+ glProgramLocalParameter4fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBPOINTERARBPROC, \
+ glVertexAttribPointerARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNENABLEVERTEXATTRIBARRAYARBPROC, \
+ glEnableVertexAttribArrayARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNDISABLEVERTEXATTRIBARRAYARBPROC, \
+ glDisableVertexAttribArrayARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1DARBPROC, \
+ glVertexAttrib1dARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1DVARBPROC, \
+ glVertexAttrib1dvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1FARBPROC, \
+ glVertexAttrib1fARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1FVARBPROC, \
+ glVertexAttrib1fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1SARBPROC, \
+ glVertexAttrib1sARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1SVARBPROC, \
+ glVertexAttrib1svARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2DARBPROC, \
+ glVertexAttrib2dARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2DVARBPROC, \
+ glVertexAttrib2dvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2FARBPROC, \
+ glVertexAttrib2fARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2FVARBPROC, \
+ glVertexAttrib2fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2SARBPROC, \
+ glVertexAttrib2sARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2SVARBPROC, \
+ glVertexAttrib2svARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3DARBPROC, \
+ glVertexAttrib3dARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3DVARBPROC, \
+ glVertexAttrib3dvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3FARBPROC, \
+ glVertexAttrib3fARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3FVARBPROC, \
+ glVertexAttrib3fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3SARBPROC, \
+ glVertexAttrib3sARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3SVARBPROC, \
+ glVertexAttrib3svARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NBVARBPROC, \
+ glVertexAttrib4NbvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NIVARBPROC, \
+ glVertexAttrib4NivARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NSVARBPROC, \
+ glVertexAttrib4NsvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NUBARBPROC, \
+ glVertexAttrib4NubARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NUBVARBPROC, \
+ glVertexAttrib4NubvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NUIVARBPROC, \
+ glVertexAttrib4NuivARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4NUSVARBPROC, \
+ glVertexAttrib4NusvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4BVARBPROC, \
+ glVertexAttrib4bvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4DARBPROC, \
+ glVertexAttrib4dARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4DVARBPROC, \
+ glVertexAttrib4dvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4FARBPROC, \
+ glVertexAttrib4fARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4FVARBPROC, \
+ glVertexAttrib4fvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4IVARBPROC, \
+ glVertexAttrib4ivARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4SARBPROC, \
+ glVertexAttrib4sARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4SVARBPROC, \
+ glVertexAttrib4svARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4UBVARBPROC, \
+ glVertexAttrib4ubvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4UIVARBPROC, \
+ glVertexAttrib4uivARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4USVARBPROC, \
+ glVertexAttrib4usvARB, ARB_VERTEX_PROGRAM, NULL) \
+ USE_GL_FUNC(PGLFNGETPROGRAMIVARBPROC, \
+ glGetProgramivARB, ARB_VERTEX_PROGRAM, NULL) \
+ /* GL_ATI_fragment_shader */ \
+ USE_GL_FUNC(PGLFNGENFRAGMENTSHADERSATI, \
+ glGenFragmentShadersATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNBINDFRAGMENTSHADERATI, \
+ glBindFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNDELETEFRAGMENTSHADERATI, \
+ glDeleteFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNBEGINFRAGMENTSHADERATI, \
+ glBeginFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNENDFRAGMENTSHADERATI, \
+ glEndFragmentShaderATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNPASSTEXCOORDATI, \
+ glPassTexCoordATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNSAMPLEMAPATI, \
+ glSampleMapATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNCOLORFRAGMENTOP1ATI, \
+ glColorFragmentOp1ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNCOLORFRAGMENTOP2ATI, \
+ glColorFragmentOp2ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNCOLORFRAGMENTOP3ATI, \
+ glColorFragmentOp3ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNALPHAFRAGMENTOP1ATI, \
+ glAlphaFragmentOp1ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNALPHAFRAGMENTOP2ATI, \
+ glAlphaFragmentOp2ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNALPHAFRAGMENTOP3ATI, \
+ glAlphaFragmentOp3ATI, ATI_FRAGMENT_SHADER, NULL) \
+ USE_GL_FUNC(PGLFNSETFRAGMENTSHADERCONSTANTATI, \
+ glSetFragmentShaderConstantATI, ATI_FRAGMENT_SHADER, NULL) \
+ /* GL_ATI_separate_stencil */ \
+ USE_GL_FUNC(PGLFNSTENCILOPSEPARATEATIPROC, \
+ glStencilOpSeparateATI, ATI_SEPARATE_STENCIL, NULL) \
+ USE_GL_FUNC(PGLFNSTENCILFUNCSEPARATEATIPROC, \
+ glStencilFuncSeparateATI, ATI_SEPARATE_STENCIL, NULL) \
+ /* GL_EXT_blend_equation_separate */ \
+ USE_GL_FUNC(PGLFNBLENDFUNCSEPARATEEXTPROC, \
+ glBlendFuncSeparateEXT, EXT_BLEND_FUNC_SEPARATE, NULL) \
+ /* GL_EXT_blend_func_separate */ \
+ USE_GL_FUNC(PGLFNBLENDEQUATIONSEPARATEEXTPROC, \
+ glBlendEquationSeparateEXT, EXT_BLEND_EQUATION_SEPARATE, NULL) \
+ /* GL_EXT_fog_coord */ \
+ USE_GL_FUNC(PGLFNGLFOGCOORDFEXTPROC, \
+ glFogCoordfEXT, EXT_FOG_COORD, NULL) \
+ USE_GL_FUNC(PGLFNGLFOGCOORDFVEXTPROC, \
+ glFogCoordfvEXT, EXT_FOG_COORD, NULL) \
+ USE_GL_FUNC(PGLFNGLFOGCOORDDEXTPROC, \
+ glFogCoorddEXT, EXT_FOG_COORD, NULL) \
+ USE_GL_FUNC(PGLFNGLFOGCOORDDVEXTPROC, \
+ glFogCoorddvEXT, EXT_FOG_COORD, NULL) \
+ USE_GL_FUNC(PGLFNGLFOGCOORDPOINTEREXTPROC, \
+ glFogCoordPointerEXT, EXT_FOG_COORD, NULL) \
+ /* GL_EXT_framebuffer_blit */ \
+ USE_GL_FUNC(PGLFNGLBLITFRAMEBUFFEREXTPROC, \
+ glBlitFramebufferEXT, EXT_FRAMEBUFFER_BLIT, NULL) \
+ /* GL_EXT_framebuffer_multisample */ \
+ USE_GL_FUNC(PGLFNRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC, \
+ glRenderbufferStorageMultisampleEXT, EXT_FRAMEBUFFER_MULTISAMPLE, NULL) \
+ /* GL_EXT_framebuffer_object */ \
+ USE_GL_FUNC(PGLFNGLISRENDERBUFFEREXTPROC, \
+ glIsRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBINDRENDERBUFFEREXTPROC, \
+ glBindRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLDELETERENDERBUFFERSEXTPROC, \
+ glDeleteRenderbuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENRENDERBUFFERSEXTPROC, \
+ glGenRenderbuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLRENDERBUFFERSTORAGEEXTPROC, \
+ glRenderbufferStorageEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLISFRAMEBUFFEREXTPROC, \
+ glIsFramebufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLBINDFRAMEBUFFEREXTPROC, \
+ glBindFramebufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLDELETEFRAMEBUFFERSEXTPROC, \
+ glDeleteFramebuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENFRAMEBUFFERSEXTPROC, \
+ glGenFramebuffersEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, \
+ glCheckFramebufferStatusEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE1DEXTPROC, \
+ glFramebufferTexture1DEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE2DEXTPROC, \
+ glFramebufferTexture2DEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERTEXTURE3DEXTPROC, \
+ glFramebufferTexture3DEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, \
+ glFramebufferRenderbufferEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGENERATEMIPMAPEXTPROC, \
+ glGenerateMipmapEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGETRENDERBUFFERPARAMETERIVEXTPROC, \
+ glGetRenderbufferParameterivEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ USE_GL_FUNC(PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC, \
+ glGetFramebufferAttachmentParameterivEXT, EXT_FRAMEBUFFER_OBJECT, NULL) \
+ /* GL_EXT_gpu_program_parameters */ \
+ USE_GL_FUNC(PGLFNPROGRAMENVPARAMETERS4FVEXTPROC, \
+ glProgramEnvParameters4fvEXT, EXT_GPU_PROGRAM_PARAMETERS, NULL) \
+ USE_GL_FUNC(PGLFNPROGRAMLOCALPARAMETERS4FVEXTPROC, \
+ glProgramLocalParameters4fvEXT, EXT_GPU_PROGRAM_PARAMETERS, NULL) \
+ /* GL_EXT_gpu_shader4 */\
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI1IEXTPROC, \
+ glVertexAttribI1iEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI2IEXTPROC, \
+ glVertexAttribI2iEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI3IEXTPROC, \
+ glVertexAttribI3iEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4IEXTPROC, \
+ glVertexAttribI4iEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI1UIEXTPROC, \
+ glVertexAttribI1uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI2UIEXTPROC, \
+ glVertexAttribI2uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI3UIEXTPROC, \
+ glVertexAttribI3uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4UIEXTPROC, \
+ glVertexAttribI4uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI1IVEXTPROC, \
+ glVertexAttribI1ivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI2IVEXTPROC, \
+ glVertexAttribI2ivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI3IVEXTPROC, \
+ glVertexAttribI3ivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4IVEXTPROC, \
+ glVertexAttribI4ivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI1UIVEXTPROC, \
+ glVertexAttribI1uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI2UIVEXTPROC, \
+ glVertexAttribI2uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI3UIVEXTPROC, \
+ glVertexAttribI3uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4UIVEXTPROC, \
+ glVertexAttribI4uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4BVEXTPROC, \
+ glVertexAttribI4bvEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4SVEXTPROC, \
+ glVertexAttribI4svEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4UBVEXTPROC, \
+ glVertexAttribI4ubvEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBI4USVEXTPROC, \
+ glVertexAttribI4usvEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBIPOINTEREXTPROC, \
+ glVertexAttribIPointerEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNGETVERTEXATTRIBIIVEXTPROC, \
+ glVertexAttribIivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNGETVERTEXATTRIBIUIVEXTPROC, \
+ glVertexAttribIuivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM1UIEXTPROC, \
+ glUniform1uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM2UIEXTPROC, \
+ glUniform2uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM3UIEXTPROC, \
+ glUniform3uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM4UIEXTPROC, \
+ glUniform4uiEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM1UIVEXTPROC, \
+ glUniform1uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM2UIVEXTPROC, \
+ glUniform2uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM3UIVEXTPROC, \
+ glUniform3uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNUNIFORM4UIVEXTPROC, \
+ glUniform4uivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNGETUNIFORMUIVEXTPROC, \
+ glGetUniformuivEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNBINDFRAGDATALOCATIONEXTPROC, \
+ glBindFragDataLocationEXT, EXT_GPU_SHADER4, NULL) \
+ USE_GL_FUNC(PGLFNGETFRAGDATALOCATIONEXTPROC, \
+ glGetFragDataLocationEXT, EXT_GPU_SHADER4, NULL) \
+ /* GL_EXT_paletted_texture */ \
+ USE_GL_FUNC(PGLFNGLCOLORTABLEEXTPROC, \
+ glColorTableEXT, EXT_PALETTED_TEXTURE, NULL) \
+ /* GL_EXT_point_parameters */ \
+ USE_GL_FUNC(PGLFNGLPOINTPARAMETERFEXTPROC, \
+ glPointParameterfEXT, EXT_POINT_PARAMETERS, NULL) \
+ USE_GL_FUNC(PGLFNGLPOINTPARAMETERFVEXTPROC, \
+ glPointParameterfvEXT, EXT_POINT_PARAMETERS, NULL) \
+ /* GL_EXT_provoking_vertex */ \
+ USE_GL_FUNC(PGLFNGLPROVOKINGVERTEXEXTPROC, \
+ glProvokingVertexEXT, EXT_PROVOKING_VERTEX, NULL) \
+ /* GL_EXT_secondary_color */ \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3UBEXTPROC, \
+ glSecondaryColor3ubEXT, EXT_SECONDARY_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3UBVEXTPROC, \
+ glSecondaryColor3ubvEXT, EXT_SECONDARY_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FEXTPROC, \
+ glSecondaryColor3fEXT, EXT_SECONDARY_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLOR3FVEXTPROC, \
+ glSecondaryColor3fvEXT, EXT_SECONDARY_COLOR, NULL) \
+ USE_GL_FUNC(PGLFNGLSECONDARYCOLORPOINTEREXTPROC, \
+ glSecondaryColorPointerEXT, EXT_SECONDARY_COLOR, NULL) \
+ /* GL_EXT_stencil_two_side */ \
+ USE_GL_FUNC(PGLFNACTIVESTENCILFACEEXTPROC, \
+ glActiveStencilFaceEXT, EXT_STENCIL_TWO_SIDE, NULL) \
+ /* GL_EXT_texture3D */ \
+ USE_GL_FUNC(PGLFNGLTEXIMAGE3DEXTPROC, \
+ glTexImage3DEXT, EXT_TEXTURE3D, glTexImage3D) \
+ USE_GL_FUNC(PGLFNGLTEXSUBIMAGE3DEXTPROC, \
+ glTexSubImage3DEXT, EXT_TEXTURE3D, glTexSubImage3D) \
+ /* GL_NV_fence */ \
+ USE_GL_FUNC(PGLFNGENFENCESNVPROC, \
+ glGenFencesNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNDELETEFENCESNVPROC, \
+ glDeleteFencesNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNSETFENCENVPROC, \
+ glSetFenceNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNTESTFENCENVPROC, \
+ glTestFenceNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNFINISHFENCENVPROC, \
+ glFinishFenceNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNISFENCENVPROC, \
+ glIsFenceNV, NV_FENCE, NULL) \
+ USE_GL_FUNC(PGLFNGETFENCEIVNVPROC, \
+ glGetFenceivNV, NV_FENCE, NULL) \
+ /* GL_NV_half_float */ \
+ USE_GL_FUNC(PGLFNVERTEX2HNVPROC, \
+ glVertex2hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX2HVNVPROC, \
+ glVertex2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX3HNVPROC, \
+ glVertex3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX3HVNVPROC, \
+ glVertex3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX4HNVPROC, \
+ glVertex4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEX4HVNVPROC, \
+ glVertex4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNNORMAL3HNVPROC, \
+ glNormal3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNNORMAL3HVNVPROC, \
+ glNormal3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNCOLOR3HNVPROC, \
+ glColor3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNCOLOR3HVNVPROC, \
+ glColor3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNCOLOR4HNVPROC, \
+ glColor4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNCOLOR4HVNVPROC, \
+ glColor4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD1HNVPROC, \
+ glTexCoord1hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD1HVNVPROC, \
+ glTexCoord1hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD2HNVPROC, \
+ glTexCoord2hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD2HVNVPROC, \
+ glTexCoord2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD3HNVPROC, \
+ glTexCoord3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD3HVNVPROC, \
+ glTexCoord3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD4HNVPROC, \
+ glTexCoord4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNTEXCOORD4HVNVPROC, \
+ glTexCoord4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD1HNVPROC, \
+ glMultiTexCoord1hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD1HVNVPROC, \
+ glMultiTexCoord1hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD2HNVPROC, \
+ glMultiTexCoord2hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD2HVNVPROC, \
+ glMultiTexCoord2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD3HNVPROC, \
+ glMultiTexCoord3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD3HVNVPROC, \
+ glMultiTexCoord3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD4HNVPROC, \
+ glMultiTexCoord4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNMULTITEXCOORD4HVNVPROC, \
+ glMultiTexCoord4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNFOGCOORDHNVPROC, \
+ glFogCoordhNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNFOGCOORDHVNVPROC, \
+ glFogCoordhvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNSECONDARYCOLOR3HNVPROC, \
+ glSecondaryColor3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNSECONDARYCOLOR3HVNVPROC, \
+ glSecondaryColor3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXWEIGHTHNVPROC, \
+ glVertexWeighthNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXWEIGHTHVNVPROC, \
+ glVertexWeighthvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1HNVPROC, \
+ glVertexAttrib1hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB1HVNVPROC, \
+ glVertexAttrib1hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2HNVPROC, \
+ glVertexAttrib2hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB2HVNVPROC, \
+ glVertexAttrib2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3HNVPROC, \
+ glVertexAttrib3hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB3HVNVPROC, \
+ glVertexAttrib3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4HNVPROC, \
+ glVertexAttrib4hNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIB4HVNVPROC, \
+ glVertexAttrib4hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBS1HVNVPROC, \
+ glVertexAttribs1hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBS2HVNVPROC, \
+ glVertexAttribs2hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBS3HVNVPROC, \
+ glVertexAttribs3hvNV, NV_HALF_FLOAT, NULL) \
+ USE_GL_FUNC(PGLFNVERTEXATTRIBS4HVNVPROC, \
+ glVertexAttribs4hvNV, NV_HALF_FLOAT, NULL) \
+ /* GL_NV_register_combiners */ \
+ USE_GL_FUNC(PGLFNCOMBINERINPUTNVPROC, \
+ glCombinerInputNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINEROUTPUTNVPROC, \
+ glCombinerOutputNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINERPARAMETERFNVPROC, \
+ glCombinerParameterfNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINERPARAMETERFVNVPROC, \
+ glCombinerParameterfvNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINERPARAMETERINVPROC, \
+ glCombinerParameteriNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNCOMBINERPARAMETERIVNVPROC, \
+ glCombinerParameterivNV, NV_REGISTER_COMBINERS, NULL) \
+ USE_GL_FUNC(PGLFNFINALCOMBINERINPUTNVPROC, \
+ glFinalCombinerInputNV, NV_REGISTER_COMBINERS, NULL) \
+ /* GLX_SGI_video_sync */ \
+ USE_GL_FUNC(PGLXFNGETVIDEOSYNCSGIPROC, \
+ glXGetVideoSyncSGI, SGI_VIDEO_SYNC, NULL) \
+ USE_GL_FUNC(PGLXFNWAITVIDEOSYNCSGIPROC, \
+ glXWaitVideoSyncSGI, SGI_VIDEO_SYNC, NULL)
#define WGL_EXT_FUNCS_GEN \
- USE_GL_FUNC(WINED3D_PFNWGLGETEXTENSIONSSTRINGARBPROC, wglGetExtensionsStringARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLGETPIXELFORMATATTRIBIVARBPROC, wglGetPixelFormatAttribivARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLGETPIXELFORMATATTRIBFVARBPROC, wglGetPixelFormatAttribfvARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLCHOOSEPIXELFORMATARBPROC, wglChoosePixelFormatARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLMAKECONTEXTCURRENTARBPROC, wglMakeContextCurrentARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLGETCURRENTREADDCARBPROC, wglGetCurrentReadDCARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLCREATEPBUFFERARBPROC, wglCreatePbufferARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLGETPBUFFERDCARBPROC, wglGetPbufferDCARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLRELEASEPBUFFERDCARBPROC, wglReleasePbufferDCARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLDESTROYPBUFFERARBPROC, wglDestroyPbufferARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLQUERYPBUFFERARBPROC, wglQueryPbufferARB, 0, NULL) \
- USE_GL_FUNC(WINED3D_PFNWGLSETPIXELFORMATWINE, wglSetPixelFormatWINE, 0, NULL)
-
-
-/****************************************************
- * Structures
- ****************************************************/
-
-struct wined3d_fbo_ops
-{
- PGLFNGLISRENDERBUFFERPROC glIsRenderbuffer;
- PGLFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
- PGLFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
- PGLFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
- PGLFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
- PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
- PGLFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
- PGLFNGLISFRAMEBUFFERPROC glIsFramebuffer;
- PGLFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
- PGLFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
- PGLFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
- PGLFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
- PGLFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
- PGLFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
- PGLFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
- PGLFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
- PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
- PGLFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
- PGLFNGLGENERATEMIPMAPPROC glGenerateMipmap;
-};
-
-struct wined3d_gl_limits
-{
- UINT buffers;
- UINT lights;
- UINT textures;
- UINT texture_stages;
- UINT fragment_samplers;
- UINT vertex_samplers;
- UINT combined_samplers;
- UINT sampler_stages;
- UINT clipplanes;
- UINT texture_size;
- UINT texture3d_size;
- float pointsize_max;
- float pointsize_min;
- UINT point_sprite_units;
- UINT blends;
- UINT anisotropy;
- float shininess;
-
- UINT glsl_varyings;
- UINT glsl_vs_float_constants;
- UINT glsl_ps_float_constants;
-
- UINT arb_vs_float_constants;
- UINT arb_vs_native_constants;
- UINT arb_vs_instructions;
- UINT arb_vs_temps;
- UINT arb_ps_float_constants;
- UINT arb_ps_local_constants;
- UINT arb_ps_native_constants;
- UINT arb_ps_instructions;
- UINT arb_ps_temps;
-};
-
-#define USE_GL_FUNC(type, pfn, ext, replace) type pfn;
-
-struct wined3d_gl_info
-{
- UINT vidmem;
- struct wined3d_gl_limits limits;
- DWORD reserved_glsl_constants;
- DWORD quirks;
- BOOL supported[WINED3D_GL_EXT_COUNT];
- GLint wrap_lookup[WINED3DTADDRESS_MIRRORONCE - WINED3DTADDRESS_WRAP + 1];
-
- struct wined3d_fbo_ops fbo_ops;
- /* GL function pointers */
- GL_EXT_FUNCS_GEN
- /* WGL function pointers */
- WGL_EXT_FUNCS_GEN
-
- struct GlPixelFormatDesc *gl_formats;
-};
-
-#undef USE_GL_FUNC
+ USE_GL_FUNC(WINED3D_PFNWGLGETEXTENSIONSSTRINGARBPROC, wglGetExtensionsStringARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLGETPIXELFORMATATTRIBIVARBPROC, wglGetPixelFormatAttribivARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLGETPIXELFORMATATTRIBFVARBPROC, wglGetPixelFormatAttribfvARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLCHOOSEPIXELFORMATARBPROC, wglChoosePixelFormatARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLCREATEPBUFFERARBPROC, wglCreatePbufferARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLGETPBUFFERDCARBPROC, wglGetPbufferDCARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLRELEASEPBUFFERDCARBPROC, wglReleasePbufferDCARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLDESTROYPBUFFERARBPROC, wglDestroyPbufferARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLQUERYPBUFFERARBPROC, wglQueryPbufferARB, 0, NULL) \
+ USE_GL_FUNC(WINED3D_PFNWGLSETPIXELFORMATWINE, wglSetPixelFormatWINE, 0, NULL)
#endif /* __WINE_WINED3D_GL */
diff --git a/reactos/dll/directx/wine/wined3d/wined3d_private.h b/reactos/dll/directx/wine/wined3d/wined3d_private.h
index de0bcdc2c54..1d5cd974645 100644
--- a/reactos/dll/directx/wine/wined3d/wined3d_private.h
+++ b/reactos/dll/directx/wine/wined3d/wined3d_private.h
@@ -61,15 +61,16 @@ enum fixup_channel_source
CHANNEL_SOURCE_Y = 3,
CHANNEL_SOURCE_Z = 4,
CHANNEL_SOURCE_W = 5,
- CHANNEL_SOURCE_YUV0 = 6,
- CHANNEL_SOURCE_YUV1 = 7,
+ CHANNEL_SOURCE_COMPLEX0 = 6,
+ CHANNEL_SOURCE_COMPLEX1 = 7,
};
-enum yuv_fixup
+enum complex_fixup
{
- YUV_FIXUP_YUY2 = 0,
- YUV_FIXUP_UYVY = 1,
- YUV_FIXUP_YV12 = 2,
+ COMPLEX_FIXUP_YUY2 = 0,
+ COMPLEX_FIXUP_UYVY = 1,
+ COMPLEX_FIXUP_YV12 = 2,
+ COMPLEX_FIXUP_P8 = 3,
};
#include
@@ -103,14 +104,14 @@ static inline struct color_fixup_desc create_color_fixup_desc(
return fixup;
}
-static inline struct color_fixup_desc create_yuv_fixup_desc(enum yuv_fixup yuv_fixup)
+static inline struct color_fixup_desc create_complex_fixup_desc(enum complex_fixup complex_fixup)
{
struct color_fixup_desc fixup =
{
- 0, yuv_fixup & (1 << 0) ? CHANNEL_SOURCE_YUV1 : CHANNEL_SOURCE_YUV0,
- 0, yuv_fixup & (1 << 1) ? CHANNEL_SOURCE_YUV1 : CHANNEL_SOURCE_YUV0,
- 0, yuv_fixup & (1 << 2) ? CHANNEL_SOURCE_YUV1 : CHANNEL_SOURCE_YUV0,
- 0, yuv_fixup & (1 << 3) ? CHANNEL_SOURCE_YUV1 : CHANNEL_SOURCE_YUV0,
+ 0, complex_fixup & (1 << 0) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+ 0, complex_fixup & (1 << 1) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+ 0, complex_fixup & (1 << 2) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
+ 0, complex_fixup & (1 << 3) ? CHANNEL_SOURCE_COMPLEX1 : CHANNEL_SOURCE_COMPLEX0,
};
return fixup;
}
@@ -120,19 +121,19 @@ static inline BOOL is_identity_fixup(struct color_fixup_desc fixup)
return !memcmp(&fixup, &COLOR_FIXUP_IDENTITY, sizeof(fixup));
}
-static inline BOOL is_yuv_fixup(struct color_fixup_desc fixup)
+static inline BOOL is_complex_fixup(struct color_fixup_desc fixup)
{
- return fixup.x_source == CHANNEL_SOURCE_YUV0 || fixup.x_source == CHANNEL_SOURCE_YUV1;
+ return fixup.x_source == CHANNEL_SOURCE_COMPLEX0 || fixup.x_source == CHANNEL_SOURCE_COMPLEX1;
}
-static inline enum yuv_fixup get_yuv_fixup(struct color_fixup_desc fixup)
+static inline enum complex_fixup get_complex_fixup(struct color_fixup_desc fixup)
{
- enum yuv_fixup yuv_fixup = 0;
- if (fixup.x_source == CHANNEL_SOURCE_YUV1) yuv_fixup |= (1 << 0);
- if (fixup.y_source == CHANNEL_SOURCE_YUV1) yuv_fixup |= (1 << 1);
- if (fixup.z_source == CHANNEL_SOURCE_YUV1) yuv_fixup |= (1 << 2);
- if (fixup.w_source == CHANNEL_SOURCE_YUV1) yuv_fixup |= (1 << 3);
- return yuv_fixup;
+ enum complex_fixup complex_fixup = 0;
+ if (fixup.x_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 0);
+ if (fixup.y_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 1);
+ if (fixup.z_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 2);
+ if (fixup.w_source == CHANNEL_SOURCE_COMPLEX1) complex_fixup |= (1 << 3);
+ return complex_fixup;
}
void *wined3d_rb_alloc(size_t size) DECLSPEC_HIDDEN;
@@ -410,6 +411,7 @@ enum WINED3D_SHADER_INSTRUCTION_HANDLER
WINED3DSIH_CMP,
WINED3DSIH_CND,
WINED3DSIH_CRS,
+ WINED3DSIH_CUT,
WINED3DSIH_DCL,
WINED3DSIH_DEF,
WINED3DSIH_DEFB,
@@ -421,20 +423,24 @@ enum WINED3D_SHADER_INSTRUCTION_HANDLER
WINED3DSIH_DSX,
WINED3DSIH_DSY,
WINED3DSIH_ELSE,
+ WINED3DSIH_EMIT,
WINED3DSIH_ENDIF,
WINED3DSIH_ENDLOOP,
WINED3DSIH_ENDREP,
WINED3DSIH_EXP,
WINED3DSIH_EXPP,
WINED3DSIH_FRC,
+ WINED3DSIH_IADD,
WINED3DSIH_IF,
WINED3DSIH_IFC,
+ WINED3DSIH_IGE,
WINED3DSIH_LABEL,
WINED3DSIH_LIT,
WINED3DSIH_LOG,
WINED3DSIH_LOGP,
WINED3DSIH_LOOP,
WINED3DSIH_LRP,
+ WINED3DSIH_LT,
WINED3DSIH_M3x2,
WINED3DSIH_M3x3,
WINED3DSIH_M3x4,
@@ -544,6 +550,7 @@ typedef struct shader_reg_maps
struct wined3d_shader_context
{
IWineD3DBaseShader *shader;
+ const struct wined3d_gl_info *gl_info;
const struct shader_reg_maps *reg_maps;
struct wined3d_shader_buffer *buffer;
void *backend_data;
@@ -619,7 +626,7 @@ struct wined3d_shader_frontend
void (*shader_read_dst_param)(void *data, const DWORD **ptr, struct wined3d_shader_dst_param *dst_param,
struct wined3d_shader_src_param *dst_rel_addr);
void (*shader_read_semantic)(const DWORD **ptr, struct wined3d_shader_semantic *semantic);
- void (*shader_read_comment)(const DWORD **ptr, const char **comment);
+ void (*shader_read_comment)(const DWORD **ptr, const char **comment, UINT *comment_size);
BOOL (*shader_is_end)(void *data, const DWORD **ptr);
};
@@ -714,7 +721,7 @@ typedef struct {
HRESULT (*shader_alloc_private)(IWineD3DDevice *iface);
void (*shader_free_private)(IWineD3DDevice *iface);
BOOL (*shader_dirtifyable_constants)(IWineD3DDevice *iface);
- void (*shader_get_caps)(WINED3DDEVTYPE devtype, const struct wined3d_gl_info *gl_info, struct shader_caps *caps);
+ void (*shader_get_caps)(const struct wined3d_gl_info *gl_info, struct shader_caps *caps);
BOOL (*shader_color_fixup_supported)(struct color_fixup_desc fixup);
void (*shader_add_instruction_modifiers)(const struct wined3d_shader_instruction *ins);
} shader_backend_t;
@@ -988,8 +995,10 @@ extern glMultiTexCoordFunc multi_texcoord_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC
#define STATE_IS_CLIPPLANE(a) ((a) >= STATE_CLIPPLANE(0) && (a) <= STATE_CLIPPLANE(MAX_CLIPPLANES - 1))
#define STATE_MATERIAL (STATE_CLIPPLANE(MAX_CLIPPLANES))
+#define STATE_IS_MATERIAL(a) ((a) == STATE_MATERIAL)
#define STATE_FRONTFACE (STATE_MATERIAL + 1)
+#define STATE_IS_FRONTFACE(a) ((a) == STATE_FRONTFACE)
#define STATE_HIGHEST (STATE_FRONTFACE)
@@ -1008,13 +1017,28 @@ struct wined3d_occlusion_query
struct wined3d_context *context;
};
+union wined3d_gl_query_object
+{
+ GLuint id;
+ GLsync sync;
+};
+
struct wined3d_event_query
{
struct list entry;
- GLuint id;
+ union wined3d_gl_query_object object;
struct wined3d_context *context;
};
+enum wined3d_event_query_result
+{
+ WINED3D_EVENT_QUERY_OK,
+ WINED3D_EVENT_QUERY_WAITING,
+ WINED3D_EVENT_QUERY_NOT_STARTED,
+ WINED3D_EVENT_QUERY_WRONG_THREAD,
+ WINED3D_EVENT_QUERY_ERROR
+};
+
struct wined3d_context
{
const struct wined3d_gl_info *gl_info;
@@ -1084,7 +1108,7 @@ struct wined3d_context
UINT free_occlusion_query_count;
struct list occlusion_queries;
- GLuint *free_event_queries;
+ union wined3d_gl_query_object *free_event_queries;
UINT free_event_query_size;
UINT free_event_query_count;
struct list event_queries;
@@ -1122,7 +1146,7 @@ struct fragment_caps
struct fragment_pipeline
{
void (*enable_extension)(IWineD3DDevice *iface, BOOL enable);
- void (*get_caps)(WINED3DDEVTYPE devtype, const struct wined3d_gl_info *gl_info, struct fragment_caps *caps);
+ void (*get_caps)(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps);
HRESULT (*alloc_private)(IWineD3DDevice *iface);
void (*free_private)(IWineD3DDevice *iface);
BOOL (*color_fixup_supported)(struct color_fixup_desc fixup);
@@ -1224,7 +1248,7 @@ typedef struct WineD3D_PixelFormat
{
int iPixelFormat; /* WGL pixel format */
int iPixelType; /* WGL pixel type e.g. WGL_TYPE_RGBA_ARB, WGL_TYPE_RGBA_FLOAT_ARB or WGL_TYPE_COLORINDEX_ARB */
- int redSize, greenSize, blueSize, alphaSize;
+ int redSize, greenSize, blueSize, alphaSize, colorSize;
int depthSize, stencilSize;
BOOL windowDrawable;
BOOL pbufferDrawable;
@@ -1233,13 +1257,23 @@ typedef struct WineD3D_PixelFormat
int numSamples;
} WineD3D_PixelFormat;
+enum wined3d_gl_vendor
+{
+ GL_VENDOR_WINE,
+ GL_VENDOR_APPLE,
+ GL_VENDOR_ATI,
+ GL_VENDOR_INTEL,
+ GL_VENDOR_MESA,
+ GL_VENDOR_NVIDIA,
+};
+
+
enum wined3d_pci_vendor
{
- VENDOR_WINE = 0x0000,
- VENDOR_MESA = 0x0001,
- VENDOR_ATI = 0x1002,
- VENDOR_NVIDIA = 0x10de,
- VENDOR_INTEL = 0x8086,
+ HW_VENDOR_WINE = 0x0000,
+ HW_VENDOR_ATI = 0x1002,
+ HW_VENDOR_NVIDIA = 0x10de,
+ HW_VENDOR_INTEL = 0x8086,
};
enum wined3d_pci_device
@@ -1323,6 +1357,85 @@ enum wined3d_pci_device
CARD_INTEL_X3100 = 0x2a02, /* Found in Macs. Same as GMA 965? */
};
+struct wined3d_fbo_ops
+{
+ PGLFNGLISRENDERBUFFERPROC glIsRenderbuffer;
+ PGLFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
+ PGLFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
+ PGLFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
+ PGLFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
+ PGLFNRENDERBUFFERSTORAGEMULTISAMPLEPROC glRenderbufferStorageMultisample;
+ PGLFNGLGETRENDERBUFFERPARAMETERIVPROC glGetRenderbufferParameteriv;
+ PGLFNGLISFRAMEBUFFERPROC glIsFramebuffer;
+ PGLFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
+ PGLFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
+ PGLFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
+ PGLFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
+ PGLFNGLFRAMEBUFFERTEXTURE1DPROC glFramebufferTexture1D;
+ PGLFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D;
+ PGLFNGLFRAMEBUFFERTEXTURE3DPROC glFramebufferTexture3D;
+ PGLFNGLFRAMEBUFFERRENDERBUFFERPROC glFramebufferRenderbuffer;
+ PGLFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glGetFramebufferAttachmentParameteriv;
+ PGLFNGLBLITFRAMEBUFFERPROC glBlitFramebuffer;
+ PGLFNGLGENERATEMIPMAPPROC glGenerateMipmap;
+};
+
+struct wined3d_gl_limits
+{
+ UINT buffers;
+ UINT lights;
+ UINT textures;
+ UINT texture_stages;
+ UINT fragment_samplers;
+ UINT vertex_samplers;
+ UINT combined_samplers;
+ UINT general_combiners;
+ UINT sampler_stages;
+ UINT clipplanes;
+ UINT texture_size;
+ UINT texture3d_size;
+ float pointsize_max;
+ float pointsize_min;
+ UINT point_sprite_units;
+ UINT blends;
+ UINT anisotropy;
+ float shininess;
+
+ UINT glsl_varyings;
+ UINT glsl_vs_float_constants;
+ UINT glsl_ps_float_constants;
+
+ UINT arb_vs_float_constants;
+ UINT arb_vs_native_constants;
+ UINT arb_vs_instructions;
+ UINT arb_vs_temps;
+ UINT arb_ps_float_constants;
+ UINT arb_ps_local_constants;
+ UINT arb_ps_native_constants;
+ UINT arb_ps_instructions;
+ UINT arb_ps_temps;
+};
+
+struct wined3d_gl_info
+{
+ UINT vidmem;
+ struct wined3d_gl_limits limits;
+ DWORD reserved_glsl_constants;
+ DWORD quirks;
+ BOOL supported[WINED3D_GL_EXT_COUNT];
+ GLint wrap_lookup[WINED3DTADDRESS_MIRRORONCE - WINED3DTADDRESS_WRAP + 1];
+
+ struct wined3d_fbo_ops fbo_ops;
+#define USE_GL_FUNC(type, pfn, ext, replace) type pfn;
+ /* GL function pointers */
+ GL_EXT_FUNCS_GEN
+ /* WGL function pointers */
+ WGL_EXT_FUNCS_GEN
+#undef USE_GL_FUNC
+
+ struct GlPixelFormatDesc *gl_formats;
+};
+
struct wined3d_driver_info
{
enum wined3d_pci_vendor vendor;
@@ -1348,6 +1461,10 @@ struct wined3d_adapter
unsigned int TextureRam; /* Amount of texture memory both video ram + AGP/TurboCache/HyperMemory/.. */
unsigned int UsedTextureRam;
LUID luid;
+
+ const struct fragment_pipeline *fragment_pipe;
+ const shader_backend_t *shader_backend;
+ const struct blit_shader *blitter;
};
BOOL initPixelFormats(struct wined3d_gl_info *gl_info, enum wined3d_pci_vendor vendor) DECLSPEC_HIDDEN;
@@ -1497,7 +1614,7 @@ struct IWineD3DDeviceImpl
const struct fragment_pipeline *frag_pipe;
const struct blit_shader *blitter;
- unsigned int max_ffp_textures, max_ffp_texture_stages;
+ unsigned int max_ffp_textures;
DWORD d3d_vshader_constantF, d3d_pshader_constantF; /* Advertised d3d caps, not GL ones */
DWORD vs_clipping;
@@ -1547,7 +1664,6 @@ struct IWineD3DDeviceImpl
UINT NumberOfPalettes;
PALETTEENTRY **palettes;
UINT currentPalette;
- UINT paletteConversionShader;
/* For rendering to a texture using glCopyTexImage */
GLenum *draw_buffers;
@@ -1602,14 +1718,14 @@ struct IWineD3DDeviceImpl
HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
UINT adapter_idx, WINED3DDEVTYPE device_type, HWND focus_window, DWORD flags,
IUnknown *parent, IWineD3DDeviceParent *device_parent) DECLSPEC_HIDDEN;
+void device_preload_textures(IWineD3DDeviceImpl *device) DECLSPEC_HIDDEN;
LRESULT device_process_message(IWineD3DDeviceImpl *device, HWND window,
UINT message, WPARAM wparam, LPARAM lparam, WNDPROC proc) DECLSPEC_HIDDEN;
void device_resource_add(IWineD3DDeviceImpl *This, IWineD3DResource *resource) DECLSPEC_HIDDEN;
void device_resource_released(IWineD3DDeviceImpl *This, IWineD3DResource *resource) DECLSPEC_HIDDEN;
void device_stream_info_from_declaration(IWineD3DDeviceImpl *This,
BOOL use_vshader, struct wined3d_stream_info *stream_info, BOOL *fixup) DECLSPEC_HIDDEN;
-void device_stream_info_from_strided(const struct wined3d_gl_info *gl_info,
- const struct WineDirect3DVertexStridedData *strided, struct wined3d_stream_info *stream_info) DECLSPEC_HIDDEN;
+void device_update_stream_info(IWineD3DDeviceImpl *device, const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
HRESULT IWineD3DDeviceImpl_ClearSurface(IWineD3DDeviceImpl *This, IWineD3DSurfaceImpl *target, DWORD Count,
const WINED3DRECT *pRects, DWORD Flags, WINED3DCOLOR Color, float Z, DWORD Stencil) DECLSPEC_HIDDEN;
void IWineD3DDeviceImpl_FindTexUnitMap(IWineD3DDeviceImpl *This) DECLSPEC_HIDDEN;
@@ -1745,6 +1861,7 @@ typedef struct IWineD3DBaseTextureClass
void surface_internal_preload(IWineD3DSurface *iface, enum WINED3DSRGB srgb) DECLSPEC_HIDDEN;
BOOL surface_init_sysmem(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
BOOL surface_is_offscreen(IWineD3DSurface *iface) DECLSPEC_HIDDEN;
+void surface_prepare_texture(IWineD3DSurfaceImpl *surface, BOOL srgb) DECLSPEC_HIDDEN;
typedef struct IWineD3DBaseTextureImpl
{
@@ -2342,9 +2459,8 @@ typedef struct IWineD3DQueryImpl
void *extendedData;
} IWineD3DQueryImpl;
-extern const IWineD3DQueryVtbl IWineD3DQuery_Vtbl DECLSPEC_HIDDEN;
-extern const IWineD3DQueryVtbl IWineD3DEventQuery_Vtbl DECLSPEC_HIDDEN;
-extern const IWineD3DQueryVtbl IWineD3DOcclusionQuery_Vtbl DECLSPEC_HIDDEN;
+HRESULT query_init(IWineD3DQueryImpl *query, IWineD3DDeviceImpl *device,
+ WINED3DQUERYTYPE type, IUnknown *parent) DECLSPEC_HIDDEN;
/* IWineD3DBuffer */
@@ -2495,6 +2611,7 @@ const char *debug_d3ddeclusage(BYTE usage) DECLSPEC_HIDDEN;
const char *debug_d3dprimitivetype(WINED3DPRIMITIVETYPE PrimitiveType) DECLSPEC_HIDDEN;
const char *debug_d3drenderstate(DWORD state) DECLSPEC_HIDDEN;
const char *debug_d3dsamplerstate(DWORD state) DECLSPEC_HIDDEN;
+const char *debug_d3dstate(DWORD state) DECLSPEC_HIDDEN;
const char *debug_d3dtexturefiltertype(WINED3DTEXTUREFILTERTYPE filter_type) DECLSPEC_HIDDEN;
const char *debug_d3dtexturestate(DWORD state) DECLSPEC_HIDDEN;
const char *debug_d3dtstype(WINED3DTRANSFORMSTATETYPE tstype) DECLSPEC_HIDDEN;
@@ -2552,12 +2669,6 @@ void multiply_matrix(WINED3DMATRIX *dest, const WINED3DMATRIX *src1, const WINED
UINT wined3d_log2i(UINT32 x) DECLSPEC_HIDDEN;
unsigned int count_bits(unsigned int mask) DECLSPEC_HIDDEN;
-const struct blit_shader *select_blit_implementation(struct wined3d_adapter *adapter,
- WINED3DDEVTYPE device_type) DECLSPEC_HIDDEN;
-const struct fragment_pipeline *select_fragment_implementation(struct wined3d_adapter *adapter,
- WINED3DDEVTYPE device_type) DECLSPEC_HIDDEN;
-const shader_backend_t *select_shader_backend(struct wined3d_adapter *adapter,
- WINED3DDEVTYPE device_type) DECLSPEC_HIDDEN;
void select_shader_mode(const struct wined3d_gl_info *gl_info, int *ps_selected, int *vs_selected) DECLSPEC_HIDDEN;
typedef struct local_constant {
@@ -2601,8 +2712,6 @@ int shader_vaddline(struct wined3d_shader_buffer *buffer, const char *fmt, va_li
extern BOOL vshader_get_input(IWineD3DVertexShader *iface,
BYTE usage_req, BYTE usage_idx_req, unsigned int *regnum) DECLSPEC_HIDDEN;
-extern HRESULT allocate_shader_constants(IWineD3DStateBlockImpl* object) DECLSPEC_HIDDEN;
-
/*****************************************************************************
* IDirect3DBaseShader implementation structure
*/
@@ -2651,7 +2760,6 @@ typedef struct IWineD3DBaseShaderImpl {
void shader_buffer_clear(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
BOOL shader_buffer_init(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
void shader_buffer_free(struct wined3d_shader_buffer *buffer) DECLSPEC_HIDDEN;
-void shader_cleanup(IWineD3DBaseShader *iface) DECLSPEC_HIDDEN;
void shader_dump_src_param(const struct wined3d_shader_src_param *param,
const struct wined3d_shader_version *shader_version) DECLSPEC_HIDDEN;
void shader_dump_dst_param(const struct wined3d_shader_dst_param *param,
@@ -2659,16 +2767,7 @@ void shader_dump_dst_param(const struct wined3d_shader_dst_param *param,
unsigned int shader_find_free_input_register(const struct shader_reg_maps *reg_maps, unsigned int max) DECLSPEC_HIDDEN;
void shader_generate_main(IWineD3DBaseShader *iface, struct wined3d_shader_buffer *buffer,
const shader_reg_maps *reg_maps, const DWORD *pFunction, void *backend_ctx) DECLSPEC_HIDDEN;
-HRESULT shader_get_registers_used(IWineD3DBaseShader *iface, const struct wined3d_shader_frontend *fe,
- struct shader_reg_maps *reg_maps, struct wined3d_shader_signature_element *input_signature,
- struct wined3d_shader_signature_element *output_signature,
- const DWORD *byte_code, DWORD constf_size) DECLSPEC_HIDDEN;
-void shader_init(struct IWineD3DBaseShaderClass *shader, IWineD3DDeviceImpl *device,
- IUnknown *parent, const struct wined3d_parent_ops *parent_ops) DECLSPEC_HIDDEN;
BOOL shader_match_semantic(const char *semantic_name, WINED3DDECLUSAGE usage) DECLSPEC_HIDDEN;
-const struct wined3d_shader_frontend *shader_select_frontend(DWORD version_token) DECLSPEC_HIDDEN;
-void shader_trace_init(const struct wined3d_shader_frontend *fe, void *fe_data, const DWORD *pFunction) DECLSPEC_HIDDEN;
-WINED3DDECLUSAGE shader_usage_from_semantic_name(const char *semantic_name) DECLSPEC_HIDDEN;
static inline BOOL shader_is_pshader_version(enum wined3d_shader_type type)
{
diff --git a/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild b/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild
index 988e654da33..47d3958a939 100644
--- a/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild
+++ b/reactos/dll/nls/normaliz_redist/normaliz_redist.rbuild
@@ -1,5 +1,6 @@
+
icu/source/common
icudt38.c
@@ -16,3 +17,4 @@
normaliz.cpp
+
diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c
index 10b6ee572fc..ea208ce5eb9 100644
--- a/reactos/dll/ntdll/ldr/utils.c
+++ b/reactos/dll/ntdll/ldr/utils.c
@@ -1601,6 +1601,9 @@ LdrpProcessImportDirectoryEntry(PLDR_DATA_TABLE_ENTRY Module,
IATSize++;
}
+ /* No need to fixup anything if IAT is empty */
+ if (IATSize == 0) return STATUS_SUCCESS;
+
/* Unprotect the region we are about to write into. */
IATBase = (PVOID)ImportAddressList;
IATSize *= sizeof(PVOID*);
diff --git a/reactos/dll/shellext/deskadp/deskadp.h b/reactos/dll/shellext/deskadp/deskadp.h
index 2de98b3b697..11ab46a2318 100644
--- a/reactos/dll/shellext/deskadp/deskadp.h
+++ b/reactos/dll/shellext/deskadp/deskadp.h
@@ -1,5 +1,4 @@
-#ifndef __DESKADP__H
-#define __DESKADP__H
+#pragma once
typedef struct _DESKDISPLAYADAPTER
{
@@ -59,5 +58,3 @@ IDeskDisplayAdapter_ReplacePage(PDESKDISPLAYADAPTER This,
static const GUID CLSID_IDeskDisplayAdapter = {0x42071712,0x76d4,0x11d1,{0x8b,0x24,0x00,0xa0,0xc9,0x06,0x8f,0xf3}};
ULONG __cdecl DbgPrint(PCCH Format,...);
-
-#endif /* __DESKADP__H */
diff --git a/reactos/dll/shellext/deskadp/lang/de-DE.rc b/reactos/dll/shellext/deskadp/lang/de-DE.rc
index 0ccade07207..a7881428f7c 100644
--- a/reactos/dll/shellext/deskadp/lang/de-DE.rc
+++ b/reactos/dll/shellext/deskadp/lang/de-DE.rc
@@ -8,7 +8,7 @@ BEGIN
GROUPBOX "Adaptertyp", -1, 7, 3, 237, 50
LTEXT "", IDC_ADAPTERNAME, 40, 17, 190, 20
PUSHBUTTON "&Einstellungen", IDC_ADAPTERPROPERTIES, 177, 33, 59, 14
- GROUPBOX "Adapter Information", -1, 7, 56, 237, 75
+ GROUPBOX "Adapter-Informationen", -1, 7, 56, 237, 75
LTEXT "Chiptyp:", -1, 13, 68, 58, 8
LTEXT "", IDC_CHIPTYPE, 71, 68, 160, 8, SS_NOPREFIX
LTEXT "DAC Typ:", -1, 13, 80, 58, 8
@@ -17,7 +17,7 @@ BEGIN
LTEXT "", IDC_MEMORYSIZE, 71, 92, 160, 8, SS_NOPREFIX
LTEXT "Zeichenfolge:", -1, 13, 104, 58, 8
LTEXT "", IDC_ADAPTERSTRING, 71, 104, 160, 8, SS_NOPREFIX
- LTEXT "BIOS Informationen:", -1, 13, 116, 58, 8
+ LTEXT "BIOS-Informationen:", -1, 13, 116, 58, 8
LTEXT "", IDC_BIOSINFORMATION, 71, 116, 160, 8, SS_NOPREFIX
PUSHBUTTON "Alle Modi auf&listen...", IDC_LISTALLMODES, 7, 139, 75, 14
END
diff --git a/reactos/dll/shellext/deskadp/resource.h b/reactos/dll/shellext/deskadp/resource.h
index 6268f48e3be..ab3d1fae66b 100644
--- a/reactos/dll/shellext/deskadp/resource.h
+++ b/reactos/dll/shellext/deskadp/resource.h
@@ -1,5 +1,4 @@
-#ifndef __RESOURCE__H
-#define __RESOURCE__H
+#pragma once
#define IDD_DISPLAYADAPTER 100
#define IDD_LISTALLMODES 101
@@ -24,5 +23,3 @@
#define IDS_16BPP 107
#define IDS_24BPP 108
#define IDS_32BPP 109
-
-#endif /* __RESOURCE__H */
diff --git a/reactos/dll/shellext/deskmon/deskmon.h b/reactos/dll/shellext/deskmon/deskmon.h
index 36157005d9d..d2d381a7561 100644
--- a/reactos/dll/shellext/deskmon/deskmon.h
+++ b/reactos/dll/shellext/deskmon/deskmon.h
@@ -1,5 +1,4 @@
-#ifndef __DESKMON__H
-#define __DESKMON__H
+#pragma once
typedef struct _DESKMONINFO
{
@@ -79,5 +78,3 @@ IDeskMonitor_ReplacePage(PDESKMONITOR This,
static const GUID CLSID_IDeskMonitor = {0x42071713,0x76d4,0x11d1,{0x8b,0x24,0x00,0xa0,0xc9,0x06,0x8f,0xf3}};
ULONG __cdecl DbgPrint(PCCH Format,...);
-
-#endif /* __DESKMON__H */
diff --git a/reactos/dll/shellext/deskmon/lang/de-DE.rc b/reactos/dll/shellext/deskmon/lang/de-DE.rc
index dc394c8b281..e6d7bd82492 100644
--- a/reactos/dll/shellext/deskmon/lang/de-DE.rc
+++ b/reactos/dll/shellext/deskmon/lang/de-DE.rc
@@ -17,6 +17,6 @@ END
STRINGTABLE
BEGIN
- IDS_USEDEFFRQUENCY "Verwende Hardware Standardeinstellung."
+ IDS_USEDEFFRQUENCY "Verwende Hardware-Standardeinstellung."
IDS_FREQFMT "%u Hertz"
END
diff --git a/reactos/dll/shellext/deskmon/resource.h b/reactos/dll/shellext/deskmon/resource.h
index 17c564a42a2..dd3573bdb12 100644
--- a/reactos/dll/shellext/deskmon/resource.h
+++ b/reactos/dll/shellext/deskmon/resource.h
@@ -1,5 +1,4 @@
-#ifndef __RESOURCE__H
-#define __RESOURCE__H
+#pragma once
#define IDD_MONITOR 100
@@ -13,5 +12,3 @@
#define IDS_USEDEFFRQUENCY 101
#define IDS_FREQFMT 102
-
-#endif /* __RESOURCE__H */
diff --git a/reactos/dll/shellext/fontext/fontext.h b/reactos/dll/shellext/fontext/fontext.h
index 21cd62d8099..c62ce1c49a0 100644
--- a/reactos/dll/shellext/fontext/fontext.h
+++ b/reactos/dll/shellext/fontext/fontext.h
@@ -1,5 +1,4 @@
-#ifndef __FONTEXT__H
-#define __FONTEXT__H
+#pragma once
#define COBJMACROS
#include
@@ -8,5 +7,3 @@
#include
#include
-
-#endif /* __FONTEXT__H */
diff --git a/reactos/dll/shellext/fontext/resource.h b/reactos/dll/shellext/fontext/resource.h
index 3c2afa78abf..2fdfda08f9c 100644
--- a/reactos/dll/shellext/fontext/resource.h
+++ b/reactos/dll/shellext/fontext/resource.h
@@ -1,6 +1,3 @@
-#ifndef __RESOURCE__H
-#define __RESOURCE__H
+#pragma once
#define IDS_REACTOS_FONTS_FOLDER 151
-
-#endif /* __RESOURCE__H */
diff --git a/reactos/dll/shellext/shellext.rbuild b/reactos/dll/shellext/shellext.rbuild
index fc06870684d..95598f57bfc 100644
--- a/reactos/dll/shellext/shellext.rbuild
+++ b/reactos/dll/shellext/shellext.rbuild
@@ -1,5 +1,5 @@
-
+
diff --git a/reactos/dll/shellext/slayer/resource.h b/reactos/dll/shellext/slayer/resource.h
index a0f23b47fc3..f3312163484 100644
--- a/reactos/dll/shellext/slayer/resource.h
+++ b/reactos/dll/shellext/slayer/resource.h
@@ -1,5 +1,4 @@
-#ifndef __SLAYER_RESOURCE_H
-#define __SLAYER_RESOURCE_H
+#pragma once
#define IDD_SLAYERSHEET 100
#define IDD_EDITCOMPATIBILITYMODES 101
@@ -19,6 +18,4 @@
#define IDS_SLAYER 100
#define IDS_DESCRIPTION 101
-#endif /* __SLAYER_RESOURCE_H */
-
/* EOF */
diff --git a/reactos/dll/shellext/slayer/slayer.h b/reactos/dll/shellext/slayer/slayer.h
index f48538e430a..6cad312a0bf 100644
--- a/reactos/dll/shellext/slayer/slayer.h
+++ b/reactos/dll/shellext/slayer/slayer.h
@@ -1,5 +1,4 @@
-#ifndef __SLAYER_H
-#define __SLAYER_H
+#pragma once
extern HINSTANCE hInstance;
@@ -120,7 +119,4 @@ HRESULT STDMETHODCALLTYPE ICompatibilityPage_fnCreateInstance(LPCOMPATIBILITYPAG
HRESULT STDMETHODCALLTYPE ICompatibilityPage_fnLockServer(LPCOMPATIBILITYPAGE this,
BOOL fLock);
-
-#endif /* __SLAYER_H */
-
/* EOF */
diff --git a/reactos/drivers/base/beep/beep.c b/reactos/drivers/base/beep/beep.c
index 324ad1622ae..45addc6f50f 100644
--- a/reactos/drivers/base/beep/beep.c
+++ b/reactos/drivers/base/beep/beep.c
@@ -393,7 +393,7 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject,
DeviceExtension = DeviceObject->DeviceExtension;
DeviceExtension->ReferenceCount = 0;
DeviceExtension->TimerActive = FALSE;
- IoInitializeDpcRequest(DeviceObject, BeepDPC);
+ IoInitializeDpcRequest(DeviceObject, (PIO_DPC_ROUTINE)BeepDPC);
KeInitializeTimer(&DeviceExtension->Timer);
ExInitializeFastMutex(&DeviceExtension->Mutex);
diff --git a/reactos/drivers/base/bootvid/i386/bootvid.c b/reactos/drivers/base/bootvid/i386/bootvid.c
index f6dce1cbec8..3d0ae503167 100644
--- a/reactos/drivers/base/bootvid/i386/bootvid.c
+++ b/reactos/drivers/base/bootvid/i386/bootvid.c
@@ -394,6 +394,7 @@ VidInitialize(IN BOOLEAN SetMode)
{
/* Translate the VGA Memory Address */
VgaAddress.LowPart = 0xA0000;
+ VgaAddress.HighPart = 0;
AddressSpace = 0;
Result = HalFindBusAddressTranslation(VgaAddress,
&AddressSpace,
diff --git a/reactos/drivers/base/bootvid/precomp.h b/reactos/drivers/base/bootvid/precomp.h
index b74cf0d938a..c7d55e92f8c 100644
--- a/reactos/drivers/base/bootvid/precomp.h
+++ b/reactos/drivers/base/bootvid/precomp.h
@@ -1,4 +1,5 @@
#include "ntddk.h"
+#include "ntifs.h"
#include "arc/arc.h"
#include "halfuncs.h"
#include "drivers/bootvid/bootvid.h"
diff --git a/reactos/drivers/base/kdcom/i386/kdbg.c b/reactos/drivers/base/kdcom/i386/kdbg.c
index f81bcc69945..3d7ed1c0bf6 100644
--- a/reactos/drivers/base/kdcom/i386/kdbg.c
+++ b/reactos/drivers/base/kdcom/i386/kdbg.c
@@ -12,6 +12,7 @@
#define NOEXTAPI
#include
+#include
#define NDEBUG
#include
#include
diff --git a/reactos/drivers/base/kddll/kdcom.h b/reactos/drivers/base/kddll/kdcom.h
index b7cc9af04b3..d6b6430e889 100644
--- a/reactos/drivers/base/kddll/kdcom.h
+++ b/reactos/drivers/base/kddll/kdcom.h
@@ -6,8 +6,7 @@
* PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org)
*/
-#ifndef _KDCOM_H_
-#define _KDCOM_H_
+#pragma once
#define COM_DAT 0x00
#define COM_IEN 0x01 /* interrupt enable register */
@@ -53,5 +52,3 @@
#define MSR_DSR 0x20 /* (complemented) state of data set ready (DSR). */
#define MSR_RI 0x40 /* (complemented) state of ring indicator (RI). */
#define MSR_DCD 0x80 /* (complemented) state of data carrier detect (DCD). */
-
-#endif /* !_KDCOM_H_ */
diff --git a/reactos/drivers/base/kddll/kddll.h b/reactos/drivers/base/kddll/kddll.h
index 81a20c5a1b5..76330922fc4 100644
--- a/reactos/drivers/base/kddll/kddll.h
+++ b/reactos/drivers/base/kddll/kddll.h
@@ -6,8 +6,7 @@
* PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org)
*/
-#ifndef _KDDLL_H_
-#define _KDDLL_H_
+#pragma once
#define NOEXTAPI
#include
@@ -80,6 +79,3 @@ NTAPI
KdDebuggerInitialize0(
IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL);
#endif
-
-
-#endif /* !_KDDLL_H_ */
diff --git a/reactos/drivers/base/kddll/kddll.rbuild b/reactos/drivers/base/kddll/kddll.rbuild
index 3fca485e8e7..6e01f2fa2b3 100644
--- a/reactos/drivers/base/kddll/kddll.rbuild
+++ b/reactos/drivers/base/kddll/kddll.rbuild
@@ -1,6 +1,6 @@
-
+
.
ntoskrnl
@@ -22,3 +22,4 @@
kdserial
kdcom.c
+
diff --git a/reactos/drivers/battery/battc/battc.c b/reactos/drivers/battery/battc/battc.c
new file mode 100644
index 00000000000..6a0b7220c1c
--- /dev/null
+++ b/reactos/drivers/battery/battc/battc.c
@@ -0,0 +1,356 @@
+/*
+ * PROJECT: ReactOS Kernel
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: drivers/battery/battc/battc.c
+ * PURPOSE: Battery Class Driver
+ * PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org)
+ */
+
+#include
+
+#define NDEBUG
+#include
+
+NTSTATUS
+NTAPI
+DriverEntry(PDRIVER_OBJECT DriverObject,
+ PUNICODE_STRING RegistryPath)
+{
+ DPRINT("Battery class driver initialized\n");
+
+ return STATUS_SUCCESS;
+}
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassUnload(PVOID ClassData)
+{
+ PBATTERY_CLASS_DATA BattClass = ClassData;
+
+ DPRINT("Battery 0x%x is being unloaded\n");
+
+ if (BattClass->InterfaceName.Length != 0)
+ {
+ IoSetDeviceInterfaceState(&BattClass->InterfaceName, FALSE);
+ RtlFreeUnicodeString(&BattClass->InterfaceName);
+ }
+
+ ExFreePoolWithTag(BattClass,
+ BATTERY_CLASS_DATA_TAG);
+
+ return STATUS_SUCCESS;
+}
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassSystemControl(PVOID ClassData,
+ PVOID WmiLibContext,
+ PDEVICE_OBJECT DeviceObject,
+ PIRP Irp,
+ PVOID Disposition)
+{
+ UNIMPLEMENTED
+
+ return STATUS_WMI_GUID_NOT_FOUND;
+}
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassQueryWmiDataBlock(PVOID ClassData,
+ PDEVICE_OBJECT DeviceObject,
+ PIRP Irp,
+ ULONG GuidIndex,
+ PULONG InstanceLengthArray,
+ ULONG OutBufferSize,
+ PUCHAR Buffer)
+{
+ UNIMPLEMENTED
+
+ return STATUS_WMI_GUID_NOT_FOUND;
+}
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassStatusNotify(PVOID ClassData)
+{
+ PBATTERY_CLASS_DATA BattClass = ClassData;
+ PBATTERY_WAIT_STATUS BattWait = BattClass->EventTriggerContext;
+ BATTERY_STATUS BattStatus;
+ NTSTATUS Status;
+
+ DPRINT("Received battery status notification from 0x%x\n", ClassData);
+
+ ExAcquireFastMutex(&BattClass->Mutex);
+ if (!BattClass->Waiting)
+ {
+ ExReleaseFastMutex(&BattClass->Mutex);
+ return STATUS_SUCCESS;
+ }
+
+ switch (BattClass->EventTrigger)
+ {
+ case EVENT_BATTERY_TAG:
+ ExReleaseFastMutex(&BattClass->Mutex);
+ DPRINT1("Waiting for battery is UNIMPLEMENTED!\n");
+ break;
+
+ case EVENT_BATTERY_STATUS:
+ ExReleaseFastMutex(&BattClass->Mutex);
+ Status = BattClass->MiniportInfo.QueryStatus(BattClass->MiniportInfo.Context,
+ BattWait->BatteryTag,
+ &BattStatus);
+ if (!NT_SUCCESS(Status))
+ return Status;
+
+ ExAcquireFastMutex(&BattClass->Mutex);
+
+ if (!(BattWait->PowerState & BattStatus.PowerState) ||
+ (BattWait->HighCapacity > BattStatus.Capacity) ||
+ (BattWait->LowCapacity < BattStatus.Capacity))
+ {
+ KeSetEvent(&BattClass->WaitEvent, IO_NO_INCREMENT, FALSE);
+ }
+
+ ExReleaseFastMutex(&BattClass->Mutex);
+ break;
+
+ default:
+ ExReleaseFastMutex(&BattClass->Mutex);
+ ASSERT(FALSE);
+ break;
+ }
+
+ return STATUS_SUCCESS;
+}
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
+ PVOID *ClassData)
+{
+ NTSTATUS Status;
+ PBATTERY_CLASS_DATA BattClass = ExAllocatePoolWithTag(NonPagedPool,
+ sizeof(BATTERY_CLASS_DATA),
+ BATTERY_CLASS_DATA_TAG);
+
+ if (!BattClass)
+ return STATUS_INSUFFICIENT_RESOURCES;
+
+ RtlZeroMemory(BattClass, sizeof(BATTERY_CLASS_DATA));
+
+ RtlCopyMemory(&BattClass->MiniportInfo,
+ MiniportInfo,
+ sizeof(BattClass->MiniportInfo));
+
+ KeInitializeEvent(&BattClass->WaitEvent, SynchronizationEvent, FALSE);
+
+ ExInitializeFastMutex(&BattClass->Mutex);
+
+ Status = IoRegisterDeviceInterface(MiniportInfo->Pdo,
+ &GUID_DEVICE_BATTERY,
+ NULL,
+ &BattClass->InterfaceName);
+ if (NT_SUCCESS(Status))
+ {
+ DPRINT("Initialized battery interface: %wZ\n", &BattClass->InterfaceName);
+ IoSetDeviceInterfaceState(&BattClass->InterfaceName, TRUE);
+ }
+ else
+ {
+ DPRINT1("IoRegisterDeviceInterface failed (0x%x)\n", Status);
+ }
+
+ *ClassData = BattClass;
+
+ return STATUS_SUCCESS;
+}
+
+BCLASSAPI
+NTSTATUS
+DDKAPI
+BatteryClassIoctl(PVOID ClassData,
+ PIRP Irp)
+{
+ PBATTERY_CLASS_DATA BattClass = ClassData;
+ PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
+ NTSTATUS Status;
+ ULONG WaitTime;
+ PBATTERY_WAIT_STATUS BattWait;
+ PBATTERY_QUERY_INFORMATION BattQueryInfo;
+ PBATTERY_SET_INFORMATION BattSetInfo;
+ LARGE_INTEGER Timeout;
+ PBATTERY_STATUS BattStatus;
+ BATTERY_NOTIFY BattNotify;
+
+ Irp->IoStatus.Information = 0;
+
+ DPRINT("Received IOCTL %x for 0x%x\n", IrpSp->Parameters.DeviceIoControl.IoControlCode,
+ ClassData);
+
+ switch (IrpSp->Parameters.DeviceIoControl.IoControlCode)
+ {
+ case IOCTL_BATTERY_QUERY_TAG:
+ if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ULONG) ||
+ IrpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
+ {
+ Status = STATUS_BUFFER_TOO_SMALL;
+ break;
+ }
+
+ WaitTime = *(PULONG)Irp->AssociatedIrp.SystemBuffer;
+
+ Timeout.QuadPart = Int32x32To64(WaitTime, -1000);
+
+ Status = BattClass->MiniportInfo.QueryTag(BattClass->MiniportInfo.Context,
+ (PULONG)Irp->AssociatedIrp.SystemBuffer);
+ if (!NT_SUCCESS(Status))
+ {
+ ExAcquireFastMutex(&BattClass->Mutex);
+ BattClass->EventTrigger = EVENT_BATTERY_TAG;
+ BattClass->Waiting = TRUE;
+ ExReleaseFastMutex(&BattClass->Mutex);
+
+ Status = KeWaitForSingleObject(&BattClass->WaitEvent,
+ Executive,
+ KernelMode,
+ FALSE,
+ WaitTime != -1 ? &Timeout : NULL);
+
+ ExAcquireFastMutex(&BattClass->Mutex);
+ BattClass->Waiting = FALSE;
+ ExReleaseFastMutex(&BattClass->Mutex);
+
+ if (Status == STATUS_SUCCESS)
+ {
+ Status = BattClass->MiniportInfo.QueryTag(BattClass->MiniportInfo.Context,
+ (PULONG)Irp->AssociatedIrp.SystemBuffer);
+ if (NT_SUCCESS(Status))
+ Irp->IoStatus.Information = sizeof(ULONG);
+ }
+ else
+ {
+ Status = STATUS_NO_SUCH_DEVICE;
+ }
+ }
+ else
+ Irp->IoStatus.Information = sizeof(ULONG);
+ break;
+
+ case IOCTL_BATTERY_QUERY_STATUS:
+ if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(*BattWait) ||
+ IrpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(BATTERY_STATUS))
+ {
+ Status = STATUS_BUFFER_TOO_SMALL;
+ break;
+ }
+
+ BattWait = Irp->AssociatedIrp.SystemBuffer;
+
+ Timeout.QuadPart = Int32x32To64(BattWait->Timeout, -1000);
+
+ Status = BattClass->MiniportInfo.QueryStatus(BattClass->MiniportInfo.Context,
+ BattWait->BatteryTag,
+ (PBATTERY_STATUS)Irp->AssociatedIrp.SystemBuffer);
+
+ BattStatus = Irp->AssociatedIrp.SystemBuffer;
+
+ if (!NT_SUCCESS(Status) ||
+ ((BattWait->PowerState & BattStatus->PowerState) &&
+ (BattWait->HighCapacity <= BattStatus->Capacity) &&
+ (BattWait->LowCapacity >= BattStatus->Capacity)))
+ {
+ BattNotify.PowerState = BattWait->PowerState;
+ BattNotify.HighCapacity = BattWait->HighCapacity;
+ BattNotify.LowCapacity = BattWait->LowCapacity;
+
+ BattClass->MiniportInfo.SetStatusNotify(BattClass->MiniportInfo.Context,
+ BattWait->BatteryTag,
+ &BattNotify);
+
+ ExAcquireFastMutex(&BattClass->Mutex);
+ BattClass->EventTrigger = EVENT_BATTERY_STATUS;
+ BattClass->EventTriggerContext = BattWait;
+ BattClass->Waiting = TRUE;
+ ExReleaseFastMutex(&BattClass->Mutex);
+
+ Status = KeWaitForSingleObject(&BattClass->WaitEvent,
+ Executive,
+ KernelMode,
+ FALSE,
+ BattWait->Timeout != -1 ? &Timeout : NULL);
+
+ ExAcquireFastMutex(&BattClass->Mutex);
+ BattClass->Waiting = FALSE;
+ ExReleaseFastMutex(&BattClass->Mutex);
+
+ BattClass->MiniportInfo.DisableStatusNotify(BattClass->MiniportInfo.Context);
+
+ if (Status == STATUS_SUCCESS)
+ {
+ Status = BattClass->MiniportInfo.QueryStatus(BattClass->MiniportInfo.Context,
+ BattWait->BatteryTag,
+ (PBATTERY_STATUS)Irp->AssociatedIrp.SystemBuffer);
+ if (NT_SUCCESS(Status))
+ Irp->IoStatus.Information = sizeof(ULONG);
+ }
+ else
+ {
+ Status = STATUS_NO_SUCH_DEVICE;
+ }
+ }
+ else
+ Irp->IoStatus.Information = sizeof(BATTERY_STATUS);
+ break;
+
+ case IOCTL_BATTERY_QUERY_INFORMATION:
+ if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(*BattQueryInfo))
+ {
+ Status = STATUS_BUFFER_TOO_SMALL;
+ break;
+ }
+
+ BattQueryInfo = Irp->AssociatedIrp.SystemBuffer;
+
+ Status = BattClass->MiniportInfo.QueryInformation(BattClass->MiniportInfo.Context,
+ BattQueryInfo->BatteryTag,
+ BattQueryInfo->InformationLevel,
+ BattQueryInfo->AtRate,
+ Irp->AssociatedIrp.SystemBuffer,
+ IrpSp->Parameters.DeviceIoControl.OutputBufferLength,
+ &Irp->IoStatus.Information);
+ if (!NT_SUCCESS(Status))
+ DPRINT1("QueryInformation failed (0x%x)\n", Status);
+ break;
+ case IOCTL_BATTERY_SET_INFORMATION:
+ if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(*BattSetInfo))
+ {
+ Status = STATUS_BUFFER_TOO_SMALL;
+ break;
+ }
+
+ BattSetInfo = Irp->AssociatedIrp.SystemBuffer;
+
+ Status = BattClass->MiniportInfo.SetInformation(BattClass->MiniportInfo.Context,
+ BattSetInfo->BatteryTag,
+ BattSetInfo->InformationLevel,
+ BattSetInfo->Buffer);
+ if (!NT_SUCCESS(Status))
+ DPRINT1("SetInformation failed (0x%x)\n", Status);
+ break;
+
+ default:
+ DPRINT1("Received unsupported IRP %x\n", IrpSp->Parameters.DeviceIoControl.IoControlCode);
+ /* Do NOT complete the irp */
+ return STATUS_NOT_SUPPORTED;
+ }
+
+ Irp->IoStatus.Status = Status;
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+ return Status;
+}
diff --git a/reactos/drivers/battery/battc/battc.h b/reactos/drivers/battery/battc/battc.h
new file mode 100644
index 00000000000..0839cea845e
--- /dev/null
+++ b/reactos/drivers/battery/battc/battc.h
@@ -0,0 +1,31 @@
+/*
+* PROJECT: ReactOS Kernel
+* LICENSE: GPL - See COPYING in the top level directory
+* FILE: drivers/battery/battc/battc.h
+* PURPOSE: Battery Class Driver
+* PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org)
+*/
+
+#pragma once
+
+#include
+#include
+#include
+#include
+
+typedef struct _BATTERY_CLASS_DATA {
+ BATTERY_MINIPORT_INFO MiniportInfo;
+ KEVENT WaitEvent;
+ BOOLEAN Waiting;
+ FAST_MUTEX Mutex;
+ UCHAR EventTrigger;
+ PVOID EventTriggerContext;
+ UNICODE_STRING InterfaceName;
+} BATTERY_CLASS_DATA, *PBATTERY_CLASS_DATA;
+
+/* Memory tags */
+#define BATTERY_CLASS_DATA_TAG 'CtaB'
+
+/* Event triggers */
+#define EVENT_BATTERY_TAG 0x01
+#define EVENT_BATTERY_STATUS 0x02
diff --git a/reactos/drivers/battery/battc/battc.rbuild b/reactos/drivers/battery/battc/battc.rbuild
new file mode 100644
index 00000000000..c0261344994
--- /dev/null
+++ b/reactos/drivers/battery/battc/battc.rbuild
@@ -0,0 +1,10 @@
+
+
+
+ ntoskrnl
+ hal
+
+ .
+ battc.c
+ battc.rc
+
diff --git a/reactos/drivers/battery/battc/battc.rc b/reactos/drivers/battery/battc/battc.rc
new file mode 100644
index 00000000000..2230092b4a4
--- /dev/null
+++ b/reactos/drivers/battery/battc/battc.rc
@@ -0,0 +1,5 @@
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "Battery Class Driver\0"
+#define REACTOS_STR_INTERNAL_NAME "battc\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "battc.sys\0"
+#include
diff --git a/reactos/drivers/battery/battc/battc.spec b/reactos/drivers/battery/battc/battc.spec
new file mode 100644
index 00000000000..c2d21b7ec20
--- /dev/null
+++ b/reactos/drivers/battery/battc/battc.spec
@@ -0,0 +1,6 @@
+@ stdcall BatteryClassInitializeDevice(ptr ptr)
+@ stdcall BatteryClassIoctl(ptr ptr)
+@ stdcall BatteryClassQueryWmiDataBlock(ptr ptr ptr long ptr long ptr)
+@ stdcall BatteryClassStatusNotify(ptr)
+@ stdcall BatteryClassSystemControl(ptr ptr ptr ptr ptr)
+@ stdcall BatteryClassUnload(ptr)
diff --git a/reactos/drivers/battery/cmbatt/cmbatt.c b/reactos/drivers/battery/cmbatt/cmbatt.c
new file mode 100644
index 00000000000..b85f3ebc504
--- /dev/null
+++ b/reactos/drivers/battery/cmbatt/cmbatt.c
@@ -0,0 +1,188 @@
+/*
+ * PROJECT: ReactOS Kernel
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: drivers/battery/cmbatt/cmbatt.c
+ * PURPOSE: Control Method Battery Miniclass Driver
+ * PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org)
+ */
+
+#include
+
+#define NDEBUG
+#include
+
+LIST_ENTRY BatteryList;
+KSPIN_LOCK BatteryListLock;
+
+VOID
+NTAPI
+CmBattUnload(PDRIVER_OBJECT DriverObject)
+{
+ DPRINT("Control method battery miniclass driver unloaded\n");
+}
+
+NTSTATUS
+NTAPI
+CmBattDeviceControl(PDEVICE_OBJECT DeviceObject,
+ PIRP Irp)
+{
+ PCMBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
+ NTSTATUS Status;
+
+ Status = BatteryClassIoctl(DeviceExtension->BattClassHandle,
+ Irp);
+
+ if (Status == STATUS_NOT_SUPPORTED)
+ {
+ Irp->IoStatus.Status = Status;
+ Irp->IoStatus.Information = 0;
+
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+ }
+
+ return Status;
+}
+
+NTSTATUS
+NTAPI
+CmBattPnP(PDEVICE_OBJECT DeviceObject,
+ PIRP Irp)
+{
+ PCMBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
+
+ UNIMPLEMENTED
+
+ IoSkipCurrentIrpStackLocation(Irp);
+
+ return IoCallDriver(DeviceExtension->Ldo, Irp);
+}
+
+NTSTATUS
+NTAPI
+CmBattSystemControl(PDEVICE_OBJECT DeviceObject,
+ PIRP Irp)
+{
+ UNIMPLEMENTED
+
+ Irp->IoStatus.Status = STATUS_WMI_GUID_NOT_FOUND;
+ Irp->IoStatus.Information = 0;
+
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+ return STATUS_WMI_GUID_NOT_FOUND;
+}
+
+NTSTATUS
+NTAPI
+CmBattPower(PDEVICE_OBJECT DeviceObject,
+ PIRP Irp)
+{
+ PCMBATT_DEVICE_EXTENSION DeviceExtension = DeviceObject->DeviceExtension;
+
+ UNIMPLEMENTED
+
+ IoSkipCurrentIrpStackLocation(Irp);
+
+ PoStartNextPowerIrp(Irp);
+
+ return PoCallDriver(DeviceExtension->Ldo, Irp);
+}
+
+NTSTATUS
+NTAPI
+CmBattCreateClose(PDEVICE_OBJECT DeviceObject,
+ PIRP Irp)
+{
+ Irp->IoStatus.Status = STATUS_SUCCESS;
+ Irp->IoStatus.Information = 0;
+
+ IoCompleteRequest(Irp, IO_NO_INCREMENT);
+
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+NTAPI
+CmBattAddDevice(PDRIVER_OBJECT DriverObject,
+ PDEVICE_OBJECT PhysicalDeviceObject)
+{
+ NTSTATUS Status;
+ PDEVICE_OBJECT DeviceObject;
+ PCMBATT_DEVICE_EXTENSION DeviceExtension;
+ BATTERY_MINIPORT_INFO BattInfo;
+
+ Status = IoCreateDevice(DriverObject,
+ sizeof(CMBATT_DEVICE_EXTENSION),
+ NULL,
+ FILE_DEVICE_BATTERY,
+ 0,
+ FALSE,
+ &DeviceObject);
+ if (!NT_SUCCESS(Status))
+ return Status;
+
+ DeviceExtension = DeviceObject->DeviceExtension;
+
+ DeviceExtension->Pdo = PhysicalDeviceObject;
+ DeviceExtension->Fdo = DeviceObject;
+ DeviceExtension->Ldo = IoAttachDeviceToDeviceStack(DeviceObject,
+ PhysicalDeviceObject);
+
+ DeviceObject->Flags |= DO_BUFFERED_IO | DO_POWER_PAGABLE;
+
+ /* We require an extra stack entry */
+ DeviceObject->StackSize = PhysicalDeviceObject->StackSize + 2;
+
+ BattInfo.MajorVersion = BATTERY_CLASS_MAJOR_VERSION;
+ BattInfo.MinorVersion = BATTERY_CLASS_MINOR_VERSION;
+ BattInfo.Context = DeviceExtension;
+ BattInfo.QueryTag = CmBattQueryTag;
+ BattInfo.QueryInformation = CmBattQueryInformation;
+ BattInfo.SetInformation = CmBattSetInformation;
+ BattInfo.QueryStatus = CmBattQueryStatus;
+ BattInfo.SetStatusNotify = CmBattSetStatusNotify;
+ BattInfo.DisableStatusNotify = CmBattDisableStatusNotify;
+ BattInfo.Pdo = PhysicalDeviceObject;
+ BattInfo.DeviceName = NULL;
+
+ Status = BatteryClassInitializeDevice(&BattInfo,
+ &DeviceExtension->BattClassHandle);
+ if (!NT_SUCCESS(Status))
+ {
+ IoDetachDevice(DeviceExtension->Ldo);
+ IoDeleteDevice(DeviceObject);
+ return Status;
+ }
+
+ ExInterlockedInsertTailList(&BatteryList,
+ &DeviceExtension->ListEntry,
+ &BatteryListLock);
+
+ DeviceObject->Flags &= ~DO_DEVICE_INITIALIZING;
+
+ DPRINT("Successfully registered battery with battc (0x%x)\n", DeviceExtension->BattClassHandle);
+
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+NTAPI
+DriverEntry(PDRIVER_OBJECT DriverObject,
+ PUNICODE_STRING RegistryPath)
+{
+ DPRINT("Control method battery miniclass driver initialized\n");
+
+ DriverObject->DriverUnload = CmBattUnload;
+ DriverObject->DriverExtension->AddDevice = CmBattAddDevice;
+ DriverObject->MajorFunction[IRP_MJ_POWER] = CmBattPower;
+ DriverObject->MajorFunction[IRP_MJ_PNP] = CmBattPnP;
+ DriverObject->MajorFunction[IRP_MJ_CREATE] = CmBattCreateClose;
+ DriverObject->MajorFunction[IRP_MJ_CLOSE] = CmBattCreateClose;
+ DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = CmBattDeviceControl;
+ DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = CmBattSystemControl;
+
+ KeInitializeSpinLock(&BatteryListLock);
+ InitializeListHead(&BatteryList);
+
+ return STATUS_SUCCESS;
+}
diff --git a/reactos/drivers/battery/cmbatt/cmbatt.h b/reactos/drivers/battery/cmbatt/cmbatt.h
new file mode 100644
index 00000000000..e70b561d3df
--- /dev/null
+++ b/reactos/drivers/battery/cmbatt/cmbatt.h
@@ -0,0 +1,58 @@
+/*
+* PROJECT: ReactOS Kernel
+* LICENSE: GPL - See COPYING in the top level directory
+* FILE: drivers/battery/cmbatt/cmbatt.h
+* PURPOSE: Control Method Battery Miniclass Driver
+* PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org)
+*/
+
+#pragma once
+
+#include
+#include
+
+typedef struct _CMBATT_DEVICE_EXTENSION {
+ PDEVICE_OBJECT Pdo;
+ PDEVICE_OBJECT Ldo;
+ PDEVICE_OBJECT Fdo;
+ PVOID BattClassHandle;
+ LIST_ENTRY ListEntry;
+} CMBATT_DEVICE_EXTENSION, *PCMBATT_DEVICE_EXTENSION;
+
+NTSTATUS
+NTAPI
+CmBattQueryTag(PVOID Context,
+ PULONG BatteryTag);
+
+NTSTATUS
+NTAPI
+CmBattDisableStatusNotify(PVOID Context);
+
+NTSTATUS
+NTAPI
+CmBattSetStatusNotify(PVOID Context,
+ ULONG BatteryTag,
+ PBATTERY_NOTIFY BatteryNotify);
+
+NTSTATUS
+NTAPI
+CmBattQueryInformation(PVOID Context,
+ ULONG BatteryTag,
+ BATTERY_QUERY_INFORMATION_LEVEL Level,
+ OPTIONAL LONG AtRate,
+ PVOID Buffer,
+ ULONG BufferLength,
+ PULONG ReturnedLength);
+
+NTSTATUS
+NTAPI
+CmBattQueryStatus(PVOID Context,
+ ULONG BatteryTag,
+ PBATTERY_STATUS BatteryStatus);
+
+NTSTATUS
+NTAPI
+CmBattSetInformation(PVOID Context,
+ ULONG BatteryTag,
+ BATTERY_SET_INFORMATION_LEVEL Level,
+ OPTIONAL PVOID Buffer);
diff --git a/reactos/drivers/battery/cmbatt/cmbatt.rbuild b/reactos/drivers/battery/cmbatt/cmbatt.rbuild
new file mode 100644
index 00000000000..c41a072779c
--- /dev/null
+++ b/reactos/drivers/battery/cmbatt/cmbatt.rbuild
@@ -0,0 +1,11 @@
+
+
+
+ ntoskrnl
+ hal
+ battc
+ .
+ cmbatt.c
+ miniclass.c
+ cmbatt.rc
+
diff --git a/reactos/drivers/battery/cmbatt/cmbatt.rc b/reactos/drivers/battery/cmbatt/cmbatt.rc
new file mode 100644
index 00000000000..2fd6bc7713c
--- /dev/null
+++ b/reactos/drivers/battery/cmbatt/cmbatt.rc
@@ -0,0 +1,5 @@
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION "Control Method Battery Miniclass Driver\0"
+#define REACTOS_STR_INTERNAL_NAME "cmbatt\0"
+#define REACTOS_STR_ORIGINAL_FILENAME "cmbatt.sys\0"
+#include
diff --git a/reactos/drivers/battery/cmbatt/miniclass.c b/reactos/drivers/battery/cmbatt/miniclass.c
new file mode 100644
index 00000000000..bb75d9aa319
--- /dev/null
+++ b/reactos/drivers/battery/cmbatt/miniclass.c
@@ -0,0 +1,82 @@
+/*
+ * PROJECT: ReactOS Kernel
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: drivers/battery/cmbatt/miniclass.c
+ * PURPOSE: Control Method Battery Miniclass Driver
+ * PROGRAMMERS: Cameron Gutman (cameron.gutman@reactos.org)
+ */
+
+#include
+
+#define NDEBUG
+#include
+
+NTSTATUS
+NTAPI
+CmBattQueryTag(PVOID Context,
+ PULONG BatteryTag)
+{
+ UNIMPLEMENTED
+
+ *BatteryTag = 0;
+
+ return STATUS_SUCCESS;
+}
+
+NTSTATUS
+NTAPI
+CmBattDisableStatusNotify(PVOID Context)
+{
+ UNIMPLEMENTED
+
+ return STATUS_NOT_SUPPORTED;
+}
+
+NTSTATUS
+NTAPI
+CmBattSetStatusNotify(PVOID Context,
+ ULONG BatteryTag,
+ PBATTERY_NOTIFY BatteryNotify)
+{
+ UNIMPLEMENTED
+
+ return STATUS_NOT_SUPPORTED;
+}
+
+NTSTATUS
+NTAPI
+CmBattQueryInformation(PVOID Context,
+ ULONG BatteryTag,
+ BATTERY_QUERY_INFORMATION_LEVEL Level,
+ OPTIONAL LONG AtRate,
+ PVOID Buffer,
+ ULONG BufferLength,
+ PULONG ReturnedLength)
+{
+ UNIMPLEMENTED
+
+ return STATUS_NOT_SUPPORTED;
+}
+
+NTSTATUS
+NTAPI
+CmBattQueryStatus(PVOID Context,
+ ULONG BatteryTag,
+ PBATTERY_STATUS BatteryStatus)
+{
+ UNIMPLEMENTED
+
+ return STATUS_NOT_SUPPORTED;
+}
+
+NTSTATUS
+NTAPI
+CmBattSetInformation(PVOID Context,
+ ULONG BatteryTag,
+ BATTERY_SET_INFORMATION_LEVEL Level,
+ OPTIONAL PVOID Buffer)
+{
+ UNIMPLEMENTED
+
+ return STATUS_NOT_SUPPORTED;
+}
diff --git a/reactos/drivers/battery/directory.rbuild b/reactos/drivers/battery/directory.rbuild
new file mode 100644
index 00000000000..2da9fe08c92
--- /dev/null
+++ b/reactos/drivers/battery/directory.rbuild
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/reactos/drivers/bus/acpi/acpi.rbuild b/reactos/drivers/bus/acpi/acpi.rbuild
deleted file mode 100644
index 94b960a9b6f..00000000000
--- a/reactos/drivers/bus/acpi/acpi.rbuild
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
- include
- ospm/include
- ntoskrnl
- hal
-
- dsfield.c
- dsmethod.c
- dsmthdat.c
- dsobject.c
- dsopcode.c
- dsutils.c
- dswexec.c
- dswload.c
- dswscope.c
- dswstate.c
-
-
- evevent.c
- evmisc.c
- evregion.c
- evrgnini.c
- evsci.c
- evxface.c
- evxfevnt.c
- evxfregn.c
-
-
- amconfig.c
- amconvrt.c
- amcreate.c
- amdump.c
- amdyadic.c
- amfield.c
- amfldio.c
- ammisc.c
- ammonad.c
- ammutex.c
- amnames.c
- amprep.c
- amregion.c
- amresnte.c
- amresolv.c
- amresop.c
- amstore.c
- amstoren.c
- amstorob.c
- amsystem.c
- amutils.c
- amxface.c
-
-
- hwacpi.c
- hwgpe.c
- hwregs.c
- hwsleep.c
- hwtimer.c
-
-
- nsaccess.c
- nsalloc.c
- nseval.c
- nsinit.c
- nsload.c
- nsnames.c
- nsobject.c
- nssearch.c
- nsutils.c
- nswalk.c
- nsxfname.c
- nsxfobj.c
-
-
-
- bm.c
- bmnotify.c
- bmpm.c
- bmpower.c
- bmrequest.c
- bmsearch.c
- bmutils.c
- bmxface.c
-
- acpienum.c
- acpisys.c
- bn.c
- fdo.c
- osl.c
- pdo.c
-
-
- psargs.c
- psopcode.c
- psparse.c
- psscope.c
- pstree.c
- psutils.c
- pswalk.c
- psxface.c
-
-
- rsaddr.c
- rscalc.c
- rscreate.c
- rsdump.c
- rsio.c
- rsirq.c
- rslist.c
- rsmemory.c
- rsmisc.c
- rsutils.c
- rsxface.c
-
-
- tbconvrt.c
- tbget.c
- tbinstal.c
- tbutils.c
- tbxface.c
- tbxfroot.c
-
-
- cmalloc.c
- cmclib.c
- cmcopy.c
- cmdebug.c
- cmdelete.c
- cmeval.c
- cmglobal.c
- cminit.c
- cmobject.c
- cmutils.c
- cmxface.c
-
- acpi.rc
-
- acpi.h
-
-
diff --git a/reactos/drivers/bus/acpi/acpi.rc b/reactos/drivers/bus/acpi/acpi.rc
deleted file mode 100644
index 41b00065cb0..00000000000
--- a/reactos/drivers/bus/acpi/acpi.rc
+++ /dev/null
@@ -1,7 +0,0 @@
-/* $Id$ */
-
-#define REACTOS_VERSION_DLL
-#define REACTOS_STR_FILE_DESCRIPTION "ReactOS ACPI Driver\0"
-#define REACTOS_STR_INTERNAL_NAME "acpi\0"
-#define REACTOS_STR_ORIGINAL_FILENAME "acpi.sys\0"
-#include
diff --git a/reactos/drivers/bus/acpi/changed.txt b/reactos/drivers/bus/acpi/changed.txt
deleted file mode 100644
index 571775163fd..00000000000
--- a/reactos/drivers/bus/acpi/changed.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-Changes to ACPI CA
-------------------
-
-+ = Added
-- = Removed
-* = Altered
-
-+ include/platform/acwin.h
-+ include/platform/types.h
-- ospm/ac_adapter/*
-- ospm/battery/*
-- ospm/button/*
-- ospm/ec/*
-- ospm/include/* (except bm.h)
-- ospm/processor/*
-- ospm/system/*
-- ospm/thermal/*
-- ospm/busmgr/bm_module.c
-- ospm/busmgr/bm_proc.c
-- ospm/busmgr/bm_symbols.c
-- ospm/busmgr/Makefile
diff --git a/reactos/drivers/bus/acpi/dispatcher/dsfield.c b/reactos/drivers/bus/acpi/dispatcher/dsfield.c
deleted file mode 100644
index 191a9e92cfe..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dsfield.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/******************************************************************************
- *
- * Module Name: dsfield - Dispatcher field routines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dsfield")
-
-
-/*
- * Field flags: Bits 00 - 03 : Access_type (Any_acc, Byte_acc, etc.)
- * 04 : Lock_rule (1 == Lock)
- * 05 - 06 : Update_rule
- */
-
-#define FIELD_ACCESS_TYPE_MASK 0x0F
-#define FIELD_LOCK_RULE_MASK 0x10
-#define FIELD_UPDATE_RULE_MASK 0x60
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_create_field
- *
- * PARAMETERS: Op - Op containing the Field definition and args
- * Region_node - Object for the containing Operation Region
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new field in the specified operation region
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_create_field (
- ACPI_PARSE_OBJECT *op,
- ACPI_NAMESPACE_NODE *region_node,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_AML_ERROR;
- ACPI_PARSE_OBJECT *arg;
- ACPI_NAMESPACE_NODE *node;
- u8 field_flags;
- u8 access_attribute = 0;
- u32 field_bit_position = 0;
-
-
- /* First arg is the name of the parent Op_region */
-
- arg = op->value.arg;
- if (!region_node) {
- status = acpi_ns_lookup (walk_state->scope_info, arg->value.name,
- ACPI_TYPE_REGION, IMODE_EXECUTE,
- NS_SEARCH_PARENT, walk_state,
- ®ion_node);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- /* Second arg is the field flags */
-
- arg = arg->next;
- field_flags = (u8) arg->value.integer;
-
- /* Each remaining arg is a Named Field */
-
- arg = arg->next;
- while (arg) {
- switch (arg->opcode) {
- case AML_RESERVEDFIELD_OP:
-
- field_bit_position += arg->value.size;
- break;
-
-
- case AML_ACCESSFIELD_OP:
-
- /*
- * Get a new Access_type and Access_attribute for all
- * entries (until end or another Access_as keyword)
- */
-
- access_attribute = (u8) arg->value.integer;
- field_flags = (u8)
- ((field_flags & FIELD_ACCESS_TYPE_MASK) ||
- ((u8) (arg->value.integer >> 8)));
- break;
-
-
- case AML_NAMEDFIELD_OP:
-
- status = acpi_ns_lookup (walk_state->scope_info,
- (NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)arg)->name,
- INTERNAL_TYPE_DEF_FIELD,
- IMODE_LOAD_PASS1,
- NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
- NULL, &node);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * Initialize an object for the new Node that is on
- * the object stack
- */
-
- status = acpi_aml_prep_def_field_value (node, region_node, field_flags,
- access_attribute, field_bit_position, arg->value.size);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Keep track of bit position for *next* field */
-
- field_bit_position += arg->value.size;
- break;
- }
-
- arg = arg->next;
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_create_bank_field
- *
- * PARAMETERS: Op - Op containing the Field definition and args
- * Region_node - Object for the containing Operation Region
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new bank field in the specified operation region
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_create_bank_field (
- ACPI_PARSE_OBJECT *op,
- ACPI_NAMESPACE_NODE *region_node,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_AML_ERROR;
- ACPI_PARSE_OBJECT *arg;
- ACPI_NAMESPACE_NODE *register_node;
- ACPI_NAMESPACE_NODE *node;
- u32 bank_value;
- u8 field_flags;
- u8 access_attribute = 0;
- u32 field_bit_position = 0;
-
-
- /* First arg is the name of the parent Op_region */
-
- arg = op->value.arg;
- if (!region_node) {
- status = acpi_ns_lookup (walk_state->scope_info, arg->value.name,
- ACPI_TYPE_REGION, IMODE_EXECUTE,
- NS_SEARCH_PARENT, walk_state,
- ®ion_node);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- /* Second arg is the Bank Register */
-
- arg = arg->next;
-
- status = acpi_ns_lookup (walk_state->scope_info, arg->value.string,
- INTERNAL_TYPE_BANK_FIELD_DEFN,
- IMODE_LOAD_PASS1,
- NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
- NULL, ®ister_node);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Third arg is the Bank_value */
-
- arg = arg->next;
- bank_value = arg->value.integer;
-
-
- /* Next arg is the field flags */
-
- arg = arg->next;
- field_flags = (u8) arg->value.integer;
-
- /* Each remaining arg is a Named Field */
-
- arg = arg->next;
- while (arg) {
- switch (arg->opcode) {
- case AML_RESERVEDFIELD_OP:
-
- field_bit_position += arg->value.size;
- break;
-
-
- case AML_ACCESSFIELD_OP:
-
- /*
- * Get a new Access_type and Access_attribute for
- * all entries (until end or another Access_as keyword)
- */
-
- access_attribute = (u8) arg->value.integer;
- field_flags = (u8)
- ((field_flags & FIELD_ACCESS_TYPE_MASK) ||
- ((u8) (arg->value.integer >> 8)));
- break;
-
-
- case AML_NAMEDFIELD_OP:
-
- status = acpi_ns_lookup (walk_state->scope_info,
- (NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)arg)->name,
- INTERNAL_TYPE_DEF_FIELD,
- IMODE_LOAD_PASS1,
- NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
- NULL, &node);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * Initialize an object for the new Node that is on
- * the object stack
- */
-
- status = acpi_aml_prep_bank_field_value (node, region_node, register_node,
- bank_value, field_flags, access_attribute,
- field_bit_position, arg->value.size);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Keep track of bit position for the *next* field */
-
- field_bit_position += arg->value.size;
- break;
-
- }
-
- arg = arg->next;
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_create_index_field
- *
- * PARAMETERS: Op - Op containing the Field definition and args
- * Region_node - Object for the containing Operation Region
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new index field in the specified operation region
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_create_index_field (
- ACPI_PARSE_OBJECT *op,
- ACPI_HANDLE region_node,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_PARSE_OBJECT *arg;
- ACPI_NAMESPACE_NODE *node;
- ACPI_NAMESPACE_NODE *index_register_node;
- ACPI_NAMESPACE_NODE *data_register_node;
- u8 field_flags;
- u8 access_attribute = 0;
- u32 field_bit_position = 0;
-
-
- arg = op->value.arg;
-
- /* First arg is the name of the Index register */
-
- status = acpi_ns_lookup (walk_state->scope_info, arg->value.string,
- ACPI_TYPE_ANY, IMODE_LOAD_PASS1,
- NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
- NULL, &index_register_node);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Second arg is the data register */
-
- arg = arg->next;
-
- status = acpi_ns_lookup (walk_state->scope_info, arg->value.string,
- INTERNAL_TYPE_INDEX_FIELD_DEFN,
- IMODE_LOAD_PASS1,
- NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
- NULL, &data_register_node);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /* Next arg is the field flags */
-
- arg = arg->next;
- field_flags = (u8) arg->value.integer;
-
-
- /* Each remaining arg is a Named Field */
-
- arg = arg->next;
- while (arg) {
- switch (arg->opcode) {
- case AML_RESERVEDFIELD_OP:
-
- field_bit_position += arg->value.size;
- break;
-
-
- case AML_ACCESSFIELD_OP:
-
- /*
- * Get a new Access_type and Access_attribute for all
- * entries (until end or another Access_as keyword)
- */
-
- access_attribute = (u8) arg->value.integer;
- field_flags = (u8)
- ((field_flags & FIELD_ACCESS_TYPE_MASK) ||
- ((u8) (arg->value.integer >> 8)));
- break;
-
-
- case AML_NAMEDFIELD_OP:
-
- status = acpi_ns_lookup (walk_state->scope_info,
- (NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)arg)->name,
- INTERNAL_TYPE_INDEX_FIELD,
- IMODE_LOAD_PASS1,
- NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
- NULL, &node);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * Initialize an object for the new Node that is on
- * the object stack
- */
-
- status = acpi_aml_prep_index_field_value (node, index_register_node, data_register_node,
- field_flags, access_attribute,
- field_bit_position, arg->value.size);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Keep track of bit position for the *next* field */
-
- field_bit_position += arg->value.size;
- break;
-
-
- default:
-
- status = AE_AML_ERROR;
- break;
- }
-
- arg = arg->next;
- }
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dsmethod.c b/reactos/drivers/bus/acpi/dispatcher/dsmethod.c
deleted file mode 100644
index 70b2349ae68..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dsmethod.c
+++ /dev/null
@@ -1,489 +0,0 @@
-/******************************************************************************
- *
- * Module Name: dsmethod - Parser/Interpreter interface - control method parsing
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dsmethod")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_parse_method
- *
- * PARAMETERS: Obj_handle - Node of the method
- * Level - Current nesting level
- * Context - Points to a method counter
- * Return_value - Not used
- *
- * RETURN: Status
- *
- * DESCRIPTION: Call the parser and parse the AML that is
- * associated with the method.
- *
- * MUTEX: Assumes parser is locked
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_parse_method (
- ACPI_HANDLE obj_handle)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_PARSE_OBJECT *op;
- ACPI_NAMESPACE_NODE *node;
- ACPI_OWNER_ID owner_id;
-
-
- /* Parameter Validation */
-
- if (!obj_handle) {
- return (AE_NULL_ENTRY);
- }
-
-
- /* Extract the method object from the method Node */
-
- node = (ACPI_NAMESPACE_NODE *) obj_handle;
- obj_desc = node->object;
- if (!obj_desc) {
- return (AE_NULL_OBJECT);
- }
-
- /* Create a mutex for the method if there is a concurrency limit */
-
- if ((obj_desc->method.concurrency != INFINITE_CONCURRENCY) &&
- (!obj_desc->method.semaphore)) {
- status = acpi_os_create_semaphore (obj_desc->method.concurrency,
- obj_desc->method.concurrency,
- &obj_desc->method.semaphore);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- /*
- * Allocate a new parser op to be the root of the parsed
- * method tree
- */
- op = acpi_ps_alloc_op (AML_METHOD_OP);
- if (!op) {
- return (AE_NO_MEMORY);
- }
-
- /* Init new op with the method name and pointer back to the Node */
-
- acpi_ps_set_name (op, node->name);
- op->node = node;
-
-
- /*
- * Parse the method, first pass
- *
- * The first pass load is
- * where newly declared named objects are
- * added into the namespace. Actual evaluation of
- * the named objects (what would be called a "second
- * pass") happens during the actual execution of the
- * method so that operands to the named objects can
- * take on dynamic run-time values.
- */
- status = acpi_ps_parse_aml (op, obj_desc->method.pcode,
- obj_desc->method.pcode_length,
- ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE,
- node, NULL, NULL,
- acpi_ds_load1_begin_op, acpi_ds_load1_end_op);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Get a new Owner_id for objects created by this method */
-
- owner_id = acpi_cm_allocate_owner_id (OWNER_TYPE_METHOD);
- obj_desc->method.owning_id = owner_id;
-
- /* Install the parsed tree in the method object */
- /* TBD: [Restructure] Obsolete field? */
-
- acpi_ps_delete_parse_tree (op);
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_begin_method_execution
- *
- * PARAMETERS: Method_node - Node of the method
- * Obj_desc - The method object
- * Calling_method_node - Caller of this method (if non-null)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Prepare a method for execution. Parses the method if necessary,
- * increments the thread count, and waits at the method semaphore
- * for clearance to execute.
- *
- * MUTEX: Locks/unlocks parser.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_begin_method_execution (
- ACPI_NAMESPACE_NODE *method_node,
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_NAMESPACE_NODE *calling_method_node)
-{
- ACPI_STATUS status = AE_OK;
-
-
- if (!method_node) {
- return (AE_NULL_ENTRY);
- }
-
-
- /*
- * If there is a concurrency limit on this method, we need to
- * obtain a unit from the method semaphore.
- */
- if (obj_desc->method.semaphore) {
- /*
- * Allow recursive method calls, up to the reentrancy/concurrency
- * limit imposed by the SERIALIZED rule and the Sync_level method
- * parameter.
- *
- * The point of this code is to avoid permanently blocking a
- * thread that is making recursive method calls.
- */
- if (method_node == calling_method_node) {
- if (obj_desc->method.thread_count >= obj_desc->method.concurrency) {
- return (AE_AML_METHOD_LIMIT);
- }
- }
-
- /*
- * Get a unit from the method semaphore. This releases the
- * interpreter if we block
- */
- status = acpi_aml_system_wait_semaphore (obj_desc->method.semaphore,
- WAIT_FOREVER);
- }
-
-
- /*
- * Increment the method parse tree thread count since it has been
- * reentered one more time (even if it is the same thread)
- */
- obj_desc->method.thread_count++;
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_call_control_method
- *
- * PARAMETERS: Walk_state - Current state of the walk
- * Op - Current Op to be walked
- *
- * RETURN: Status
- *
- * DESCRIPTION: Transfer execution to a called control method
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_call_control_method (
- ACPI_WALK_LIST *walk_list,
- ACPI_WALK_STATE *this_walk_state,
- ACPI_PARSE_OBJECT *op)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *method_node;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_WALK_STATE *next_walk_state;
- ACPI_PARSE_STATE *parser_state;
- u32 i;
-
-
- /*
- * Get the namespace entry for the control method we are about to call
- */
- method_node = this_walk_state->method_call_node;
- if (!method_node) {
- return (AE_NULL_ENTRY);
- }
-
- obj_desc = acpi_ns_get_attached_object (method_node);
- if (!obj_desc) {
- return (AE_NULL_OBJECT);
- }
-
-
- /* Init for new method, wait on concurrency semaphore */
-
- status = acpi_ds_begin_method_execution (method_node, obj_desc,
- this_walk_state->method_node);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Create and initialize a new parser state */
-
- parser_state = acpi_ps_create_state (obj_desc->method.pcode,
- obj_desc->method.pcode_length);
- if (!parser_state) {
- return (AE_NO_MEMORY);
- }
-
- acpi_ps_init_scope (parser_state, NULL);
- parser_state->start_node = method_node;
-
-
- /* Create a new state for the preempting walk */
-
- next_walk_state = acpi_ds_create_walk_state (obj_desc->method.owning_id,
- NULL, obj_desc, walk_list);
- if (!next_walk_state) {
- /* TBD: delete parser state */
-
- return (AE_NO_MEMORY);
- }
-
- next_walk_state->walk_type = WALK_METHOD;
- next_walk_state->method_node = method_node;
- next_walk_state->parser_state = parser_state;
- next_walk_state->parse_flags = this_walk_state->parse_flags;
- next_walk_state->descending_callback = this_walk_state->descending_callback;
- next_walk_state->ascending_callback = this_walk_state->ascending_callback;
-
- /* The Next_op of the Next_walk will be the beginning of the method */
- /* TBD: [Restructure] -- obsolete? */
-
- next_walk_state->next_op = NULL;
-
- /* Open a new scope */
-
- status = acpi_ds_scope_stack_push (method_node,
- ACPI_TYPE_METHOD, next_walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /*
- * Initialize the arguments for the method. The resolved
- * arguments were put on the previous walk state's operand
- * stack. Operands on the previous walk state stack always
- * start at index 0.
- */
- status = acpi_ds_method_data_init_args (&this_walk_state->operands[0],
- this_walk_state->num_operands,
- next_walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /* Create and init a Root Node */
-
- op = acpi_ps_alloc_op (AML_SCOPE_OP);
- if (!op) {
- return (AE_NO_MEMORY);
- }
-
- status = acpi_ps_parse_aml (op, obj_desc->method.pcode,
- obj_desc->method.pcode_length,
- ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE,
- method_node, NULL, NULL,
- acpi_ds_load1_begin_op, acpi_ds_load1_end_op);
- acpi_ps_delete_parse_tree (op);
-
-
- /*
- * Delete the operands on the previous walkstate operand stack
- * (they were copied to new objects)
- */
- for (i = 0; i < obj_desc->method.param_count; i++) {
- acpi_cm_remove_reference (this_walk_state->operands [i]);
- this_walk_state->operands [i] = NULL;
- }
-
- /* Clear the operand stack */
-
- this_walk_state->num_operands = 0;
-
-
- return (AE_OK);
-
-
- /* On error, we must delete the new walk state */
-
-cleanup:
- acpi_ds_terminate_control_method (next_walk_state);
- acpi_ds_delete_walk_state (next_walk_state);
- return (status);
-
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_restart_control_method
- *
- * PARAMETERS: Walk_state - State of the method when it was preempted
- * Op - Pointer to new current op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Restart a method that was preempted
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_restart_control_method (
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT *return_desc)
-{
- ACPI_STATUS status;
-
-
- if (return_desc) {
- if (walk_state->return_used) {
- /*
- * Get the return value (if any) from the previous method.
- * NULL if no return value
- */
- status = acpi_ds_result_push (return_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (return_desc);
- return (status);
- }
- }
-
- else {
- /*
- * Delete the return value if it will not be used by the
- * calling method
- */
- acpi_cm_remove_reference (return_desc);
- }
-
- }
-
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_terminate_control_method
- *
- * PARAMETERS: Walk_state - State of the method
- *
- * RETURN: Status
- *
- * DESCRIPTION: Terminate a control method. Delete everything that the method
- * created, delete all locals and arguments, and delete the parse
- * tree if requested.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_terminate_control_method (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_NAMESPACE_NODE *method_node;
-
-
- /* The method object should be stored in the walk state */
-
- obj_desc = walk_state->method_desc;
- if (!obj_desc) {
- return (AE_OK);
- }
-
- /* Delete all arguments and locals */
-
- acpi_ds_method_data_delete_all (walk_state);
-
- /*
- * Lock the parser while we terminate this method.
- * If this is the last thread executing the method,
- * we have additional cleanup to perform
- */
- acpi_cm_acquire_mutex (ACPI_MTX_PARSER);
-
-
- /* Signal completion of the execution of this method if necessary */
-
- if (walk_state->method_desc->method.semaphore) {
- status = acpi_os_signal_semaphore (
- walk_state->method_desc->method.semaphore, 1);
- }
-
- /* Decrement the thread count on the method parse tree */
-
- walk_state->method_desc->method.thread_count--;
- if (!walk_state->method_desc->method.thread_count) {
- /*
- * There are no more threads executing this method. Perform
- * additional cleanup.
- *
- * The method Node is stored in the walk state
- */
- method_node = walk_state->method_node;
-
- /*
- * Delete any namespace entries created immediately underneath
- * the method
- */
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
- if (method_node->child) {
- acpi_ns_delete_namespace_subtree (method_node);
- }
-
- /*
- * Delete any namespace entries created anywhere else within
- * the namespace
- */
- acpi_ns_delete_namespace_by_owner (walk_state->method_desc->method.owning_id);
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- }
-
- acpi_cm_release_mutex (ACPI_MTX_PARSER);
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dsmthdat.c b/reactos/drivers/bus/acpi/dispatcher/dsmthdat.c
deleted file mode 100644
index f51304017c5..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dsmthdat.c
+++ /dev/null
@@ -1,687 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: dsmthdat - control method arguments and local variables
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dsmthdat")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_init
- *
- * PARAMETERS: Walk_state - Current walk state object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initialize the data structures that hold the method's arguments
- * and locals. The data struct is an array of NTEs for each.
- * This allows Ref_of and De_ref_of to work properly for these
- * special data types.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_method_data_init (
- ACPI_WALK_STATE *walk_state)
-{
- u32 i;
-
-
- /*
- * Walk_state fields are initialized to zero by the
- * Acpi_cm_callocate().
- *
- * An Node is assigned to each argument and local so
- * that Ref_of() can return a pointer to the Node.
- */
-
- /* Init the method arguments */
-
- for (i = 0; i < MTH_NUM_ARGS; i++) {
- MOVE_UNALIGNED32_TO_32 (&walk_state->arguments[i].name,
- NAMEOF_ARG_NTE);
- walk_state->arguments[i].name |= (i << 24);
- walk_state->arguments[i].data_type = ACPI_DESC_TYPE_NAMED;
- walk_state->arguments[i].type = ACPI_TYPE_ANY;
- walk_state->arguments[i].flags = ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_ARG;
- }
-
- /* Init the method locals */
-
- for (i = 0; i < MTH_NUM_LOCALS; i++) {
- MOVE_UNALIGNED32_TO_32 (&walk_state->local_variables[i].name,
- NAMEOF_LOCAL_NTE);
-
- walk_state->local_variables[i].name |= (i << 24);
- walk_state->local_variables[i].data_type = ACPI_DESC_TYPE_NAMED;
- walk_state->local_variables[i].type = ACPI_TYPE_ANY;
- walk_state->local_variables[i].flags = ANOBJ_END_OF_PEER_LIST | ANOBJ_METHOD_LOCAL;
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_delete_all
- *
- * PARAMETERS: Walk_state - Current walk state object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Delete method locals and arguments. Arguments are only
- * deleted if this method was called from another method.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_method_data_delete_all (
- ACPI_WALK_STATE *walk_state)
-{
- u32 index;
- ACPI_OPERAND_OBJECT *object;
-
-
- /* Delete the locals */
-
- for (index = 0; index < MTH_NUM_LOCALS; index++) {
- object = walk_state->local_variables[index].object;
- if (object) {
- /* Remove first */
-
- walk_state->local_variables[index].object = NULL;
-
- /* Was given a ref when stored */
-
- acpi_cm_remove_reference (object);
- }
- }
-
-
- /* Delete the arguments */
-
- for (index = 0; index < MTH_NUM_ARGS; index++) {
- object = walk_state->arguments[index].object;
- if (object) {
- /* Remove first */
-
- walk_state->arguments[index].object = NULL;
-
- /* Was given a ref when stored */
-
- acpi_cm_remove_reference (object);
- }
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_init_args
- *
- * PARAMETERS: *Params - Pointer to a parameter list for the method
- * Max_param_count - The arg count for this method
- * Walk_state - Current walk state object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initialize arguments for a method
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_method_data_init_args (
- ACPI_OPERAND_OBJECT **params,
- u32 max_param_count,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- u32 mindex;
- u32 pindex;
-
-
- if (!params) {
- return (AE_OK);
- }
-
- /* Copy passed parameters into the new method stack frame */
-
- for (pindex = mindex = 0;
- (mindex < MTH_NUM_ARGS) && (pindex < max_param_count);
- mindex++) {
- if (params[pindex]) {
- /*
- * A valid parameter.
- * Set the current method argument to the
- * Params[Pindex++] argument object descriptor
- */
- status = acpi_ds_store_object_to_local (AML_ARG_OP, mindex,
- params[pindex], walk_state);
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- pindex++;
- }
-
- else {
- break;
- }
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_get_entry
- *
- * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
- * Index - Which local_var or argument to get
- * Entry - Pointer to where a pointer to the stack
- * entry is returned.
- * Walk_state - Current walk state object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Get the address of the object entry given by Opcode:Index
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_method_data_get_entry (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT ***entry)
-{
-
-
- /*
- * Get the requested object.
- * The stack "Opcode" is either a Local_variable or an Argument
- */
-
- switch (opcode) {
-
- case AML_LOCAL_OP:
-
- if (index > MTH_MAX_LOCAL) {
- return (AE_BAD_PARAMETER);
- }
-
- *entry = (ACPI_OPERAND_OBJECT **)
- &walk_state->local_variables[index].object;
- break;
-
-
- case AML_ARG_OP:
-
- if (index > MTH_MAX_ARG) {
- return (AE_BAD_PARAMETER);
- }
-
- *entry = (ACPI_OPERAND_OBJECT **)
- &walk_state->arguments[index].object;
- break;
-
-
- default:
- return (AE_BAD_PARAMETER);
- }
-
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_set_entry
- *
- * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
- * Index - Which local_var or argument to get
- * Object - Object to be inserted into the stack entry
- * Walk_state - Current walk state object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Insert an object onto the method stack at entry Opcode:Index.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_method_data_set_entry (
- u16 opcode,
- u32 index,
- ACPI_OPERAND_OBJECT *object,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT **entry;
-
-
- /* Get a pointer to the stack entry to set */
-
- status = acpi_ds_method_data_get_entry (opcode, index, walk_state, &entry);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Increment ref count so object can't be deleted while installed */
-
- acpi_cm_add_reference (object);
-
- /* Install the object into the stack entry */
-
- *entry = object;
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_get_type
- *
- * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
- * Index - Which local_var or argument whose type
- * to get
- * Walk_state - Current walk state object
- *
- * RETURN: Data type of selected Arg or Local
- * Used only in Exec_monadic2()/Type_op.
- *
- ******************************************************************************/
-
-OBJECT_TYPE_INTERNAL
-acpi_ds_method_data_get_type (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT **entry;
- ACPI_OPERAND_OBJECT *object;
-
-
- /* Get a pointer to the requested stack entry */
-
- status = acpi_ds_method_data_get_entry (opcode, index, walk_state, &entry);
- if (ACPI_FAILURE (status)) {
- return ((ACPI_TYPE_NOT_FOUND));
- }
-
- /* Get the object from the method stack */
-
- object = *entry;
-
- /* Get the object type */
-
- if (!object) {
- /* Any == 0 => "uninitialized" -- see spec 15.2.3.5.2.28 */
- return (ACPI_TYPE_ANY);
- }
-
- return (object->common.type);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_get_node
- *
- * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
- * Index - Which local_var or argument whose type
- * to get
- * Walk_state - Current walk state object
- *
- * RETURN: Get the Node associated with a local or arg.
- *
- ******************************************************************************/
-
-ACPI_NAMESPACE_NODE *
-acpi_ds_method_data_get_node (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_NAMESPACE_NODE *node = NULL;
-
-
- switch (opcode) {
-
- case AML_LOCAL_OP:
-
- if (index > MTH_MAX_LOCAL) {
- return (node);
- }
-
- node = &walk_state->local_variables[index];
- break;
-
-
- case AML_ARG_OP:
-
- if (index > MTH_MAX_ARG) {
- return (node);
- }
-
- node = &walk_state->arguments[index];
- break;
-
-
- default:
- break;
- }
-
-
- return (node);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_get_value
- *
- * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
- * Index - Which local_var or argument to get
- * Walk_state - Current walk state object
- * *Dest_desc - Ptr to Descriptor into which selected Arg
- * or Local value should be copied
- *
- * RETURN: Status
- *
- * DESCRIPTION: Retrieve value of selected Arg or Local from the method frame
- * at the current top of the method stack.
- * Used only in Acpi_aml_resolve_to_value().
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_method_data_get_value (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **dest_desc)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT **entry;
- ACPI_OPERAND_OBJECT *object;
-
-
- /* Validate the object descriptor */
-
- if (!dest_desc) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* Get a pointer to the requested method stack entry */
-
- status = acpi_ds_method_data_get_entry (opcode, index, walk_state, &entry);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Get the object from the method stack */
-
- object = *entry;
-
-
- /* Examine the returned object, it must be valid. */
-
- if (!object) {
- /*
- * Index points to uninitialized object stack value.
- * This means that either 1) The expected argument was
- * not passed to the method, or 2) A local variable
- * was referenced by the method (via the ASL)
- * before it was initialized. Either case is an error.
- */
-
- switch (opcode) {
- case AML_ARG_OP:
-
- return (AE_AML_UNINITIALIZED_ARG);
- break;
-
- case AML_LOCAL_OP:
-
- return (AE_AML_UNINITIALIZED_LOCAL);
- break;
- }
- }
-
-
- /*
- * Index points to initialized and valid object stack value.
- * Return an additional reference to the object
- */
-
- *dest_desc = object;
- acpi_cm_add_reference (object);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_method_data_delete_value
- *
- * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
- * Index - Which local_var or argument to delete
- * Walk_state - Current walk state object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Delete the entry at Opcode:Index on the method stack. Inserts
- * a null into the stack slot after the object is deleted.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_method_data_delete_value (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT **entry;
- ACPI_OPERAND_OBJECT *object;
-
-
- /* Get a pointer to the requested entry */
-
- status = acpi_ds_method_data_get_entry (opcode, index, walk_state, &entry);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Get the current entry in this slot k */
-
- object = *entry;
-
- /*
- * Undefine the Arg or Local by setting its descriptor
- * pointer to NULL. Locals/Args can contain both
- * ACPI_OPERAND_OBJECTS and ACPI_NAMESPACE_NODEs
- */
- *entry = NULL;
-
-
- if ((object) &&
- (VALID_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_INTERNAL))) {
- /*
- * There is a valid object in this slot
- * Decrement the reference count by one to balance the
- * increment when the object was stored in the slot.
- */
- acpi_cm_remove_reference (object);
- }
-
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_store_object_to_local
- *
- * PARAMETERS: Opcode - Either AML_LOCAL_OP or AML_ARG_OP
- * Index - Which local_var or argument to set
- * Src_desc - Value to be stored
- * Walk_state - Current walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Store a value in an Arg or Local. The Src_desc is installed
- * as the new value for the Arg or Local and the reference count
- * for Src_desc is incremented.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_store_object_to_local (
- u16 opcode,
- u32 index,
- ACPI_OPERAND_OBJECT *src_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT **entry;
-
-
- /* Parameter validation */
-
- if (!src_desc) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* Get a pointer to the requested method stack entry */
-
- status = acpi_ds_method_data_get_entry (opcode, index, walk_state, &entry);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- if (*entry == src_desc) {
- goto cleanup;
- }
-
-
- /*
- * If there is an object already in this slot, we either
- * have to delete it, or if this is an argument and there
- * is an object reference stored there, we have to do
- * an indirect store!
- */
-
- if (*entry) {
- /*
- * Check for an indirect store if an argument
- * contains an object reference (stored as an Node).
- * We don't allow this automatic dereferencing for
- * locals, since a store to a local should overwrite
- * anything there, including an object reference.
- *
- * If both Arg0 and Local0 contain Ref_of (Local4):
- *
- * Store (1, Arg0) - Causes indirect store to local4
- * Store (1, Local0) - Stores 1 in local0, overwriting
- * the reference to local4
- * Store (1, De_refof (Local0)) - Causes indirect store to local4
- *
- * Weird, but true.
- */
-
- if ((opcode == AML_ARG_OP) &&
- (VALID_DESCRIPTOR_TYPE (*entry, ACPI_DESC_TYPE_NAMED))) {
- /* Detach an existing object from the Node */
-
- acpi_ns_detach_object ((ACPI_NAMESPACE_NODE *) *entry);
-
- /*
- * Store this object into the Node
- * (do the indirect store)
- */
- status = acpi_ns_attach_object ((ACPI_NAMESPACE_NODE *) *entry, src_desc,
- src_desc->common.type);
- return (status);
- }
-
-
-#ifdef ACPI_ENABLE_IMPLICIT_CONVERSION
- /*
- * Perform "Implicit conversion" of the new object to the type of the
- * existing object
- */
- status = acpi_aml_convert_to_target_type ((*entry)->common.type, &src_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-#endif
-
- /*
- * Delete the existing object
- * before storing the new one
- */
- acpi_ds_method_data_delete_value (opcode, index, walk_state);
- }
-
-
- /*
- * Install the Obj_stack descriptor (*Src_desc) into
- * the descriptor for the Arg or Local.
- * Install the new object in the stack entry
- * (increments the object reference count by one)
- */
- status = acpi_ds_method_data_set_entry (opcode, index, src_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /* Normal exit */
-
- return (AE_OK);
-
-
- /* Error exit */
-
-cleanup:
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dsobject.c b/reactos/drivers/bus/acpi/dispatcher/dsobject.c
deleted file mode 100644
index 29f18fa9fb9..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dsobject.c
+++ /dev/null
@@ -1,636 +0,0 @@
-/******************************************************************************
- *
- * Module Name: dsobject - Dispatcher object management routines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dsobject")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_init_one_object
- *
- * PARAMETERS: Obj_handle - Node
- * Level - Current nesting level
- * Context - Points to a init info struct
- * Return_value - Not used
- *
- * RETURN: Status
- *
- * DESCRIPTION: Callback from Acpi_walk_namespace. Invoked for every object
- * within the namespace.
- *
- * Currently, the only objects that require initialization are:
- * 1) Methods
- * 2) Op Regions
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_init_one_object (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *context,
- void **return_value)
-{
- OBJECT_TYPE_INTERNAL type;
- ACPI_STATUS status;
- ACPI_INIT_WALK_INFO *info = (ACPI_INIT_WALK_INFO *) context;
- u8 table_revision;
-
-
- info->object_count++;
- table_revision = info->table_desc->pointer->revision;
-
- /*
- * We are only interested in objects owned by the table that
- * was just loaded
- */
-
- if (((ACPI_NAMESPACE_NODE *) obj_handle)->owner_id !=
- info->table_desc->table_id) {
- return (AE_OK);
- }
-
-
- /* And even then, we are only interested in a few object types */
-
- type = acpi_ns_get_type (obj_handle);
-
- switch (type) {
-
- case ACPI_TYPE_REGION:
-
- acpi_ds_initialize_region (obj_handle);
-
- info->op_region_count++;
- break;
-
-
- case ACPI_TYPE_METHOD:
-
- info->method_count++;
-
-
- /*
- * Set the execution data width (32 or 64) based upon the
- * revision number of the parent ACPI table.
- */
-
- if (table_revision == 1) {
- ((ACPI_NAMESPACE_NODE *)obj_handle)->flags |= ANOBJ_DATA_WIDTH_32;
- }
-
- /*
- * Always parse methods to detect errors, we may delete
- * the parse tree below
- */
-
- status = acpi_ds_parse_method (obj_handle);
-
- /* TBD: [Errors] what do we do with an error? */
-
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- /*
- * Delete the parse tree. We simple re-parse the method
- * for every execution since there isn't much overhead
- */
- acpi_ns_delete_namespace_subtree (obj_handle);
- break;
-
- default:
- break;
- }
-
- /*
- * We ignore errors from above, and always return OK, since
- * we don't want to abort the walk on a single error.
- */
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_initialize_objects
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Walk the entire namespace and perform any necessary
- * initialization on the objects found therein
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_initialize_objects (
- ACPI_TABLE_DESC *table_desc,
- ACPI_NAMESPACE_NODE *start_node)
-{
- ACPI_STATUS status;
- ACPI_INIT_WALK_INFO info;
-
-
- info.method_count = 0;
- info.op_region_count = 0;
- info.object_count = 0;
- info.table_desc = table_desc;
-
-
- /* Walk entire namespace from the supplied root */
-
- status = acpi_walk_namespace (ACPI_TYPE_ANY, start_node,
- ACPI_UINT32_MAX, acpi_ds_init_one_object,
- &info, NULL);
-
- return (AE_OK);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_init_object_from_op
- *
- * PARAMETERS: Op - Parser op used to init the internal object
- * Opcode - AML opcode associated with the object
- * Obj_desc - Namespace object to be initialized
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initialize a namespace object from a parser Op and its
- * associated arguments. The namespace object is a more compact
- * representation of the Op and its arguments.
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_init_object_from_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- u16 opcode,
- ACPI_OPERAND_OBJECT **obj_desc)
-{
- ACPI_STATUS status;
- ACPI_PARSE_OBJECT *arg;
- ACPI_PARSE2_OBJECT *byte_list;
- ACPI_OPERAND_OBJECT *arg_desc;
- ACPI_OPCODE_INFO *op_info;
-
-
- op_info = acpi_ps_get_opcode_info (opcode);
- if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) {
- /* Unknown opcode */
-
- return (AE_TYPE);
- }
-
-
- /* Get and prepare the first argument */
-
- switch ((*obj_desc)->common.type) {
- case ACPI_TYPE_BUFFER:
-
- /* First arg is a number */
-
- acpi_ds_create_operand (walk_state, op->value.arg, 0);
- arg_desc = walk_state->operands [walk_state->num_operands - 1];
- acpi_ds_obj_stack_pop (1, walk_state);
-
- /* Resolve the object (could be an arg or local) */
-
- status = acpi_aml_resolve_to_value (&arg_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (arg_desc);
- return (status);
- }
-
- /* We are expecting a number */
-
- if (arg_desc->common.type != ACPI_TYPE_INTEGER) {
- acpi_cm_remove_reference (arg_desc);
- return (AE_TYPE);
- }
-
- /* Get the value, delete the internal object */
-
- (*obj_desc)->buffer.length = (u32) arg_desc->integer.value;
- acpi_cm_remove_reference (arg_desc);
-
- /* Allocate the buffer */
-
- if ((*obj_desc)->buffer.length == 0) {
- (*obj_desc)->buffer.pointer = NULL;
- REPORT_WARNING (("Buffer created with zero length in AML\n"));
- break;
- }
-
- else {
- (*obj_desc)->buffer.pointer =
- acpi_cm_callocate ((*obj_desc)->buffer.length);
-
- if (!(*obj_desc)->buffer.pointer) {
- return (AE_NO_MEMORY);
- }
- }
-
- /*
- * Second arg is the buffer data (optional)
- * Byte_list can be either individual bytes or a
- * string initializer!
- */
-
- /* skip first arg */
- arg = op->value.arg;
- byte_list = (ACPI_PARSE2_OBJECT *) arg->next;
- if (byte_list) {
- if (byte_list->opcode != AML_BYTELIST_OP) {
- return (AE_TYPE);
- }
-
- MEMCPY ((*obj_desc)->buffer.pointer, byte_list->data,
- (*obj_desc)->buffer.length);
- }
-
- break;
-
-
- case ACPI_TYPE_PACKAGE:
-
- /*
- * When called, an internal package object has already
- * been built and is pointed to by *Obj_desc.
- * Acpi_ds_build_internal_object build another internal
- * package object, so remove reference to the original
- * so that it is deleted. Error checking is done
- * within the remove reference function.
- */
- acpi_cm_remove_reference(*obj_desc);
-
- status = acpi_ds_build_internal_object (walk_state, op, obj_desc);
- break;
-
- case ACPI_TYPE_INTEGER:
- (*obj_desc)->integer.value = op->value.integer;
- break;
-
-
- case ACPI_TYPE_STRING:
- (*obj_desc)->string.pointer = op->value.string;
- (*obj_desc)->string.length = STRLEN (op->value.string);
- break;
-
-
- case ACPI_TYPE_METHOD:
- break;
-
-
- case INTERNAL_TYPE_REFERENCE:
-
- switch (ACPI_GET_OP_CLASS (op_info)) {
- case OPTYPE_LOCAL_VARIABLE:
-
- /* Split the opcode into a base opcode + offset */
-
- (*obj_desc)->reference.opcode = AML_LOCAL_OP;
- (*obj_desc)->reference.offset = opcode - AML_LOCAL_OP;
- break;
-
- case OPTYPE_METHOD_ARGUMENT:
-
- /* Split the opcode into a base opcode + offset */
-
- (*obj_desc)->reference.opcode = AML_ARG_OP;
- (*obj_desc)->reference.offset = opcode - AML_ARG_OP;
- break;
-
- default: /* Constants, Literals, etc.. */
-
- if (op->opcode == AML_NAMEPATH_OP) {
- /* Node was saved in Op */
-
- (*obj_desc)->reference.node = op->node;
- }
-
- (*obj_desc)->reference.opcode = opcode;
- break;
- }
-
- break;
-
-
- default:
-
- break;
- }
-
- return (AE_OK);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_build_internal_simple_obj
- *
- * PARAMETERS: Op - Parser object to be translated
- * Obj_desc_ptr - Where the ACPI internal object is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Translate a parser Op object to the equivalent namespace object
- * Simple objects are any objects other than a package object!
- *
- ****************************************************************************/
-
-static ACPI_STATUS
-acpi_ds_build_internal_simple_obj (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- ACPI_OPERAND_OBJECT **obj_desc_ptr)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- OBJECT_TYPE_INTERNAL type;
- ACPI_STATUS status;
- u32 length;
- char *name;
-
-
- if (op->opcode == AML_NAMEPATH_OP) {
- /*
- * This is an object reference. If The name was
- * previously looked up in the NS, it is stored in this op.
- * Otherwise, go ahead and look it up now
- */
-
- if (!op->node) {
- status = acpi_ns_lookup (walk_state->scope_info,
- op->value.string, ACPI_TYPE_ANY,
- IMODE_EXECUTE,
- NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE,
- NULL,
- (ACPI_NAMESPACE_NODE **)&(op->node));
-
- if (ACPI_FAILURE (status)) {
- if (status == AE_NOT_FOUND) {
- name = NULL;
- acpi_ns_externalize_name (ACPI_UINT32_MAX, op->value.string, &length, &name);
-
- if (name) {
- REPORT_WARNING (("Reference %s at AML %X not found\n",
- name, op->aml_offset));
- acpi_cm_free (name);
- }
- else {
- REPORT_WARNING (("Reference %s at AML %X not found\n",
- op->value.string, op->aml_offset));
- }
- *obj_desc_ptr = NULL;
- }
-
- else {
- return (status);
- }
- }
- }
-
- /*
- * The reference will be a Reference
- * TBD: [Restructure] unless we really need a separate
- * type of INTERNAL_TYPE_REFERENCE change
- * Acpi_ds_map_opcode_to_data_type to handle this case
- */
- type = INTERNAL_TYPE_REFERENCE;
- }
- else {
- type = acpi_ds_map_opcode_to_data_type (op->opcode, NULL);
- }
-
-
- /* Create and init the internal ACPI object */
-
- obj_desc = acpi_cm_create_internal_object (type);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- status = acpi_ds_init_object_from_op (walk_state, op,
- op->opcode, &obj_desc);
-
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (obj_desc);
- return (status);
- }
-
- *obj_desc_ptr = obj_desc;
-
- return (AE_OK);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_build_internal_package_obj
- *
- * PARAMETERS: Op - Parser object to be translated
- * Obj_desc_ptr - Where the ACPI internal object is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Translate a parser Op package object to the equivalent
- * namespace object
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_build_internal_package_obj (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- ACPI_OPERAND_OBJECT **obj_desc_ptr)
-{
- ACPI_PARSE_OBJECT *arg;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_STATUS status = AE_OK;
-
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_PACKAGE);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* The first argument must be the package length */
-
- arg = op->value.arg;
- obj_desc->package.count = arg->value.integer;
-
- /*
- * Allocate the array of pointers (ptrs to the
- * individual objects) Add an extra pointer slot so
- * that the list is always null terminated.
- */
-
- obj_desc->package.elements =
- acpi_cm_callocate ((obj_desc->package.count + 1) *
- sizeof (void *));
-
- if (!obj_desc->package.elements) {
- /* Package vector allocation failure */
-
- REPORT_ERROR (("Ds_build_internal_package_obj: Package vector allocation failure\n"));
-
- acpi_cm_delete_object_desc (obj_desc);
- return (AE_NO_MEMORY);
- }
-
- obj_desc->package.next_element = obj_desc->package.elements;
-
- /*
- * Now init the elements of the package
- */
-
- arg = arg->next;
- while (arg) {
- if (arg->opcode == AML_PACKAGE_OP) {
- status = acpi_ds_build_internal_package_obj (walk_state, arg,
- obj_desc->package.next_element);
- }
-
- else {
- status = acpi_ds_build_internal_simple_obj (walk_state, arg,
- obj_desc->package.next_element);
- }
-
- obj_desc->package.next_element++;
- arg = arg->next;
- }
-
- *obj_desc_ptr = obj_desc;
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_build_internal_object
- *
- * PARAMETERS: Op - Parser object to be translated
- * Obj_desc_ptr - Where the ACPI internal object is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Translate a parser Op object to the equivalent namespace
- * object
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_build_internal_object (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- ACPI_OPERAND_OBJECT **obj_desc_ptr)
-{
- ACPI_STATUS status;
-
-
- if (op->opcode == AML_PACKAGE_OP) {
- status = acpi_ds_build_internal_package_obj (walk_state, op,
- obj_desc_ptr);
- }
-
- else {
- status = acpi_ds_build_internal_simple_obj (walk_state, op,
- obj_desc_ptr);
- }
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_create_node
- *
- * PARAMETERS: Op - Parser object to be translated
- * Obj_desc_ptr - Where the ACPI internal object is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_create_node (
- ACPI_WALK_STATE *walk_state,
- ACPI_NAMESPACE_NODE *node,
- ACPI_PARSE_OBJECT *op)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- if (!op->value.arg) {
- /* No arguments, there is nothing to do */
-
- return (AE_OK);
- }
-
-
- /* Build an internal object for the argument(s) */
-
- status = acpi_ds_build_internal_object (walk_state,
- op->value.arg, &obj_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /* Re-type the object according to it's argument */
-
- node->type = obj_desc->common.type;
-
- /* Init obj */
-
- status = acpi_ns_attach_object ((ACPI_HANDLE) node, obj_desc,
- (u8) node->type);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- return (status);
-
-
-cleanup:
-
- acpi_cm_remove_reference (obj_desc);
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dsopcode.c b/reactos/drivers/bus/acpi/dispatcher/dsopcode.c
deleted file mode 100644
index 4a68ef8ac47..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dsopcode.c
+++ /dev/null
@@ -1,868 +0,0 @@
-/******************************************************************************
- *
- * Module Name: dsopcode - Dispatcher Op Region support and handling of
- * "control" opcodes
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dsopcode")
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_get_field_unit_arguments
- *
- * PARAMETERS: Obj_desc - A valid Field_unit object
- *
- * RETURN: Status.
- *
- * DESCRIPTION: Get Field_unit Buffer and Index. This implements the late
- * evaluation of these field attributes.
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_get_field_unit_arguments (
- ACPI_OPERAND_OBJECT *obj_desc)
-{
- ACPI_OPERAND_OBJECT *extra_desc;
- ACPI_NAMESPACE_NODE *node;
- ACPI_PARSE_OBJECT *op;
- ACPI_PARSE_OBJECT *field_op;
- ACPI_STATUS status;
- ACPI_TABLE_DESC *table_desc;
-
-
- if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
- return (AE_OK);
- }
-
-
- /* Get the AML pointer (method object) and Field_unit node */
-
- extra_desc = obj_desc->field_unit.extra;
- node = obj_desc->field_unit.node;
-
- /*
- * Allocate a new parser op to be the root of the parsed
- * Op_region tree
- */
-
- op = acpi_ps_alloc_op (AML_SCOPE_OP);
- if (!op) {
- return (AE_NO_MEMORY);
- }
-
- /* Save the Node for use in Acpi_ps_parse_aml */
-
- op->node = acpi_ns_get_parent_object (node);
-
- /* Get a handle to the parent ACPI table */
-
- status = acpi_tb_handle_to_object (node->owner_id, &table_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Pass1: Parse the entire Field_unit declaration */
-
- status = acpi_ps_parse_aml (op, extra_desc->extra.pcode,
- extra_desc->extra.pcode_length, 0,
- NULL, NULL, NULL, acpi_ds_load1_begin_op, acpi_ds_load1_end_op);
- if (ACPI_FAILURE (status)) {
- acpi_ps_delete_parse_tree (op);
- return (status);
- }
-
-
- /* Get and init the actual Fiel_unit_op created above */
-
- field_op = op->value.arg;
- op->node = node;
-
-
- field_op = op->value.arg;
- field_op->node = node;
- acpi_ps_delete_parse_tree (op);
-
- /* Acpi_evaluate the address and length arguments for the Op_region */
-
- op = acpi_ps_alloc_op (AML_SCOPE_OP);
- if (!op) {
- return (AE_NO_MEMORY);
- }
-
- op->node = acpi_ns_get_parent_object (node);
-
- status = acpi_ps_parse_aml (op, extra_desc->extra.pcode,
- extra_desc->extra.pcode_length,
- ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE,
- NULL /*Method_desc*/, NULL, NULL,
- acpi_ds_exec_begin_op, acpi_ds_exec_end_op);
- /* All done with the parse tree, delete it */
-
- acpi_ps_delete_parse_tree (op);
-
-
- /*
- * The pseudo-method object is no longer needed since the region is
- * now initialized
- */
- acpi_cm_remove_reference (obj_desc->field_unit.extra);
- obj_desc->field_unit.extra = NULL;
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_get_region_arguments
- *
- * PARAMETERS: Obj_desc - A valid region object
- *
- * RETURN: Status.
- *
- * DESCRIPTION: Get region address and length. This implements the late
- * evaluation of these region attributes.
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_get_region_arguments (
- ACPI_OPERAND_OBJECT *obj_desc)
-{
- ACPI_OPERAND_OBJECT *extra_desc = NULL;
- ACPI_NAMESPACE_NODE *node;
- ACPI_PARSE_OBJECT *op;
- ACPI_PARSE_OBJECT *region_op;
- ACPI_STATUS status;
- ACPI_TABLE_DESC *table_desc;
-
-
- if (obj_desc->region.flags & AOPOBJ_DATA_VALID) {
- return (AE_OK);
- }
-
-
- /* Get the AML pointer (method object) and region node */
-
- extra_desc = obj_desc->region.extra;
- node = obj_desc->region.node;
-
- /*
- * Allocate a new parser op to be the root of the parsed
- * Op_region tree
- */
-
- op = acpi_ps_alloc_op (AML_SCOPE_OP);
- if (!op) {
- return (AE_NO_MEMORY);
- }
-
- /* Save the Node for use in Acpi_ps_parse_aml */
-
- op->node = acpi_ns_get_parent_object (node);
-
- /* Get a handle to the parent ACPI table */
-
- status = acpi_tb_handle_to_object (node->owner_id, &table_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Parse the entire Op_region declaration, creating a parse tree */
-
- status = acpi_ps_parse_aml (op, extra_desc->extra.pcode,
- extra_desc->extra.pcode_length, 0,
- NULL, NULL, NULL, acpi_ds_load1_begin_op, acpi_ds_load1_end_op);
-
- if (ACPI_FAILURE (status)) {
- acpi_ps_delete_parse_tree (op);
- return (status);
- }
-
-
- /* Get and init the actual Region_op created above */
-
- region_op = op->value.arg;
- op->node = node;
-
-
- region_op = op->value.arg;
- region_op->node = node;
- acpi_ps_delete_parse_tree (op);
-
- /* Acpi_evaluate the address and length arguments for the Op_region */
-
- op = acpi_ps_alloc_op (AML_SCOPE_OP);
- if (!op) {
- return (AE_NO_MEMORY);
- }
-
- op->node = acpi_ns_get_parent_object (node);
-
- status = acpi_ps_parse_aml (op, extra_desc->extra.pcode,
- extra_desc->extra.pcode_length,
- ACPI_PARSE_EXECUTE | ACPI_PARSE_DELETE_TREE,
- NULL /*Method_desc*/, NULL, NULL,
- acpi_ds_exec_begin_op, acpi_ds_exec_end_op);
-
- /* All done with the parse tree, delete it */
-
- acpi_ps_delete_parse_tree (op);
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_initialize_region
- *
- * PARAMETERS: Op - A valid region Op object
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_initialize_region (
- ACPI_HANDLE obj_handle)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_STATUS status;
-
-
- obj_desc = acpi_ns_get_attached_object (obj_handle);
-
- /* Namespace is NOT locked */
-
- status = acpi_ev_initialize_region (obj_desc, FALSE);
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_eval_field_unit_operands
- *
- * PARAMETERS: Op - A valid Field_unit Op object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Get Field_unit Buffer and Index
- * Called from Acpi_ds_exec_end_op during Field_unit parse tree walk
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_eval_field_unit_operands (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *field_desc;
- ACPI_NAMESPACE_NODE *node;
- ACPI_PARSE_OBJECT *next_op;
- u32 offset;
- u32 bit_offset;
- u16 bit_count;
-
-
- ACPI_OPERAND_OBJECT *res_desc = NULL;
- ACPI_OPERAND_OBJECT *cnt_desc = NULL;
- ACPI_OPERAND_OBJECT *off_desc = NULL;
- ACPI_OPERAND_OBJECT *src_desc = NULL;
- u32 num_operands = 3;
-
-
- /*
- * This is where we evaluate the address and length fields of the Op_field_unit declaration
- */
-
- node = op->node;
-
- /* Next_op points to the op that holds the Buffer */
- next_op = op->value.arg;
-
- /* Acpi_evaluate/create the address and length operands */
-
- status = acpi_ds_create_operands (walk_state, next_op);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- field_desc = acpi_ns_get_attached_object (node);
- if (!field_desc) {
- return (AE_NOT_EXIST);
- }
-
-
- /* Resolve the operands */
-
- status = acpi_aml_resolve_operands (op->opcode, WALK_OPERANDS, walk_state);
-
- /* Get the operands */
-
- status |= acpi_ds_obj_stack_pop_object (&res_desc, walk_state);
- if (AML_CREATE_FIELD_OP == op->opcode) {
- num_operands = 4;
- status |= acpi_ds_obj_stack_pop_object (&cnt_desc, walk_state);
- }
-
- status |= acpi_ds_obj_stack_pop_object (&off_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&src_desc, walk_state);
-
- if (ACPI_FAILURE (status)) {
- /* Invalid parameters on object stack */
-
- goto cleanup;
- }
-
-
- offset = (u32) off_desc->integer.value;
-
-
- /*
- * If Res_desc is a Name, it will be a direct name pointer after
- * Acpi_aml_resolve_operands()
- */
-
- if (!VALID_DESCRIPTOR_TYPE (res_desc, ACPI_DESC_TYPE_NAMED)) {
- status = AE_AML_OPERAND_TYPE;
- goto cleanup;
- }
-
-
- /*
- * Setup the Bit offsets and counts, according to the opcode
- */
-
- switch (op->opcode) {
-
- /* Def_create_bit_field */
-
- case AML_BIT_FIELD_OP:
-
- /* Offset is in bits, Field is a bit */
-
- bit_offset = offset;
- bit_count = 1;
- break;
-
-
- /* Def_create_byte_field */
-
- case AML_BYTE_FIELD_OP:
-
- /* Offset is in bytes, field is a byte */
-
- bit_offset = 8 * offset;
- bit_count = 8;
- break;
-
-
- /* Def_create_word_field */
-
- case AML_WORD_FIELD_OP:
-
- /* Offset is in bytes, field is a word */
-
- bit_offset = 8 * offset;
- bit_count = 16;
- break;
-
-
- /* Def_create_dWord_field */
-
- case AML_DWORD_FIELD_OP:
-
- /* Offset is in bytes, field is a dword */
-
- bit_offset = 8 * offset;
- bit_count = 32;
- break;
-
-
- /* Def_create_field */
-
- case AML_CREATE_FIELD_OP:
-
- /* Offset is in bits, count is in bits */
-
- bit_offset = offset;
- bit_count = (u16) cnt_desc->integer.value;
- break;
-
-
- default:
-
- status = AE_AML_BAD_OPCODE;
- goto cleanup;
- }
-
-
- /*
- * Setup field according to the object type
- */
-
- switch (src_desc->common.type) {
-
- /* Source_buff := Term_arg=>Buffer */
-
- case ACPI_TYPE_BUFFER:
-
- if (bit_offset + (u32) bit_count >
- (8 * (u32) src_desc->buffer.length)) {
- status = AE_AML_BUFFER_LIMIT;
- goto cleanup;
- }
-
-
- /* Construct the remainder of the field object */
-
- field_desc->field_unit.access = (u8) ACCESS_ANY_ACC;
- field_desc->field_unit.lock_rule = (u8) GLOCK_NEVER_LOCK;
- field_desc->field_unit.update_rule = (u8) UPDATE_PRESERVE;
- field_desc->field_unit.length = bit_count;
- field_desc->field_unit.bit_offset = (u8) (bit_offset % 8);
- field_desc->field_unit.offset = DIV_8 (bit_offset);
- field_desc->field_unit.container = src_desc;
-
- /* Reference count for Src_desc inherits Field_desc count */
-
- src_desc->common.reference_count = (u16) (src_desc->common.reference_count +
- field_desc->common.reference_count);
-
- break;
-
-
- /* Improper object type */
-
- default:
-
-
-
- status = AE_AML_OPERAND_TYPE;
- goto cleanup;
- }
-
-
- if (AML_CREATE_FIELD_OP == op->opcode) {
- /* Delete object descriptor unique to Create_field */
-
- acpi_cm_remove_reference (cnt_desc);
- cnt_desc = NULL;
- }
-
-
-cleanup:
-
- /* Always delete the operands */
-
- acpi_cm_remove_reference (off_desc);
- acpi_cm_remove_reference (src_desc);
-
- if (AML_CREATE_FIELD_OP == op->opcode) {
- acpi_cm_remove_reference (cnt_desc);
- }
-
- /* On failure, delete the result descriptor */
-
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (res_desc); /* Result descriptor */
- }
-
- else {
- /* Now the address and length are valid for this op_field_unit */
-
- field_desc->field_unit.flags |= AOPOBJ_DATA_VALID;
- }
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_eval_region_operands
- *
- * PARAMETERS: Op - A valid region Op object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Get region address and length
- * Called from Acpi_ds_exec_end_op during Op_region parse tree walk
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_eval_region_operands (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *operand_desc;
- ACPI_NAMESPACE_NODE *node;
- ACPI_PARSE_OBJECT *next_op;
-
-
- /*
- * This is where we evaluate the address and length fields of the Op_region declaration
- */
-
- node = op->node;
-
- /* Next_op points to the op that holds the Space_iD */
- next_op = op->value.arg;
-
- /* Next_op points to address op */
- next_op = next_op->next;
-
- /* Acpi_evaluate/create the address and length operands */
-
- status = acpi_ds_create_operands (walk_state, next_op);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Resolve the length and address operands to numbers */
-
- status = acpi_aml_resolve_operands (op->opcode, WALK_OPERANDS, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- obj_desc = acpi_ns_get_attached_object (node);
- if (!obj_desc) {
- return (AE_NOT_EXIST);
- }
-
- /*
- * Get the length operand and save it
- * (at Top of stack)
- */
- operand_desc = walk_state->operands[walk_state->num_operands - 1];
-
- obj_desc->region.length = (u32) operand_desc->integer.value;
- acpi_cm_remove_reference (operand_desc);
-
- /*
- * Get the address and save it
- * (at top of stack - 1)
- */
- operand_desc = walk_state->operands[walk_state->num_operands - 2];
-
- obj_desc->region.address = (ACPI_PHYSICAL_ADDRESS) operand_desc->integer.value;
- acpi_cm_remove_reference (operand_desc);
-
-
- /* Now the address and length are valid for this opregion */
-
- obj_desc->region.flags |= AOPOBJ_DATA_VALID;
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_exec_begin_control_op
- *
- * PARAMETERS: Walk_list - The list that owns the walk stack
- * Op - The control Op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Handles all control ops encountered during control method
- * execution.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_exec_begin_control_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_GENERIC_STATE *control_state;
-
-
- switch (op->opcode) {
- case AML_IF_OP:
- case AML_WHILE_OP:
-
- /*
- * IF/WHILE: Create a new control state to manage these
- * constructs. We need to manage these as a stack, in order
- * to handle nesting.
- */
-
- control_state = acpi_cm_create_control_state ();
- if (!control_state) {
- status = AE_NO_MEMORY;
- break;
- }
-
- acpi_cm_push_generic_state (&walk_state->control_state, control_state);
-
- /*
- * Save a pointer to the predicate for multiple executions
- * of a loop
- */
- walk_state->control_state->control.aml_predicate_start =
- walk_state->parser_state->aml - 1;
- /* TBD: can this be removed? */
- /*Acpi_ps_pkg_length_encoding_size (GET8 (Walk_state->Parser_state->Aml));*/
- break;
-
-
- case AML_ELSE_OP:
-
- /* Predicate is in the state object */
- /* If predicate is true, the IF was executed, ignore ELSE part */
-
- if (walk_state->last_predicate) {
- status = AE_CTRL_TRUE;
- }
-
- break;
-
-
- case AML_RETURN_OP:
-
- break;
-
-
- default:
- break;
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_exec_end_control_op
- *
- * PARAMETERS: Walk_list - The list that owns the walk stack
- * Op - The control Op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Handles all control ops encountered during control method
- * execution.
- *
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_exec_end_control_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_GENERIC_STATE *control_state;
-
-
- switch (op->opcode) {
- case AML_IF_OP:
-
- /*
- * Save the result of the predicate in case there is an
- * ELSE to come
- */
-
- walk_state->last_predicate =
- (u8) walk_state->control_state->common.value;
-
- /*
- * Pop the control state that was created at the start
- * of the IF and free it
- */
-
- control_state =
- acpi_cm_pop_generic_state (&walk_state->control_state);
-
- acpi_cm_delete_generic_state (control_state);
-
- break;
-
-
- case AML_ELSE_OP:
-
- break;
-
-
- case AML_WHILE_OP:
-
- if (walk_state->control_state->common.value) {
- /* Predicate was true, go back and evaluate it again! */
-
- status = AE_CTRL_PENDING;
- }
-
-
- /* Pop this control state and free it */
-
- control_state =
- acpi_cm_pop_generic_state (&walk_state->control_state);
-
- walk_state->aml_last_while = control_state->control.aml_predicate_start;
- acpi_cm_delete_generic_state (control_state);
-
- break;
-
-
- case AML_RETURN_OP:
-
-
- /*
- * One optional operand -- the return value
- * It can be either an immediate operand or a result that
- * has been bubbled up the tree
- */
- if (op->value.arg) {
- /* Return statement has an immediate operand */
-
- status = acpi_ds_create_operands (walk_state, op->value.arg);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * If value being returned is a Reference (such as
- * an arg or local), resolve it now because it may
- * cease to exist at the end of the method.
- */
- status = acpi_aml_resolve_to_value (&walk_state->operands [0], walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * Get the return value and save as the last result
- * value. This is the only place where Walk_state->Return_desc
- * is set to anything other than zero!
- */
-
- walk_state->return_desc = walk_state->operands[0];
- }
-
- else if ((walk_state->results) &&
- (walk_state->results->results.num_results > 0)) {
- /*
- * The return value has come from a previous calculation.
- *
- * If value being returned is a Reference (such as
- * an arg or local), resolve it now because it may
- * cease to exist at the end of the method.
- *
- * Allow references created by the Index operator to return unchanged.
- */
-
- if (VALID_DESCRIPTOR_TYPE (walk_state->results->results.obj_desc [0], ACPI_DESC_TYPE_INTERNAL) &&
- ((walk_state->results->results.obj_desc [0])->common.type == INTERNAL_TYPE_REFERENCE) &&
- ((walk_state->results->results.obj_desc [0])->reference.opcode != AML_INDEX_OP)) {
- status = acpi_aml_resolve_to_value (&walk_state->results->results.obj_desc [0], walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- walk_state->return_desc = walk_state->results->results.obj_desc [0];
- }
-
- else {
- /* No return operand */
-
- if (walk_state->num_operands) {
- acpi_cm_remove_reference (walk_state->operands [0]);
- }
-
- walk_state->operands [0] = NULL;
- walk_state->num_operands = 0;
- walk_state->return_desc = NULL;
- }
-
-
- /* End the control method execution right now */
- status = AE_CTRL_TERMINATE;
- break;
-
-
- case AML_NOOP_OP:
-
- /* Just do nothing! */
- break;
-
-
- case AML_BREAK_POINT_OP:
-
- /* Call up to the OS dependent layer to handle this */
-
- acpi_os_breakpoint (NULL);
-
- /* If it returns, we are done! */
-
- break;
-
-
- case AML_BREAK_OP:
-
- /*
- * As per the ACPI specification:
- * "The break operation causes the current package
- * execution to complete"
- * "Break -- Stop executing the current code package
- * at this point"
- *
- * Returning AE_FALSE here will cause termination of
- * the current package, and execution will continue one
- * level up, starting with the completion of the parent Op.
- */
-
- status = AE_CTRL_FALSE;
- break;
-
-
- default:
-
- status = AE_AML_BAD_OPCODE;
- break;
- }
-
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dsutils.c b/reactos/drivers/bus/acpi/dispatcher/dsutils.c
deleted file mode 100644
index c87469493aa..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dsutils.c
+++ /dev/null
@@ -1,744 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: dsutils - Dispatcher utilities
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dsutils")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_is_result_used
- *
- * PARAMETERS: Op
- * Result_obj
- * Walk_state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Check if a result object will be used by the parent
- *
- ******************************************************************************/
-
-u8
-acpi_ds_is_result_used (
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPCODE_INFO *parent_info;
-
-
- /* Must have both an Op and a Result Object */
-
- if (!op) {
- return (TRUE);
- }
-
-
- /*
- * If there is no parent, the result can't possibly be used!
- * (An executing method typically has no parent, since each
- * method is parsed separately) However, a method that is
- * invoked from another method has a parent.
- */
- if (!op->parent) {
- return (FALSE);
- }
-
-
- /*
- * Get info on the parent. The root Op is AML_SCOPE
- */
-
- parent_info = acpi_ps_get_opcode_info (op->parent->opcode);
- if (ACPI_GET_OP_TYPE (parent_info) != ACPI_OP_TYPE_OPCODE) {
- return (FALSE);
- }
-
-
- /*
- * Decide what to do with the result based on the parent. If
- * the parent opcode will not use the result, delete the object.
- * Otherwise leave it as is, it will be deleted when it is used
- * as an operand later.
- */
-
- switch (ACPI_GET_OP_CLASS (parent_info)) {
- /*
- * In these cases, the parent will never use the return object
- */
- case OPTYPE_CONTROL: /* IF, ELSE, WHILE only */
-
- switch (op->parent->opcode) {
- case AML_RETURN_OP:
-
- /* Never delete the return value associated with a return opcode */
-
- return (TRUE);
- break;
-
- case AML_IF_OP:
- case AML_WHILE_OP:
-
- /*
- * If we are executing the predicate AND this is the predicate op,
- * we will use the return value!
- */
-
- if ((walk_state->control_state->common.state == CONTROL_PREDICATE_EXECUTING) &&
- (walk_state->control_state->control.predicate_op == op)) {
- return (TRUE);
- }
-
- break;
- }
-
-
- /* Fall through to not used case below */
-
-
- case OPTYPE_NAMED_OBJECT: /* Scope, method, etc. */
-
- /*
- * These opcodes allow Term_arg(s) as operands and therefore
- * method calls. The result is used.
- */
- if ((op->parent->opcode == AML_REGION_OP) ||
- (op->parent->opcode == AML_CREATE_FIELD_OP) ||
- (op->parent->opcode == AML_BIT_FIELD_OP) ||
- (op->parent->opcode == AML_BYTE_FIELD_OP) ||
- (op->parent->opcode == AML_WORD_FIELD_OP) ||
- (op->parent->opcode == AML_DWORD_FIELD_OP) ||
- (op->parent->opcode == AML_QWORD_FIELD_OP)) {
- return (TRUE);
- }
-
- return (FALSE);
- break;
-
- /*
- * In all other cases. the parent will actually use the return
- * object, so keep it.
- */
- default:
- break;
- }
-
- return (TRUE);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_delete_result_if_not_used
- *
- * PARAMETERS: Op
- * Result_obj
- * Walk_state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Used after interpretation of an opcode. If there is an internal
- * result descriptor, check if the parent opcode will actually use
- * this result. If not, delete the result now so that it will
- * not become orphaned.
- *
- ******************************************************************************/
-
-void
-acpi_ds_delete_result_if_not_used (
- ACPI_PARSE_OBJECT *op,
- ACPI_OPERAND_OBJECT *result_obj,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_STATUS status;
-
-
- if (!op) {
- return;
- }
-
- if (!result_obj) {
- return;
- }
-
-
- if (!acpi_ds_is_result_used (op, walk_state)) {
- /*
- * Must pop the result stack (Obj_desc should be equal
- * to Result_obj)
- */
-
- status = acpi_ds_result_pop (&obj_desc, walk_state);
- if (ACPI_SUCCESS (status)) {
- acpi_cm_remove_reference (result_obj);
- }
- }
-
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_create_operand
- *
- * PARAMETERS: Walk_state
- * Arg
- *
- * RETURN: Status
- *
- * DESCRIPTION: Translate a parse tree object that is an argument to an AML
- * opcode to the equivalent interpreter object. This may include
- * looking up a name or entering a new name into the internal
- * namespace.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_create_operand (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *arg,
- u32 arg_index)
-{
- ACPI_STATUS status = AE_OK;
- NATIVE_CHAR *name_string;
- u32 name_length;
- OBJECT_TYPE_INTERNAL data_type;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_PARSE_OBJECT *parent_op;
- u16 opcode;
- u32 flags = 0;
- OPERATING_MODE interpreter_mode;
-
-
- /* A valid name must be looked up in the namespace */
-
- if ((arg->opcode == AML_NAMEPATH_OP) &&
- (arg->value.string)) {
- /* Get the entire name string from the AML stream */
-
- status = acpi_aml_get_name_string (ACPI_TYPE_ANY,
- arg->value.buffer,
- &name_string,
- &name_length);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * All prefixes have been handled, and the name is
- * in Name_string
- */
-
- /*
- * Differentiate between a namespace "create" operation
- * versus a "lookup" operation (IMODE_LOAD_PASS2 vs.
- * IMODE_EXECUTE) in order to support the creation of
- * namespace objects during the execution of control methods.
- */
-
- parent_op = arg->parent;
- if ((acpi_ps_is_node_op (parent_op->opcode)) &&
- (parent_op->opcode != AML_METHODCALL_OP) &&
- (parent_op->opcode != AML_REGION_OP) &&
- (parent_op->opcode != AML_NAMEPATH_OP)) {
- /* Enter name into namespace if not found */
-
- interpreter_mode = IMODE_LOAD_PASS2;
- }
-
- else {
- /* Return a failure if name not found */
-
- interpreter_mode = IMODE_EXECUTE;
- }
-
- status = acpi_ns_lookup (walk_state->scope_info, name_string,
- ACPI_TYPE_ANY, interpreter_mode,
- NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE,
- walk_state,
- (ACPI_NAMESPACE_NODE **) &obj_desc);
-
- /* Free the namestring created above */
-
- acpi_cm_free (name_string);
-
- /*
- * The only case where we pass through (ignore) a NOT_FOUND
- * error is for the Cond_ref_of opcode.
- */
-
- if (status == AE_NOT_FOUND) {
- if (parent_op->opcode == AML_COND_REF_OF_OP) {
- /*
- * For the Conditional Reference op, it's OK if
- * the name is not found; We just need a way to
- * indicate this to the interpreter, set the
- * object to the root
- */
- obj_desc = (ACPI_OPERAND_OBJECT *) acpi_gbl_root_node;
- status = AE_OK;
- }
-
- else {
- /*
- * We just plain didn't find it -- which is a
- * very serious error at this point
- */
- status = AE_AML_NAME_NOT_FOUND;
- }
- }
-
- /* Check status from the lookup */
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Put the resulting object onto the current object stack */
-
- status = acpi_ds_obj_stack_push (obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- DEBUGGER_EXEC (acpi_db_display_argument_object (obj_desc, walk_state));
- }
-
-
- else {
- /* Check for null name case */
-
- if (arg->opcode == AML_NAMEPATH_OP) {
- /*
- * If the name is null, this means that this is an
- * optional result parameter that was not specified
- * in the original ASL. Create an Reference for a
- * placeholder
- */
- opcode = AML_ZERO_OP; /* Has no arguments! */
-
- /*
- * TBD: [Investigate] anything else needed for the
- * zero op lvalue?
- */
- }
-
- else {
- opcode = arg->opcode;
- }
-
-
- /* Get the data type of the argument */
-
- data_type = acpi_ds_map_opcode_to_data_type (opcode, &flags);
- if (data_type == INTERNAL_TYPE_INVALID) {
- return (AE_NOT_IMPLEMENTED);
- }
-
- if (flags & OP_HAS_RETURN_VALUE) {
- DEBUGGER_EXEC (acpi_db_display_argument_object (walk_state->operands [walk_state->num_operands - 1], walk_state));
-
- /*
- * Use value that was already previously returned
- * by the evaluation of this argument
- */
-
- status = acpi_ds_result_pop_from_bottom (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- /*
- * Only error is underflow, and this indicates
- * a missing or null operand!
- */
- return (status);
- }
-
- }
-
- else {
- /* Create an ACPI_INTERNAL_OBJECT for the argument */
-
- obj_desc = acpi_cm_create_internal_object (data_type);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Initialize the new object */
-
- status = acpi_ds_init_object_from_op (walk_state, arg,
- opcode, &obj_desc);
- if (ACPI_FAILURE (status)) {
- acpi_cm_delete_object_desc (obj_desc);
- return (status);
- }
- }
-
- /* Put the operand object on the object stack */
-
- status = acpi_ds_obj_stack_push (obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- DEBUGGER_EXEC (acpi_db_display_argument_object (obj_desc, walk_state));
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_create_operands
- *
- * PARAMETERS: First_arg - First argument of a parser argument tree
- *
- * RETURN: Status
- *
- * DESCRIPTION: Convert an operator's arguments from a parse tree format to
- * namespace objects and place those argument object on the object
- * stack in preparation for evaluation by the interpreter.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_create_operands (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *first_arg)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_PARSE_OBJECT *arg;
- u32 arg_count = 0;
-
-
- /* For all arguments in the list... */
-
- arg = first_arg;
- while (arg) {
- status = acpi_ds_create_operand (walk_state, arg, arg_count);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /* Move on to next argument, if any */
-
- arg = arg->next;
- arg_count++;
- }
-
- return (status);
-
-
-cleanup:
- /*
- * We must undo everything done above; meaning that we must
- * pop everything off of the operand stack and delete those
- * objects
- */
-
- acpi_ds_obj_stack_pop_and_delete (arg_count, walk_state);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_resolve_operands
- *
- * PARAMETERS: Walk_state - Current walk state with operands on stack
- *
- * RETURN: Status
- *
- * DESCRIPTION: Resolve all operands to their values. Used to prepare
- * arguments to a control method invocation (a call from one
- * method to another.)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_resolve_operands (
- ACPI_WALK_STATE *walk_state)
-{
- u32 i;
- ACPI_STATUS status = AE_OK;
-
-
- /*
- * Attempt to resolve each of the valid operands
- * Method arguments are passed by value, not by reference
- */
-
- /*
- * TBD: [Investigate] Note from previous parser:
- * Ref_of problem with Acpi_aml_resolve_to_value() conversion.
- */
-
- for (i = 0; i < walk_state->num_operands; i++) {
- status = acpi_aml_resolve_to_value (&walk_state->operands[i], walk_state);
- if (ACPI_FAILURE (status)) {
- break;
- }
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_map_opcode_to_data_type
- *
- * PARAMETERS: Opcode - AML opcode to map
- * Out_flags - Additional info about the opcode
- *
- * RETURN: The ACPI type associated with the opcode
- *
- * DESCRIPTION: Convert a raw AML opcode to the associated ACPI data type,
- * if any. If the opcode returns a value as part of the
- * intepreter execution, a flag is returned in Out_flags.
- *
- ******************************************************************************/
-
-OBJECT_TYPE_INTERNAL
-acpi_ds_map_opcode_to_data_type (
- u16 opcode,
- u32 *out_flags)
-{
- OBJECT_TYPE_INTERNAL data_type = INTERNAL_TYPE_INVALID;
- ACPI_OPCODE_INFO *op_info;
- u32 flags = 0;
-
-
- op_info = acpi_ps_get_opcode_info (opcode);
- if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) {
- /* Unknown opcode */
-
- return (data_type);
- }
-
- switch (ACPI_GET_OP_CLASS (op_info)) {
-
- case OPTYPE_LITERAL:
-
- switch (opcode) {
- case AML_BYTE_OP:
- case AML_WORD_OP:
- case AML_DWORD_OP:
-
- data_type = ACPI_TYPE_INTEGER;
- break;
-
-
- case AML_STRING_OP:
-
- data_type = ACPI_TYPE_STRING;
- break;
-
- case AML_NAMEPATH_OP:
- data_type = INTERNAL_TYPE_REFERENCE;
- break;
-
- default:
- break;
- }
- break;
-
-
- case OPTYPE_DATA_TERM:
-
- switch (opcode) {
- case AML_BUFFER_OP:
-
- data_type = ACPI_TYPE_BUFFER;
- break;
-
- case AML_PACKAGE_OP:
-
- data_type = ACPI_TYPE_PACKAGE;
- break;
-
- default:
- break;
- }
- break;
-
-
- case OPTYPE_CONSTANT:
- case OPTYPE_METHOD_ARGUMENT:
- case OPTYPE_LOCAL_VARIABLE:
-
- data_type = INTERNAL_TYPE_REFERENCE;
- break;
-
-
- case OPTYPE_MONADIC2:
- case OPTYPE_MONADIC2_r:
- case OPTYPE_DYADIC2:
- case OPTYPE_DYADIC2_r:
- case OPTYPE_DYADIC2_s:
- case OPTYPE_INDEX:
- case OPTYPE_MATCH:
- case OPTYPE_RETURN:
-
- flags = OP_HAS_RETURN_VALUE;
- data_type = ACPI_TYPE_ANY;
- break;
-
- case OPTYPE_METHOD_CALL:
-
- flags = OP_HAS_RETURN_VALUE;
- data_type = ACPI_TYPE_METHOD;
- break;
-
-
- case OPTYPE_NAMED_OBJECT:
-
- data_type = acpi_ds_map_named_opcode_to_data_type (opcode);
- break;
-
-
- case OPTYPE_DYADIC1:
- case OPTYPE_CONTROL:
-
- /* No mapping needed at this time */
-
- break;
-
-
- default:
-
- break;
- }
-
- /* Return flags to caller if requested */
-
- if (out_flags) {
- *out_flags = flags;
- }
-
- return (data_type);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_map_named_opcode_to_data_type
- *
- * PARAMETERS: Opcode - The Named AML opcode to map
- *
- * RETURN: The ACPI type associated with the named opcode
- *
- * DESCRIPTION: Convert a raw Named AML opcode to the associated data type.
- * Named opcodes are a subsystem of the AML opcodes.
- *
- ******************************************************************************/
-
-OBJECT_TYPE_INTERNAL
-acpi_ds_map_named_opcode_to_data_type (
- u16 opcode)
-{
- OBJECT_TYPE_INTERNAL data_type;
-
-
- /* Decode Opcode */
-
- switch (opcode) {
- case AML_SCOPE_OP:
- data_type = INTERNAL_TYPE_SCOPE;
- break;
-
- case AML_DEVICE_OP:
- data_type = ACPI_TYPE_DEVICE;
- break;
-
- case AML_THERMAL_ZONE_OP:
- data_type = ACPI_TYPE_THERMAL;
- break;
-
- case AML_METHOD_OP:
- data_type = ACPI_TYPE_METHOD;
- break;
-
- case AML_POWER_RES_OP:
- data_type = ACPI_TYPE_POWER;
- break;
-
- case AML_PROCESSOR_OP:
- data_type = ACPI_TYPE_PROCESSOR;
- break;
-
- case AML_DEF_FIELD_OP: /* Def_field_op */
- data_type = INTERNAL_TYPE_DEF_FIELD_DEFN;
- break;
-
- case AML_INDEX_FIELD_OP: /* Index_field_op */
- data_type = INTERNAL_TYPE_INDEX_FIELD_DEFN;
- break;
-
- case AML_BANK_FIELD_OP: /* Bank_field_op */
- data_type = INTERNAL_TYPE_BANK_FIELD_DEFN;
- break;
-
- case AML_NAMEDFIELD_OP: /* NO CASE IN ORIGINAL */
- data_type = ACPI_TYPE_ANY;
- break;
-
- case AML_NAME_OP: /* Name_op - special code in original */
- case AML_NAMEPATH_OP:
- data_type = ACPI_TYPE_ANY;
- break;
-
- case AML_ALIAS_OP:
- data_type = INTERNAL_TYPE_ALIAS;
- break;
-
- case AML_MUTEX_OP:
- data_type = ACPI_TYPE_MUTEX;
- break;
-
- case AML_EVENT_OP:
- data_type = ACPI_TYPE_EVENT;
- break;
-
- case AML_REGION_OP:
- data_type = ACPI_TYPE_REGION;
- break;
-
-
- default:
- data_type = ACPI_TYPE_ANY;
- break;
-
- }
-
- return (data_type);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dswexec.c b/reactos/drivers/bus/acpi/dispatcher/dswexec.c
deleted file mode 100644
index a7121305921..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dswexec.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/******************************************************************************
- *
- * Module Name: dswexec - Dispatcher method execution callbacks;
- * dispatch to interpreter.
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dswexec")
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_get_predicate_value
- *
- * PARAMETERS: Walk_state - Current state of the parse tree walk
- *
- * RETURN: Status
- *
- * DESCRIPTION: Get the result of a predicate evaluation
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_get_predicate_value (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- NATIVE_UINT has_result_obj)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- walk_state->control_state->common.state = 0;
-
- if (has_result_obj) {
- status = acpi_ds_result_pop (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- else {
- status = acpi_ds_create_operand (walk_state, op, 0);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- status = acpi_aml_resolve_to_value (&walk_state->operands [0], walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- obj_desc = walk_state->operands [0];
- }
-
- if (!obj_desc) {
- return (AE_AML_NO_OPERAND);
- }
-
-
- /*
- * Result of predicate evaluation currently must
- * be a number
- */
-
- if (obj_desc->common.type != ACPI_TYPE_INTEGER) {
- status = AE_AML_OPERAND_TYPE;
- goto cleanup;
- }
-
-
- /* Truncate the predicate to 32-bits if necessary */
-
- acpi_aml_truncate_for32bit_table (obj_desc, walk_state);
-
- /*
- * Save the result of the predicate evaluation on
- * the control stack
- */
-
- if (obj_desc->integer.value) {
- walk_state->control_state->common.value = TRUE;
- }
-
- else {
- /*
- * Predicate is FALSE, we will just toss the
- * rest of the package
- */
-
- walk_state->control_state->common.value = FALSE;
- status = AE_CTRL_FALSE;
- }
-
-
-cleanup:
-
- /* Break to debugger to display result */
-
- DEBUGGER_EXEC (acpi_db_display_result_object (obj_desc, walk_state));
-
- /*
- * Delete the predicate result object (we know that
- * we don't need it anymore)
- */
-
- acpi_cm_remove_reference (obj_desc);
-
- walk_state->control_state->common.state = CONTROL_NORMAL;
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_exec_begin_op
- *
- * PARAMETERS: Walk_state - Current state of the parse tree walk
- * Op - Op that has been just been reached in the
- * walk; Arguments have not been evaluated yet.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Descending callback used during the execution of control
- * methods. This is where most operators and operands are
- * dispatched to the interpreter.
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_exec_begin_op (
- u16 opcode,
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT **out_op)
-{
- ACPI_OPCODE_INFO *op_info;
- ACPI_STATUS status = AE_OK;
-
-
- if (!op) {
- status = acpi_ds_load2_begin_op (opcode, NULL, walk_state, out_op);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- op = *out_op;
- }
-
- if (op == walk_state->origin) {
- if (out_op) {
- *out_op = op;
- }
-
- return (AE_OK);
- }
-
- /*
- * If the previous opcode was a conditional, this opcode
- * must be the beginning of the associated predicate.
- * Save this knowledge in the current scope descriptor
- */
-
- if ((walk_state->control_state) &&
- (walk_state->control_state->common.state ==
- CONTROL_CONDITIONAL_EXECUTING)) {
- walk_state->control_state->common.state = CONTROL_PREDICATE_EXECUTING;
-
- /* Save start of predicate */
-
- walk_state->control_state->control.predicate_op = op;
- }
-
-
- op_info = acpi_ps_get_opcode_info (op->opcode);
-
- /* We want to send namepaths to the load code */
-
- if (op->opcode == AML_NAMEPATH_OP) {
- op_info->flags = OPTYPE_NAMED_OBJECT;
- }
-
-
- /*
- * Handle the opcode based upon the opcode type
- */
-
- switch (ACPI_GET_OP_CLASS (op_info)) {
- case OPTYPE_CONTROL:
-
- status = acpi_ds_result_stack_push (walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- status = acpi_ds_exec_begin_control_op (walk_state, op);
- break;
-
-
- case OPTYPE_NAMED_OBJECT:
-
- if (walk_state->walk_type == WALK_METHOD) {
- /*
- * Found a named object declaration during method
- * execution; we must enter this object into the
- * namespace. The created object is temporary and
- * will be deleted upon completion of the execution
- * of this method.
- */
-
- status = acpi_ds_load2_begin_op (op->opcode, op, walk_state, NULL);
- }
-
-
- if (op->opcode == AML_REGION_OP) {
- status = acpi_ds_result_stack_push (walk_state);
- }
-
- break;
-
-
- /* most operators with arguments */
-
- case OPTYPE_MONADIC1:
- case OPTYPE_DYADIC1:
- case OPTYPE_MONADIC2:
- case OPTYPE_MONADIC2_r:
- case OPTYPE_DYADIC2:
- case OPTYPE_DYADIC2_r:
- case OPTYPE_DYADIC2_s:
- case OPTYPE_RECONFIGURATION:
- case OPTYPE_INDEX:
- case OPTYPE_MATCH:
- case OPTYPE_FATAL:
- case OPTYPE_CREATE_FIELD:
-
- /* Start a new result/operand state */
-
- status = acpi_ds_result_stack_push (walk_state);
- break;
-
-
- default:
- break;
- }
-
- /* Nothing to do here during method execution */
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ds_exec_end_op
- *
- * PARAMETERS: Walk_state - Current state of the parse tree walk
- * Op - Op that has been just been completed in the
- * walk; Arguments have now been evaluated.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Ascending callback used during the execution of control
- * methods. The only thing we really need to do here is to
- * notice the beginning of IF, ELSE, and WHILE blocks.
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ds_exec_end_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op)
-{
- ACPI_STATUS status = AE_OK;
- u16 opcode;
- u8 optype;
- ACPI_PARSE_OBJECT *next_op;
- ACPI_NAMESPACE_NODE *node;
- ACPI_PARSE_OBJECT *first_arg;
- ACPI_OPERAND_OBJECT *result_obj = NULL;
- ACPI_OPCODE_INFO *op_info;
- u32 operand_index;
-
-
- opcode = (u16) op->opcode;
-
-
- op_info = acpi_ps_get_opcode_info (op->opcode);
- if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) {
- return (AE_NOT_IMPLEMENTED);
- }
-
- optype = (u8) ACPI_GET_OP_CLASS (op_info);
- first_arg = op->value.arg;
-
- /* Init the walk state */
-
- walk_state->num_operands = 0;
- walk_state->return_desc = NULL;
- walk_state->op_info = op_info;
- walk_state->opcode = opcode;
-
-
- /* Call debugger for single step support (DEBUG build only) */
-
- DEBUGGER_EXEC (status = acpi_db_single_step (walk_state, op, optype));
- DEBUGGER_EXEC (if (ACPI_FAILURE (status)) {return (status);});
-
-
- /* Decode the opcode */
-
- switch (optype) {
- case OPTYPE_UNDEFINED:
-
- return (AE_NOT_IMPLEMENTED);
- break;
-
-
- case OPTYPE_BOGUS:
- break;
-
- case OPTYPE_CONSTANT: /* argument type only */
- case OPTYPE_LITERAL: /* argument type only */
- case OPTYPE_DATA_TERM: /* argument type only */
- case OPTYPE_LOCAL_VARIABLE: /* argument type only */
- case OPTYPE_METHOD_ARGUMENT: /* argument type only */
- break;
-
-
- /* most operators with arguments */
-
- case OPTYPE_MONADIC1:
- case OPTYPE_DYADIC1:
- case OPTYPE_MONADIC2:
- case OPTYPE_MONADIC2_r:
- case OPTYPE_DYADIC2:
- case OPTYPE_DYADIC2_r:
- case OPTYPE_DYADIC2_s:
- case OPTYPE_RECONFIGURATION:
- case OPTYPE_INDEX:
- case OPTYPE_MATCH:
- case OPTYPE_FATAL:
-
-
- /* Build resolved operand stack */
-
- status = acpi_ds_create_operands (walk_state, first_arg);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- operand_index = walk_state->num_operands - 1;
-
-
- /* Done with this result state (Now that operand stack is built) */
-
- status = acpi_ds_result_stack_pop (walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- switch (optype) {
- case OPTYPE_MONADIC1:
-
- /* 1 Operand, 0 External_result, 0 Internal_result */
-
- status = acpi_aml_exec_monadic1 (opcode, walk_state);
- break;
-
-
- case OPTYPE_MONADIC2:
-
- /* 1 Operand, 0 External_result, 1 Internal_result */
-
- status = acpi_aml_exec_monadic2 (opcode, walk_state, &result_obj);
- break;
-
-
- case OPTYPE_MONADIC2_r:
-
- /* 1 Operand, 1 External_result, 1 Internal_result */
-
- status = acpi_aml_exec_monadic2_r (opcode, walk_state, &result_obj);
- break;
-
-
- case OPTYPE_DYADIC1:
-
- /* 2 Operands, 0 External_result, 0 Internal_result */
-
- status = acpi_aml_exec_dyadic1 (opcode, walk_state);
- break;
-
-
- case OPTYPE_DYADIC2:
-
- /* 2 Operands, 0 External_result, 1 Internal_result */
-
- status = acpi_aml_exec_dyadic2 (opcode, walk_state, &result_obj);
- break;
-
-
- case OPTYPE_DYADIC2_r:
-
- /* 2 Operands, 1 or 2 External_results, 1 Internal_result */
-
- status = acpi_aml_exec_dyadic2_r (opcode, walk_state, &result_obj);
- break;
-
-
- case OPTYPE_DYADIC2_s: /* Synchronization Operator */
-
- /* 2 Operands, 0 External_result, 1 Internal_result */
-
- status = acpi_aml_exec_dyadic2_s (opcode, walk_state, &result_obj);
- break;
-
-
- case OPTYPE_INDEX: /* Type 2 opcode with 3 operands */
-
- /* 3 Operands, 1 External_result, 1 Internal_result */
-
- status = acpi_aml_exec_index (walk_state, &result_obj);
- break;
-
-
- case OPTYPE_MATCH: /* Type 2 opcode with 6 operands */
-
- /* 6 Operands, 0 External_result, 1 Internal_result */
-
- status = acpi_aml_exec_match (walk_state, &result_obj);
- break;
-
-
- case OPTYPE_RECONFIGURATION:
-
- /* 1 or 2 operands, 0 Internal Result */
-
- status = acpi_aml_exec_reconfiguration (opcode, walk_state);
- break;
-
-
- case OPTYPE_FATAL:
-
- /* 3 Operands, 0 External_result, 0 Internal_result */
-
- status = acpi_aml_exec_fatal (walk_state);
- break;
- }
-
- /*
- * If a result object was returned from above, push it on the
- * current result stack
- */
- if (ACPI_SUCCESS (status) &&
- result_obj) {
- status = acpi_ds_result_push (result_obj, walk_state);
- }
-
- break;
-
-
- case OPTYPE_CONTROL: /* Type 1 opcode, IF/ELSE/WHILE/NOOP */
-
- /* 1 Operand, 0 External_result, 0 Internal_result */
-
- status = acpi_ds_exec_end_control_op (walk_state, op);
-
- acpi_ds_result_stack_pop (walk_state);
- break;
-
-
- case OPTYPE_METHOD_CALL:
-
- /*
- * (AML_METHODCALL) Op->Value->Arg->Node contains
- * the method Node pointer
- */
- /* Next_op points to the op that holds the method name */
-
- next_op = first_arg;
- node = next_op->node;
-
- /* Next_op points to first argument op */
-
- next_op = next_op->next;
-
- /*
- * Get the method's arguments and put them on the operand stack
- */
- status = acpi_ds_create_operands (walk_state, next_op);
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- /*
- * Since the operands will be passed to another
- * control method, we must resolve all local
- * references here (Local variables, arguments
- * to *this* method, etc.)
- */
-
- status = acpi_ds_resolve_operands (walk_state);
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- /*
- * Tell the walk loop to preempt this running method and
- * execute the new method
- */
- status = AE_CTRL_TRANSFER;
-
- /*
- * Return now; we don't want to disturb anything,
- * especially the operand count!
- */
- return (status);
- break;
-
-
- case OPTYPE_CREATE_FIELD:
-
- status = acpi_ds_load2_end_op (walk_state, op);
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- status = acpi_ds_eval_field_unit_operands (walk_state, op);
- break;
-
-
- case OPTYPE_NAMED_OBJECT:
-
- status = acpi_ds_load2_end_op (walk_state, op);
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- switch (op->opcode) {
- case AML_REGION_OP:
-
- status = acpi_ds_eval_region_operands (walk_state, op);
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- status = acpi_ds_result_stack_pop (walk_state);
- break;
-
-
- case AML_METHOD_OP:
- break;
-
-
- case AML_ALIAS_OP:
-
- /* Alias creation was already handled by call
- to psxload above */
- break;
-
-
- default:
- /* Nothing needs to be done */
-
- status = AE_OK;
- break;
- }
-
- break;
-
- default:
-
- status = AE_NOT_IMPLEMENTED;
- break;
- }
-
-
- /*
- * ACPI 2.0 support for 64-bit integers:
- * Truncate numeric result value if we are executing from a 32-bit ACPI table
- */
- acpi_aml_truncate_for32bit_table (result_obj, walk_state);
-
- /*
- * Check if we just completed the evaluation of a
- * conditional predicate
- */
-
- if ((walk_state->control_state) &&
- (walk_state->control_state->common.state ==
- CONTROL_PREDICATE_EXECUTING) &&
- (walk_state->control_state->control.predicate_op == op)) {
- status = acpi_ds_get_predicate_value (walk_state, op, (NATIVE_UINT) result_obj);
- result_obj = NULL;
- }
-
-
-cleanup:
- if (result_obj) {
- /* Break to debugger to display result */
-
- DEBUGGER_EXEC (acpi_db_display_result_object (result_obj, walk_state));
-
- /*
- * Delete the result op if and only if:
- * Parent will not use the result -- such as any
- * non-nested type2 op in a method (parent will be method)
- */
- acpi_ds_delete_result_if_not_used (op, result_obj, walk_state);
- }
-
- /* Always clear the object stack */
-
- /* TBD: [Investigate] Clear stack of return value,
- but don't delete it */
- walk_state->num_operands = 0;
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dswload.c b/reactos/drivers/bus/acpi/dispatcher/dswload.c
deleted file mode 100644
index b810d5f6b4a..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dswload.c
+++ /dev/null
@@ -1,672 +0,0 @@
-/******************************************************************************
- *
- * Module Name: dswload - Dispatcher namespace load callbacks
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dswload")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_load1_begin_op
- *
- * PARAMETERS: Walk_state - Current state of the parse tree walk
- * Op - Op that has been just been reached in the
- * walk; Arguments have not been evaluated yet.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Descending callback used during the loading of ACPI tables.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_load1_begin_op (
- u16 opcode,
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT **out_op)
-{
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status;
- OBJECT_TYPE_INTERNAL data_type;
- NATIVE_CHAR *path;
-
-
- /* We are only interested in opcodes that have an associated name */
-
- if (!acpi_ps_is_named_op (opcode)) {
- *out_op = op;
- return (AE_OK);
- }
-
-
- /* Check if this object has already been installed in the namespace */
-
- if (op && op->node) {
- *out_op = op;
- return (AE_OK);
- }
-
- path = acpi_ps_get_next_namestring (walk_state->parser_state);
-
- /* Map the raw opcode into an internal object type */
-
- data_type = acpi_ds_map_named_opcode_to_data_type (opcode);
-
-
-
- /*
- * Enter the named type into the internal namespace. We enter the name
- * as we go downward in the parse tree. Any necessary subobjects that involve
- * arguments to the opcode must be created as we go back up the parse tree later.
- */
- status = acpi_ns_lookup (walk_state->scope_info, path,
- data_type, IMODE_LOAD_PASS1,
- NS_NO_UPSEARCH, walk_state, &(node));
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- if (!op) {
- /* Create a new op */
-
- op = acpi_ps_alloc_op (opcode);
- if (!op) {
- return (AE_NO_MEMORY);
- }
- }
-
- /* Initialize */
-
- ((ACPI_PARSE2_OBJECT *)op)->name = node->name;
-
- /*
- * Put the Node in the "op" object that the parser uses, so we
- * can get it again quickly when this scope is closed
- */
- op->node = node;
-
-
- acpi_ps_append_arg (acpi_ps_get_parent_scope (walk_state->parser_state), op);
-
- *out_op = op;
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_load1_end_op
- *
- * PARAMETERS: Walk_state - Current state of the parse tree walk
- * Op - Op that has been just been completed in the
- * walk; Arguments have now been evaluated.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Ascending callback used during the loading of the namespace,
- * both control methods and everything else.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_load1_end_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op)
-{
- OBJECT_TYPE_INTERNAL data_type;
-
-
- /* We are only interested in opcodes that have an associated name */
-
- if (!acpi_ps_is_named_op (op->opcode)) {
- return (AE_OK);
- }
-
-
- /* Get the type to determine if we should pop the scope */
-
- data_type = acpi_ds_map_named_opcode_to_data_type (op->opcode);
-
- if (op->opcode == AML_NAME_OP) {
- /* For Name opcode, check the argument */
-
- if (op->value.arg) {
- data_type = acpi_ds_map_opcode_to_data_type (
- (op->value.arg)->opcode, NULL);
- ((ACPI_NAMESPACE_NODE *)op->node)->type =
- (u8) data_type;
- }
- }
-
-
- /* Pop the scope stack */
-
- if (acpi_ns_opens_scope (data_type)) {
-
- acpi_ds_scope_stack_pop (walk_state);
- }
-
- return (AE_OK);
-
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_load2_begin_op
- *
- * PARAMETERS: Walk_state - Current state of the parse tree walk
- * Op - Op that has been just been reached in the
- * walk; Arguments have not been evaluated yet.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Descending callback used during the loading of ACPI tables.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_load2_begin_op (
- u16 opcode,
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT **out_op)
-{
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status;
- OBJECT_TYPE_INTERNAL data_type;
- NATIVE_CHAR *buffer_ptr;
- void *original = NULL;
-
-
- /* We only care about Namespace opcodes here */
-
- if (!acpi_ps_is_namespace_op (opcode) &&
- opcode != AML_NAMEPATH_OP) {
- return (AE_OK);
- }
-
-
- /* Temp! same code as in psparse */
-
- if (!acpi_ps_is_named_op (opcode)) {
- return (AE_OK);
- }
-
- if (op) {
- /*
- * Get the name we are going to enter or lookup in the namespace
- */
- if (opcode == AML_NAMEPATH_OP) {
- /* For Namepath op, get the path string */
-
- buffer_ptr = op->value.string;
- if (!buffer_ptr) {
- /* No name, just exit */
-
- return (AE_OK);
- }
- }
-
- else {
- /* Get name from the op */
-
- buffer_ptr = (NATIVE_CHAR *) &((ACPI_PARSE2_OBJECT *)op)->name;
- }
- }
-
- else {
- buffer_ptr = acpi_ps_get_next_namestring (walk_state->parser_state);
- }
-
-
- /* Map the raw opcode into an internal object type */
-
- data_type = acpi_ds_map_named_opcode_to_data_type (opcode);
-
-
- if (opcode == AML_DEF_FIELD_OP ||
- opcode == AML_BANK_FIELD_OP ||
- opcode == AML_INDEX_FIELD_OP) {
- node = NULL;
- status = AE_OK;
- }
-
- else if (opcode == AML_NAMEPATH_OP) {
- /*
- * The Name_path is an object reference to an existing object. Don't enter the
- * name into the namespace, but look it up for use later
- */
- status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr,
- data_type, IMODE_EXECUTE,
- NS_SEARCH_PARENT, walk_state,
- &(node));
- }
-
- else {
- if (op && op->node) {
- original = op->node;
- node = op->node;
-
- if (acpi_ns_opens_scope (data_type)) {
- status = acpi_ds_scope_stack_push (node,
- data_type,
- walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- }
- return (AE_OK);
- }
-
- /*
- * Enter the named type into the internal namespace. We enter the name
- * as we go downward in the parse tree. Any necessary subobjects that involve
- * arguments to the opcode must be created as we go back up the parse tree later.
- */
- status = acpi_ns_lookup (walk_state->scope_info, buffer_ptr,
- data_type, IMODE_EXECUTE,
- NS_NO_UPSEARCH, walk_state,
- &(node));
- }
-
- if (ACPI_SUCCESS (status)) {
- if (!op) {
- /* Create a new op */
-
- op = acpi_ps_alloc_op (opcode);
- if (!op) {
- return (AE_NO_MEMORY);
- }
-
- /* Initialize */
-
- ((ACPI_PARSE2_OBJECT *)op)->name = node->name;
- *out_op = op;
- }
-
-
- /*
- * Put the Node in the "op" object that the parser uses, so we
- * can get it again quickly when this scope is closed
- */
- op->node = node;
-
- }
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_load2_end_op
- *
- * PARAMETERS: Walk_state - Current state of the parse tree walk
- * Op - Op that has been just been completed in the
- * walk; Arguments have now been evaluated.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Ascending callback used during the loading of the namespace,
- * both control methods and everything else.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_load2_end_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op)
-{
- ACPI_STATUS status = AE_OK;
- OBJECT_TYPE_INTERNAL data_type;
- ACPI_NAMESPACE_NODE *node;
- ACPI_PARSE_OBJECT *arg;
- ACPI_NAMESPACE_NODE *new_node;
-
-
- if (!acpi_ps_is_namespace_object_op (op->opcode)) {
- return (AE_OK);
- }
-
- if (op->opcode == AML_SCOPE_OP) {
- if (((ACPI_PARSE2_OBJECT *)op)->name == -1) {
- return (AE_OK);
- }
- }
-
-
- data_type = acpi_ds_map_named_opcode_to_data_type (op->opcode);
-
- /*
- * Get the Node/name from the earlier lookup
- * (It was saved in the *op structure)
- */
- node = op->node;
-
- /*
- * Put the Node on the object stack (Contains the ACPI Name of
- * this object)
- */
-
- walk_state->operands[0] = (void *) node;
- walk_state->num_operands = 1;
-
- /* Pop the scope stack */
-
- if (acpi_ns_opens_scope (data_type)) {
-
- acpi_ds_scope_stack_pop (walk_state);
- }
-
-
- /*
- * Named operations are as follows:
- *
- * AML_SCOPE
- * AML_DEVICE
- * AML_THERMALZONE
- * AML_METHOD
- * AML_POWERRES
- * AML_PROCESSOR
- * AML_FIELD
- * AML_INDEXFIELD
- * AML_BANKFIELD
- * AML_NAMEDFIELD
- * AML_NAME
- * AML_ALIAS
- * AML_MUTEX
- * AML_EVENT
- * AML_OPREGION
- * AML_CREATEFIELD
- * AML_CREATEBITFIELD
- * AML_CREATEBYTEFIELD
- * AML_CREATEWORDFIELD
- * AML_CREATEDWORDFIELD
- * AML_METHODCALL
- */
-
-
- /* Decode the opcode */
-
- arg = op->value.arg;
-
- switch (op->opcode) {
-
- case AML_CREATE_FIELD_OP:
- case AML_BIT_FIELD_OP:
- case AML_BYTE_FIELD_OP:
- case AML_WORD_FIELD_OP:
- case AML_DWORD_FIELD_OP:
-
- /*
- * Create the field object, but the field buffer and index must
- * be evaluated later during the execution phase
- */
-
- /* Get the Name_string argument */
-
- if (op->opcode == AML_CREATE_FIELD_OP) {
- arg = acpi_ps_get_arg (op, 3);
- }
- else {
- /* Create Bit/Byte/Word/Dword field */
-
- arg = acpi_ps_get_arg (op, 2);
- }
-
- /*
- * Enter the Name_string into the namespace
- */
-
- status = acpi_ns_lookup (walk_state->scope_info,
- arg->value.string,
- INTERNAL_TYPE_DEF_ANY,
- IMODE_LOAD_PASS1,
- NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
- walk_state, &(new_node));
-
- if (ACPI_SUCCESS (status)) {
- /* We could put the returned object (Node) on the object stack for later, but
- * for now, we will put it in the "op" object that the parser uses, so we
- * can get it again at the end of this scope
- */
- op->node = new_node;
-
- /*
- * If there is no object attached to the node, this node was just created and
- * we need to create the field object. Otherwise, this was a lookup of an
- * existing node and we don't want to create the field object again.
- */
- if (!new_node->object) {
- /*
- * The Field definition is not fully parsed at this time.
- * (We must save the address of the AML for the buffer and index operands)
- */
- status = acpi_aml_exec_create_field (((ACPI_PARSE2_OBJECT *) op)->data,
- ((ACPI_PARSE2_OBJECT *) op)->length,
- new_node, walk_state);
- }
- }
-
-
- break;
-
-
- case AML_METHODCALL_OP:
-
- /*
- * Lookup the method name and save the Node
- */
-
- status = acpi_ns_lookup (walk_state->scope_info, arg->value.string,
- ACPI_TYPE_ANY, IMODE_LOAD_PASS2,
- NS_SEARCH_PARENT | NS_DONT_OPEN_SCOPE,
- walk_state, &(new_node));
-
- if (ACPI_SUCCESS (status)) {
-
-/* has name already been resolved by here ??*/
-
- /* TBD: [Restructure] Make sure that what we found is indeed a method! */
- /* We didn't search for a method on purpose, to see if the name would resolve! */
-
- /* We could put the returned object (Node) on the object stack for later, but
- * for now, we will put it in the "op" object that the parser uses, so we
- * can get it again at the end of this scope
- */
- op->node = new_node;
- }
-
-
- break;
-
-
- case AML_PROCESSOR_OP:
-
- /* Nothing to do other than enter object into namespace */
-
- status = acpi_aml_exec_create_processor (op, (ACPI_HANDLE) node);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- break;
-
-
- case AML_POWER_RES_OP:
-
- /* Nothing to do other than enter object into namespace */
-
- status = acpi_aml_exec_create_power_resource (op, (ACPI_HANDLE) node);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- break;
-
-
- case AML_THERMAL_ZONE_OP:
-
- /* Nothing to do other than enter object into namespace */
-
- break;
-
-
- case AML_DEF_FIELD_OP:
-
- arg = op->value.arg;
-
- status = acpi_ds_create_field (op, arg->node, walk_state);
- break;
-
-
- case AML_INDEX_FIELD_OP:
-
- arg = op->value.arg;
-
- status = acpi_ds_create_index_field (op, (ACPI_HANDLE) arg->node,
- walk_state);
- break;
-
-
- case AML_BANK_FIELD_OP:
-
- arg = op->value.arg;
- status = acpi_ds_create_bank_field (op, arg->node, walk_state);
- break;
-
-
- /*
- * Method_op Pkg_length Names_string Method_flags Term_list
- */
- case AML_METHOD_OP:
-
- if (!node->object) {
- status = acpi_aml_exec_create_method (((ACPI_PARSE2_OBJECT *) op)->data,
- ((ACPI_PARSE2_OBJECT *) op)->length,
- arg->value.integer, (ACPI_HANDLE) node);
- }
-
- break;
-
-
- case AML_MUTEX_OP:
-
- status = acpi_ds_create_operands (walk_state, arg);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- status = acpi_aml_exec_create_mutex (walk_state);
- break;
-
-
- case AML_EVENT_OP:
-
- status = acpi_ds_create_operands (walk_state, arg);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- status = acpi_aml_exec_create_event (walk_state);
- break;
-
-
- case AML_REGION_OP:
-
- if (node->object) {
- break;
- }
-
-
- /*
- * The Op_region is not fully parsed at this time. Only valid argument is the Space_id.
- * (We must save the address of the AML of the address and length operands)
- */
-
- status = acpi_aml_exec_create_region (((ACPI_PARSE2_OBJECT *) op)->data,
- ((ACPI_PARSE2_OBJECT *) op)->length,
- (ACPI_ADDRESS_SPACE_TYPE) arg->value.integer,
- walk_state);
-
- break;
-
-
- /* Namespace Modifier Opcodes */
-
- case AML_ALIAS_OP:
-
- status = acpi_ds_create_operands (walk_state, arg);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- status = acpi_aml_exec_create_alias (walk_state);
- break;
-
-
- case AML_NAME_OP:
-
- /*
- * Because of the execution pass through the non-control-method
- * parts of the table, we can arrive here twice. Only init
- * the named object node the first time through
- */
-
- if (!node->object) {
- status = acpi_ds_create_node (walk_state, node, op);
- }
-
- break;
-
-
- case AML_NAMEPATH_OP:
-
- break;
-
-
- default:
- break;
- }
-
-
-cleanup:
-
- /* Remove the Node pushed at the very beginning */
-
- acpi_ds_obj_stack_pop (1, walk_state);
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dswscope.c b/reactos/drivers/bus/acpi/dispatcher/dswscope.c
deleted file mode 100644
index 87bdfd49bce..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dswscope.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/******************************************************************************
- *
- * Module Name: dswscope - Scope stack manipulation
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dswscope")
-
-
-#define STACK_POP(head) head
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ds_scope_stack_clear
- *
- * PARAMETERS: None
- *
- * DESCRIPTION: Pop (and free) everything on the scope stack except the
- * root scope object (which remains at the stack top.)
- *
- ***************************************************************************/
-
-void
-acpi_ds_scope_stack_clear (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *scope_info;
-
-
- while (walk_state->scope_info) {
- /* Pop a scope off the stack */
-
- scope_info = walk_state->scope_info;
- walk_state->scope_info = scope_info->scope.next;
-
- acpi_cm_delete_generic_state (scope_info);
- }
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ds_scope_stack_push
- *
- * PARAMETERS: *Node, - Name to be made current
- * Type, - Type of frame being pushed
- *
- * DESCRIPTION: Push the current scope on the scope stack, and make the
- * passed Node current.
- *
- ***************************************************************************/
-
-ACPI_STATUS
-acpi_ds_scope_stack_push (
- ACPI_NAMESPACE_NODE *node,
- OBJECT_TYPE_INTERNAL type,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *scope_info;
-
-
- if (!node) {
- /* invalid scope */
-
- REPORT_ERROR (("Ds_scope_stack_push: null scope passed\n"));
- return (AE_BAD_PARAMETER);
- }
-
- /* Make sure object type is valid */
-
- if (!acpi_aml_validate_object_type (type)) {
- REPORT_WARNING (("Ds_scope_stack_push: type code out of range\n"));
- }
-
-
- /* Allocate a new scope object */
-
- scope_info = acpi_cm_create_generic_state ();
- if (!scope_info) {
- return (AE_NO_MEMORY);
- }
-
- /* Init new scope object */
-
- scope_info->scope.node = node;
- scope_info->common.value = (u16) type;
-
- /* Push new scope object onto stack */
-
- acpi_cm_push_generic_state (&walk_state->scope_info, scope_info);
-
- return (AE_OK);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ds_scope_stack_pop
- *
- * PARAMETERS: Type - The type of frame to be found
- *
- * DESCRIPTION: Pop the scope stack until a frame of the requested type
- * is found.
- *
- * RETURN: Count of frames popped. If no frame of the requested type
- * was found, the count is returned as a negative number and
- * the scope stack is emptied (which sets the current scope
- * to the root). If the scope stack was empty at entry, the
- * function is a no-op and returns 0.
- *
- ***************************************************************************/
-
-ACPI_STATUS
-acpi_ds_scope_stack_pop (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *scope_info;
-
-
- /*
- * Pop scope info object off the stack.
- */
-
- scope_info = acpi_cm_pop_generic_state (&walk_state->scope_info);
- if (!scope_info) {
- return (AE_STACK_UNDERFLOW);
- }
-
- acpi_cm_delete_generic_state (scope_info);
-
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/dispatcher/dswstate.c b/reactos/drivers/bus/acpi/dispatcher/dswstate.c
deleted file mode 100644
index 80e9933074a..00000000000
--- a/reactos/drivers/bus/acpi/dispatcher/dswstate.c
+++ /dev/null
@@ -1,872 +0,0 @@
-/******************************************************************************
- *
- * Module Name: dswstate - Dispatcher parse tree walk management routines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_DISPATCHER
- MODULE_NAME ("dswstate")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_result_insert
- *
- * PARAMETERS: Object - Object to push
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Push an object onto this walk's result stack
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_result_insert (
- void *object,
- u32 index,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *state;
-
-
- state = walk_state->results;
- if (!state) {
- return (AE_NOT_EXIST);
- }
-
- if (index >= OBJ_NUM_OPERANDS) {
- return (AE_BAD_PARAMETER);
- }
-
- if (!object) {
- return (AE_BAD_PARAMETER);
- }
-
- state->results.obj_desc [index] = object;
- state->results.num_results++;
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_result_remove
- *
- * PARAMETERS: Object - Where to return the popped object
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Pop an object off the bottom of this walk's result stack. In
- * other words, this is a FIFO.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_result_remove (
- ACPI_OPERAND_OBJECT **object,
- u32 index,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *state;
-
-
- state = walk_state->results;
- if (!state) {
- return (AE_NOT_EXIST);
- }
-
-
-
- /* Check for a valid result object */
-
- if (!state->results.obj_desc [index]) {
- return (AE_AML_NO_RETURN_VALUE);
- }
-
- /* Remove the object */
-
- state->results.num_results--;
-
- *object = state->results.obj_desc [index];
- state->results.obj_desc [index] = NULL;
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_result_pop
- *
- * PARAMETERS: Object - Where to return the popped object
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Pop an object off the bottom of this walk's result stack. In
- * other words, this is a FIFO.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_result_pop (
- ACPI_OPERAND_OBJECT **object,
- ACPI_WALK_STATE *walk_state)
-{
- u32 index;
- ACPI_GENERIC_STATE *state;
-
-
- state = walk_state->results;
- if (!state) {
- return (AE_OK);
- }
-
-
- if (!state->results.num_results) {
- return (AE_AML_NO_RETURN_VALUE);
- }
-
- /* Remove top element */
-
- state->results.num_results--;
-
- for (index = OBJ_NUM_OPERANDS; index; index--) {
- /* Check for a valid result object */
-
- if (state->results.obj_desc [index -1]) {
- *object = state->results.obj_desc [index -1];
- state->results.obj_desc [index -1] = NULL;
-
- return (AE_OK);
- }
- }
-
-
- return (AE_AML_NO_RETURN_VALUE);
-}
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_result_pop_from_bottom
- *
- * PARAMETERS: Object - Where to return the popped object
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Pop an object off the bottom of this walk's result stack. In
- * other words, this is a FIFO.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_result_pop_from_bottom (
- ACPI_OPERAND_OBJECT **object,
- ACPI_WALK_STATE *walk_state)
-{
- u32 index;
- ACPI_GENERIC_STATE *state;
-
-
- state = walk_state->results;
- if (!state) {
- return (AE_NOT_EXIST);
- }
-
-
- if (!state->results.num_results) {
- return (AE_AML_NO_RETURN_VALUE);
- }
-
- /* Remove Bottom element */
-
- *object = state->results.obj_desc [0];
-
-
- /* Push entire stack down one element */
-
- for (index = 0; index < state->results.num_results; index++) {
- state->results.obj_desc [index] = state->results.obj_desc [index + 1];
- }
-
- state->results.num_results--;
-
- /* Check for a valid result object */
-
- if (!*object) {
- return (AE_AML_NO_RETURN_VALUE);
- }
-
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_result_push
- *
- * PARAMETERS: Object - Where to return the popped object
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Push an object onto the current result stack
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_result_push (
- ACPI_OPERAND_OBJECT *object,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *state;
-
-
- state = walk_state->results;
- if (!state) {
- return (AE_AML_INTERNAL);
- }
-
- if (state->results.num_results == OBJ_NUM_OPERANDS) {
- return (AE_STACK_OVERFLOW);
- }
-
- if (!object) {
- return (AE_BAD_PARAMETER);
- }
-
-
- state->results.obj_desc [state->results.num_results] = object;
- state->results.num_results++;
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_result_stack_push
- *
- * PARAMETERS: Object - Object to push
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_result_stack_push (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *state;
-
-
- state = acpi_cm_create_generic_state ();
- if (!state) {
- return (AE_NO_MEMORY);
- }
-
- acpi_cm_push_generic_state (&walk_state->results, state);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_result_stack_pop
- *
- * PARAMETERS: Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_result_stack_pop (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *state;
-
-
- /* Check for stack underflow */
-
- if (walk_state->results == NULL) {
- return (AE_AML_NO_OPERAND);
- }
-
-
- state = acpi_cm_pop_generic_state (&walk_state->results);
-
- acpi_cm_delete_generic_state (state);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_obj_stack_delete_all
- *
- * PARAMETERS: Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Clear the object stack by deleting all objects that are on it.
- * Should be used with great care, if at all!
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_obj_stack_delete_all (
- ACPI_WALK_STATE *walk_state)
-{
- u32 i;
-
-
- /* The stack size is configurable, but fixed */
-
- for (i = 0; i < OBJ_NUM_OPERANDS; i++) {
- if (walk_state->operands[i]) {
- acpi_cm_remove_reference (walk_state->operands[i]);
- walk_state->operands[i] = NULL;
- }
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_obj_stack_push
- *
- * PARAMETERS: Object - Object to push
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Push an object onto this walk's object/operand stack
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_obj_stack_push (
- void *object,
- ACPI_WALK_STATE *walk_state)
-{
-
-
- /* Check for stack overflow */
-
- if (walk_state->num_operands >= OBJ_NUM_OPERANDS) {
- return (AE_STACK_OVERFLOW);
- }
-
- /* Put the object onto the stack */
-
- walk_state->operands [walk_state->num_operands] = object;
- walk_state->num_operands++;
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_obj_stack_pop_object
- *
- * PARAMETERS: Pop_count - Number of objects/entries to pop
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Pop this walk's object stack. Objects on the stack are NOT
- * deleted by this routine.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_obj_stack_pop_object (
- ACPI_OPERAND_OBJECT **object,
- ACPI_WALK_STATE *walk_state)
-{
-
-
- /* Check for stack underflow */
-
- if (walk_state->num_operands == 0) {
- return (AE_AML_NO_OPERAND);
- }
-
-
- /* Pop the stack */
-
- walk_state->num_operands--;
-
- /* Check for a valid operand */
-
- if (!walk_state->operands [walk_state->num_operands]) {
- return (AE_AML_NO_OPERAND);
- }
-
- /* Get operand and set stack entry to null */
-
- *object = walk_state->operands [walk_state->num_operands];
- walk_state->operands [walk_state->num_operands] = NULL;
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_obj_stack_pop
- *
- * PARAMETERS: Pop_count - Number of objects/entries to pop
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Pop this walk's object stack. Objects on the stack are NOT
- * deleted by this routine.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_obj_stack_pop (
- u32 pop_count,
- ACPI_WALK_STATE *walk_state)
-{
- u32 i;
-
-
- for (i = 0; i < pop_count; i++) {
- /* Check for stack underflow */
-
- if (walk_state->num_operands == 0) {
- return (AE_STACK_UNDERFLOW);
- }
-
- /* Just set the stack entry to null */
-
- walk_state->num_operands--;
- walk_state->operands [walk_state->num_operands] = NULL;
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_obj_stack_pop_and_delete
- *
- * PARAMETERS: Pop_count - Number of objects/entries to pop
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Pop this walk's object stack and delete each object that is
- * popped off.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ds_obj_stack_pop_and_delete (
- u32 pop_count,
- ACPI_WALK_STATE *walk_state)
-{
- u32 i;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- for (i = 0; i < pop_count; i++) {
- /* Check for stack underflow */
-
- if (walk_state->num_operands == 0) {
- return (AE_STACK_UNDERFLOW);
- }
-
- /* Pop the stack and delete an object if present in this stack entry */
-
- walk_state->num_operands--;
- obj_desc = walk_state->operands [walk_state->num_operands];
- if (obj_desc) {
- acpi_cm_remove_reference (walk_state->operands [walk_state->num_operands]);
- walk_state->operands [walk_state->num_operands] = NULL;
- }
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_obj_stack_get_value
- *
- * PARAMETERS: Index - Stack index whose value is desired. Based
- * on the top of the stack (index=0 == top)
- * Walk_state - Current Walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Retrieve an object from this walk's object stack. Index must
- * be within the range of the current stack pointer.
- *
- ******************************************************************************/
-
-void *
-acpi_ds_obj_stack_get_value (
- u32 index,
- ACPI_WALK_STATE *walk_state)
-{
-
-
- /* Can't do it if the stack is empty */
-
- if (walk_state->num_operands == 0) {
- return (NULL);
- }
-
- /* or if the index is past the top of the stack */
-
- if (index > (walk_state->num_operands - (u32) 1)) {
- return (NULL);
- }
-
-
- return (walk_state->operands[(NATIVE_UINT)(walk_state->num_operands - 1) -
- index]);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_get_current_walk_state
- *
- * PARAMETERS: Walk_list - Get current active state for this walk list
- *
- * RETURN: Pointer to the current walk state
- *
- * DESCRIPTION: Get the walk state that is at the head of the list (the "current"
- * walk state.
- *
- ******************************************************************************/
-
-ACPI_WALK_STATE *
-acpi_ds_get_current_walk_state (
- ACPI_WALK_LIST *walk_list)
-
-{
-
- if (!walk_list) {
- return (NULL);
- }
-
- return (walk_list->walk_state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_push_walk_state
- *
- * PARAMETERS: Walk_state - State to push
- * Walk_list - The list that owns the walk stack
- *
- * RETURN: None
- *
- * DESCRIPTION: Place the Walk_state at the head of the state list.
- *
- ******************************************************************************/
-
-static void
-acpi_ds_push_walk_state (
- ACPI_WALK_STATE *walk_state,
- ACPI_WALK_LIST *walk_list)
-{
-
-
- walk_state->next = walk_list->walk_state;
- walk_list->walk_state = walk_state;
-
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_pop_walk_state
- *
- * PARAMETERS: Walk_list - The list that owns the walk stack
- *
- * RETURN: A Walk_state object popped from the stack
- *
- * DESCRIPTION: Remove and return the walkstate object that is at the head of
- * the walk stack for the given walk list. NULL indicates that
- * the list is empty.
- *
- ******************************************************************************/
-
-ACPI_WALK_STATE *
-acpi_ds_pop_walk_state (
- ACPI_WALK_LIST *walk_list)
-{
- ACPI_WALK_STATE *walk_state;
-
-
- walk_state = walk_list->walk_state;
-
- if (walk_state) {
- /* Next walk state becomes the current walk state */
-
- walk_list->walk_state = walk_state->next;
-
- /*
- * Don't clear the NEXT field, this serves as an indicator
- * that there is a parent WALK STATE
- * Walk_state->Next = NULL;
- */
- }
-
- return (walk_state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_create_walk_state
- *
- * PARAMETERS: Origin - Starting point for this walk
- * Walk_list - Owning walk list
- *
- * RETURN: Pointer to the new walk state.
- *
- * DESCRIPTION: Allocate and initialize a new walk state. The current walk state
- * is set to this new state.
- *
- ******************************************************************************/
-
-ACPI_WALK_STATE *
-acpi_ds_create_walk_state (
- ACPI_OWNER_ID owner_id,
- ACPI_PARSE_OBJECT *origin,
- ACPI_OPERAND_OBJECT *mth_desc,
- ACPI_WALK_LIST *walk_list)
-{
- ACPI_WALK_STATE *walk_state;
- ACPI_STATUS status;
-
-
- acpi_cm_acquire_mutex (ACPI_MTX_CACHES);
- acpi_gbl_walk_state_cache_requests++;
-
- /* Check the cache first */
-
- if (acpi_gbl_walk_state_cache) {
- /* There is an object available, use it */
-
- walk_state = acpi_gbl_walk_state_cache;
- acpi_gbl_walk_state_cache = walk_state->next;
-
- acpi_gbl_walk_state_cache_hits++;
- acpi_gbl_walk_state_cache_depth--;
-
- acpi_cm_release_mutex (ACPI_MTX_CACHES);
- }
-
- else {
- /* The cache is empty, create a new object */
-
- /* Avoid deadlock with Acpi_cm_callocate */
-
- acpi_cm_release_mutex (ACPI_MTX_CACHES);
-
- walk_state = acpi_cm_callocate (sizeof (ACPI_WALK_STATE));
- if (!walk_state) {
- return (NULL);
- }
- }
-
- walk_state->data_type = ACPI_DESC_TYPE_WALK;
- walk_state->owner_id = owner_id;
- walk_state->origin = origin;
- walk_state->method_desc = mth_desc;
- walk_state->walk_list = walk_list;
-
- /* Init the method args/local */
-
-#ifndef _ACPI_ASL_COMPILER
- acpi_ds_method_data_init (walk_state);
-#endif
-
- /* Create an initial result stack entry */
-
- status = acpi_ds_result_stack_push (walk_state);
- if (ACPI_FAILURE (status)) {
- return (NULL);
- }
-
-
- /* Put the new state at the head of the walk list */
-
- acpi_ds_push_walk_state (walk_state, walk_list);
-
- return (walk_state);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ds_delete_walk_state
- *
- * PARAMETERS: Walk_state - State to delete
- *
- * RETURN: Status
- *
- * DESCRIPTION: Delete a walk state including all internal data structures
- *
- ******************************************************************************/
-
-void
-acpi_ds_delete_walk_state (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_GENERIC_STATE *state;
-
-
- if (!walk_state) {
- return;
- }
-
- if (walk_state->data_type != ACPI_DESC_TYPE_WALK) {
- return;
- }
-
-
- /* Always must free any linked control states */
-
- while (walk_state->control_state) {
- state = walk_state->control_state;
- walk_state->control_state = state->common.next;
-
- acpi_cm_delete_generic_state (state);
- }
-
- /* Always must free any linked parse states */
-
- while (walk_state->scope_info) {
- state = walk_state->scope_info;
- walk_state->scope_info = state->common.next;
-
- acpi_cm_delete_generic_state (state);
- }
-
- /* Always must free any stacked result states */
-
- while (walk_state->results) {
- state = walk_state->results;
- walk_state->results = state->common.next;
-
- acpi_cm_delete_generic_state (state);
- }
-
-
- /* If walk cache is full, just free this wallkstate object */
-
- if (acpi_gbl_walk_state_cache_depth >= MAX_WALK_CACHE_DEPTH) {
- acpi_cm_free (walk_state);
- }
-
- /* Otherwise put this object back into the cache */
-
- else {
- acpi_cm_acquire_mutex (ACPI_MTX_CACHES);
-
- /* Clear the state */
-
- MEMSET (walk_state, 0, sizeof (ACPI_WALK_STATE));
- walk_state->data_type = ACPI_DESC_TYPE_WALK;
-
- /* Put the object at the head of the global cache list */
-
- walk_state->next = acpi_gbl_walk_state_cache;
- acpi_gbl_walk_state_cache = walk_state;
- acpi_gbl_walk_state_cache_depth++;
-
-
- acpi_cm_release_mutex (ACPI_MTX_CACHES);
- }
-
- return;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ds_delete_walk_state_cache
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Purge the global state object cache. Used during subsystem
- * termination.
- *
- ******************************************************************************/
-
-void
-acpi_ds_delete_walk_state_cache (
- void)
-{
- ACPI_WALK_STATE *next;
-
-
- /* Traverse the global cache list */
-
- while (acpi_gbl_walk_state_cache) {
- /* Delete one cached state object */
-
- next = acpi_gbl_walk_state_cache->next;
- acpi_cm_free (acpi_gbl_walk_state_cache);
- acpi_gbl_walk_state_cache = next;
- acpi_gbl_walk_state_cache_depth--;
- }
-
- return;
-}
-
-
diff --git a/reactos/drivers/bus/acpi/events/evevent.c b/reactos/drivers/bus/acpi/events/evevent.c
deleted file mode 100644
index 8fafa3c79a9..00000000000
--- a/reactos/drivers/bus/acpi/events/evevent.c
+++ /dev/null
@@ -1,765 +0,0 @@
-/******************************************************************************
- *
- * Module Name: evevent - Fixed and General Purpose Acpi_event
- * handling and dispatch
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include
-
-#define _COMPONENT ACPI_EVENTS
- MODULE_NAME ("evevent")
-
-
-/**************************************************************************
- *
- * FUNCTION: Acpi_ev_initialize
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Ensures that the system control interrupt (SCI) is properly
- * configured, disables SCI event sources, installs the SCI
- * handler
- *
- *************************************************************************/
-
-ACPI_STATUS
-acpi_ev_initialize (
- void)
-{
- ACPI_STATUS status;
-
-
- /* Make sure we have ACPI tables */
-
- if (!acpi_gbl_DSDT) {
- return (AE_NO_ACPI_TABLES);
- }
-
-
- /* Make sure the BIOS supports ACPI mode */
-
- if (SYS_MODE_LEGACY == acpi_hw_get_mode_capabilities()) {
- return (AE_ERROR);
- }
-
-
- acpi_gbl_original_mode = acpi_hw_get_mode();
-
- /*
- * Initialize the Fixed and General Purpose Acpi_events prior. This is
- * done prior to enabling SCIs to prevent interrupts from occuring
- * before handers are installed.
- */
-
- status = acpi_ev_fixed_event_initialize ();
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- status = acpi_ev_gpe_initialize ();
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Install the SCI handler */
-
- status = acpi_ev_install_sci_handler ();
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /* Install handlers for control method GPE handlers (_Lxx, _Exx) */
-
- status = acpi_ev_init_gpe_control_methods ();
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Install the handler for the Global Lock */
-
- status = acpi_ev_init_global_lock_handler ();
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_fixed_event_initialize
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initialize the Fixed Acpi_event data structures
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ev_fixed_event_initialize(void)
-{
- int i = 0;
-
- /* Initialize the structure that keeps track of fixed event handlers */
-
- for (i = 0; i < NUM_FIXED_EVENTS; i++) {
- acpi_gbl_fixed_event_handlers[i].handler = NULL;
- acpi_gbl_fixed_event_handlers[i].context = NULL;
- }
-
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, TMR_EN, 0);
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, GBL_EN, 0);
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, PWRBTN_EN, 0);
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, SLPBTN_EN, 0);
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, RTC_EN, 0);
-
- return (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_fixed_event_detect
- *
- * PARAMETERS: None
- *
- * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
- *
- * DESCRIPTION: Checks the PM status register for fixed events
- *
- ******************************************************************************/
-
-u32
-acpi_ev_fixed_event_detect(void)
-{
- u32 int_status = INTERRUPT_NOT_HANDLED;
- u32 status_register;
- u32 enable_register;
-
- /*
- * Read the fixed feature status and enable registers, as all the cases
- * depend on their values.
- */
-
- status_register = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, PM1_STS);
- enable_register = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, PM1_EN);
-
-
- /* power management timer roll over */
-
- if ((status_register & ACPI_STATUS_PMTIMER) &&
- (enable_register & ACPI_ENABLE_PMTIMER)) {
- int_status |= acpi_ev_fixed_event_dispatch (ACPI_EVENT_PMTIMER);
- }
-
- /* global event (BIOS want's the global lock) */
-
- if ((status_register & ACPI_STATUS_GLOBAL) &&
- (enable_register & ACPI_ENABLE_GLOBAL)) {
- int_status |= acpi_ev_fixed_event_dispatch (ACPI_EVENT_GLOBAL);
- }
-
- /* power button event */
-
- if ((status_register & ACPI_STATUS_POWER_BUTTON) &&
- (enable_register & ACPI_ENABLE_POWER_BUTTON)) {
- int_status |= acpi_ev_fixed_event_dispatch (ACPI_EVENT_POWER_BUTTON);
- }
-
- /* sleep button event */
-
- if ((status_register & ACPI_STATUS_SLEEP_BUTTON) &&
- (enable_register & ACPI_ENABLE_SLEEP_BUTTON)) {
- int_status |= acpi_ev_fixed_event_dispatch (ACPI_EVENT_SLEEP_BUTTON);
- }
-
- return (int_status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_fixed_event_dispatch
- *
- * PARAMETERS: Event - Event type
- *
- * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
- *
- * DESCRIPTION: Clears the status bit for the requested event, calls the
- * handler that previously registered for the event.
- *
- ******************************************************************************/
-
-u32
-acpi_ev_fixed_event_dispatch (
- u32 event)
-{
- u32 register_id;
-
- /* Clear the status bit */
-
- switch (event) {
- case ACPI_EVENT_PMTIMER:
- register_id = TMR_STS;
- break;
-
- case ACPI_EVENT_GLOBAL:
- register_id = GBL_STS;
- break;
-
- case ACPI_EVENT_POWER_BUTTON:
- register_id = PWRBTN_STS;
- break;
-
- case ACPI_EVENT_SLEEP_BUTTON:
- register_id = SLPBTN_STS;
- break;
-
- case ACPI_EVENT_RTC:
- register_id = RTC_STS;
- break;
-
- default:
- return 0;
- break;
- }
-
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_DO_NOT_LOCK, register_id, 1);
-
- /*
- * Make sure we've got a handler. If not, report an error.
- * The event is disabled to prevent further interrupts.
- */
- if (NULL == acpi_gbl_fixed_event_handlers[event].handler) {
- register_id = (PM1_EN | REGISTER_BIT_ID(register_id));
-
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_DO_NOT_LOCK,
- register_id, 0);
-
- REPORT_ERROR (
- ("Ev_gpe_dispatch: No installed handler for fixed event [%08X]\n",
- event));
-
- return (INTERRUPT_NOT_HANDLED);
- }
-
- /* Invoke the handler */
-
- return ((acpi_gbl_fixed_event_handlers[event].handler)(
- acpi_gbl_fixed_event_handlers[event].context));
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_gpe_initialize
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initialize the GPE data structures
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ev_gpe_initialize (void)
-{
- u32 i;
- u32 j;
- u32 register_index;
- u32 gpe_number;
- u16 gpe0register_count;
- u16 gpe1_register_count;
-
-
- /*
- * Set up various GPE counts
- *
- * You may ask,why are the GPE register block lengths divided by 2?
- * From the ACPI 2.0 Spec, section, 4.7.1.6 General-Purpose Event
- * Registers, we have,
- *
- * "Each register block contains two registers of equal length
- * GPEx_STS and GPEx_EN (where x is 0 or 1). The length of the
- * GPE0_STS and GPE0_EN registers is equal to half the GPE0_LEN
- * The length of the GPE1_STS and GPE1_EN registers is equal to
- * half the GPE1_LEN. If a generic register block is not supported
- * then its respective block pointer and block length values in the
- * FADT table contain zeros. The GPE0_LEN and GPE1_LEN do not need
- * to be the same size."
- */
-
- gpe0register_count = (u16) DIV_2 (acpi_gbl_FADT->gpe0blk_len);
- gpe1_register_count = (u16) DIV_2 (acpi_gbl_FADT->gpe1_blk_len);
- acpi_gbl_gpe_register_count = gpe0register_count + gpe1_register_count;
-
- if (!acpi_gbl_gpe_register_count) {
- REPORT_WARNING (("Zero GPEs are defined in the FADT\n"));
- return (AE_OK);
- }
-
- /*
- * Allocate the Gpe information block
- */
-
- acpi_gbl_gpe_registers = acpi_cm_callocate (acpi_gbl_gpe_register_count *
- sizeof (ACPI_GPE_REGISTERS));
- if (!acpi_gbl_gpe_registers) {
- return (AE_NO_MEMORY);
- }
-
- /*
- * Allocate the Gpe dispatch handler block
- * There are eight distinct GP events per register.
- * Initialization to zeros is sufficient
- */
-
- acpi_gbl_gpe_info = acpi_cm_callocate (MUL_8 (acpi_gbl_gpe_register_count) *
- sizeof (ACPI_GPE_LEVEL_INFO));
- if (!acpi_gbl_gpe_info) {
- acpi_cm_free (acpi_gbl_gpe_registers);
- return (AE_NO_MEMORY);
- }
-
- /* Set the Gpe validation table to GPE_INVALID */
-
- MEMSET (acpi_gbl_gpe_valid, (int) ACPI_GPE_INVALID, NUM_GPE);
-
- /*
- * Initialize the Gpe information and validation blocks. A goal of these
- * blocks is to hide the fact that there are two separate GPE register sets
- * In a given block, the status registers occupy the first half, and
- * the enable registers occupy the second half.
- */
-
- /* GPE Block 0 */
-
- register_index = 0;
-
- for (i = 0; i < gpe0register_count; i++) {
- acpi_gbl_gpe_registers[register_index].status_addr =
- (u16) (ACPI_GET_ADDRESS (acpi_gbl_FADT->Xgpe0blk.address) + i);
-
- acpi_gbl_gpe_registers[register_index].enable_addr =
- (u16) (ACPI_GET_ADDRESS (acpi_gbl_FADT->Xgpe0blk.address) + i + gpe0register_count);
-
- acpi_gbl_gpe_registers[register_index].gpe_base = (u8) MUL_8 (i);
-
- for (j = 0; j < 8; j++) {
- gpe_number = acpi_gbl_gpe_registers[register_index].gpe_base + j;
- acpi_gbl_gpe_valid[gpe_number] = (u8) register_index;
- }
-
- /*
- * Clear the status/enable registers. Note that status registers
- * are cleared by writing a '1', while enable registers are cleared
- * by writing a '0'.
- */
- acpi_os_out8 (acpi_gbl_gpe_registers[register_index].enable_addr, 0x00);
- acpi_os_out8 (acpi_gbl_gpe_registers[register_index].status_addr, 0xFF);
-
- register_index++;
- }
-
- /* GPE Block 1 */
-
- for (i = 0; i < gpe1_register_count; i++) {
- acpi_gbl_gpe_registers[register_index].status_addr =
- (u16) (ACPI_GET_ADDRESS (acpi_gbl_FADT->Xgpe1_blk.address) + i);
-
- acpi_gbl_gpe_registers[register_index].enable_addr =
- (u16) (ACPI_GET_ADDRESS (acpi_gbl_FADT->Xgpe1_blk.address) + i + gpe1_register_count);
-
- acpi_gbl_gpe_registers[register_index].gpe_base =
- (u8) (acpi_gbl_FADT->gpe1_base + MUL_8 (i));
-
- for (j = 0; j < 8; j++) {
- gpe_number = acpi_gbl_gpe_registers[register_index].gpe_base + j;
- acpi_gbl_gpe_valid[gpe_number] = (u8) register_index;
- }
-
- /*
- * Clear the status/enable registers. Note that status registers
- * are cleared by writing a '1', while enable registers are cleared
- * by writing a '0'.
- */
- acpi_os_out8 (acpi_gbl_gpe_registers[register_index].enable_addr, 0x00);
- acpi_os_out8 (acpi_gbl_gpe_registers[register_index].status_addr, 0xFF);
-
- register_index++;
- }
-
- return (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_save_method_info
- *
- * PARAMETERS: None
- *
- * RETURN: None
- *
- * DESCRIPTION: Called from Acpi_walk_namespace. Expects each object to be a
- * control method under the _GPE portion of the namespace.
- * Extract the name and GPE type from the object, saving this
- * information for quick lookup during GPE dispatch
- *
- * The name of each GPE control method is of the form:
- * "_Lnn" or "_Enn"
- * Where:
- * L - means that the GPE is level triggered
- * E - means that the GPE is edge triggered
- * nn - is the GPE number
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-acpi_ev_save_method_info (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *obj_desc,
- void **return_value)
-{
- u32 gpe_number;
- NATIVE_CHAR name[ACPI_NAME_SIZE + 1];
- u8 type;
-
-
- /* Extract the name from the object and convert to a string */
-
- MOVE_UNALIGNED32_TO_32 (name, &((ACPI_NAMESPACE_NODE *) obj_handle)->name);
- name[ACPI_NAME_SIZE] = 0;
-
- /*
- * Edge/Level determination is based on the 2nd s8 of the method name
- */
- if (name[1] == 'L') {
- type = ACPI_EVENT_LEVEL_TRIGGERED;
- }
- else if (name[1] == 'E') {
- type = ACPI_EVENT_EDGE_TRIGGERED;
- }
- else {
- /* Unknown method type, just ignore it! */
-
- return (AE_OK);
- }
-
- /* Convert the last two characters of the name to the Gpe Number */
-
- gpe_number = STRTOUL (&name[2], NULL, 16);
- if (gpe_number == ACPI_UINT32_MAX) {
- /* Conversion failed; invalid method, just ignore it */
-
- return (AE_OK);
- }
-
- /* Ensure that we have a valid GPE number */
-
- if (acpi_gbl_gpe_valid[gpe_number] == ACPI_GPE_INVALID) {
- /* Not valid, all we can do here is ignore it */
-
- return (AE_OK);
- }
-
- /*
- * Now we can add this information to the Gpe_info block
- * for use during dispatch of this GPE.
- */
-
- acpi_gbl_gpe_info [gpe_number].type = type;
- acpi_gbl_gpe_info [gpe_number].method_handle = obj_handle;
-
-
- /*
- * Enable the GPE (SCIs should be disabled at this point)
- */
-
- acpi_hw_enable_gpe (gpe_number);
-
- return (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_init_gpe_control_methods
- *
- * PARAMETERS: None
- *
- * RETURN: None
- *
- * DESCRIPTION: Obtain the control methods associated with the GPEs.
- *
- * NOTE: Must be called AFTER namespace initialization!
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ev_init_gpe_control_methods (void)
-{
- ACPI_STATUS status;
-
-
- /* Get a permanent handle to the _GPE object */
-
- status = acpi_get_handle (NULL, "\\_GPE", &acpi_gbl_gpe_obj_handle);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Traverse the namespace under \_GPE to find all methods there */
-
- status = acpi_walk_namespace (ACPI_TYPE_METHOD, acpi_gbl_gpe_obj_handle,
- ACPI_UINT32_MAX, acpi_ev_save_method_info,
- NULL, NULL);
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_gpe_detect
- *
- * PARAMETERS: None
- *
- * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
- *
- * DESCRIPTION: Detect if any GP events have occurred
- *
- ******************************************************************************/
-
-u32
-acpi_ev_gpe_detect (void)
-{
- u32 int_status = INTERRUPT_NOT_HANDLED;
- u32 i;
- u32 j;
- u8 enabled_status_byte;
- u8 bit_mask;
-
-
- /*
- * Read all of the 8-bit GPE status and enable registers
- * in both of the register blocks, saving all of it.
- * Find all currently active GP events.
- */
-
- for (i = 0; i < acpi_gbl_gpe_register_count; i++) {
- acpi_gbl_gpe_registers[i].status =
- acpi_os_in8 (acpi_gbl_gpe_registers[i].status_addr);
-
- acpi_gbl_gpe_registers[i].enable =
- acpi_os_in8 (acpi_gbl_gpe_registers[i].enable_addr);
-
- /* First check if there is anything active at all in this register */
-
- enabled_status_byte = (u8) (acpi_gbl_gpe_registers[i].status &
- acpi_gbl_gpe_registers[i].enable);
-
- if (!enabled_status_byte) {
- /* No active GPEs in this register, move on */
-
- continue;
- }
-
- /* Now look at the individual GPEs in this byte register */
-
- for (j = 0, bit_mask = 1; j < 8; j++, bit_mask <<= 1) {
- /* Examine one GPE bit */
-
- if (enabled_status_byte & bit_mask) {
- /*
- * Found an active GPE. Dispatch the event to a handler
- * or method.
- */
- int_status |=
- acpi_ev_gpe_dispatch (acpi_gbl_gpe_registers[i].gpe_base + j);
- }
- }
- }
-
- return (int_status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_asynch_execute_gpe_method
- *
- * PARAMETERS: Gpe_number - The 0-based Gpe number
- *
- * RETURN: None
- *
- * DESCRIPTION: Perform the actual execution of a GPE control method. This
- * function is called from an invocation of Acpi_os_queue_for_execution
- * (and therefore does NOT execute at interrupt level) so that
- * the control method itself is not executed in the context of
- * the SCI interrupt handler.
- *
- ******************************************************************************/
-
-static void
-acpi_ev_asynch_execute_gpe_method (
- void *context)
-{
- NATIVE_UINT gpe_number = (NATIVE_UINT) context;
- ACPI_GPE_LEVEL_INFO gpe_info;
-
-
- /*
- * Take a snapshot of the GPE info for this level
- */
- acpi_cm_acquire_mutex (ACPI_MTX_EVENTS);
- gpe_info = acpi_gbl_gpe_info [gpe_number];
- acpi_cm_release_mutex (ACPI_MTX_EVENTS);
-
- /*
- * Method Handler (_Lxx, _Exx):
- * ----------------------------
- * Evaluate the _Lxx/_Exx control method that corresponds to this GPE.
- */
- if (gpe_info.method_handle) {
- acpi_ns_evaluate_by_handle (gpe_info.method_handle, NULL, NULL);
- }
-
- /*
- * Level-Triggered?
- * ----------------
- * If level-triggered we clear the GPE status bit after handling the event.
- */
- if (gpe_info.type & ACPI_EVENT_LEVEL_TRIGGERED) {
- acpi_hw_clear_gpe (gpe_number);
- }
-
- /*
- * Enable the GPE.
- */
- acpi_hw_enable_gpe (gpe_number);
-
- return;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_gpe_dispatch
- *
- * PARAMETERS: Gpe_number - The 0-based Gpe number
- *
- * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
- *
- * DESCRIPTION: Handle and dispatch a General Purpose Acpi_event.
- * Clears the status bit for the requested event.
- *
- * TBD: [Investigate] is this still valid or necessary:
- * The Gpe handler differs from the fixed events in that it clears the enable
- * bit rather than the status bit to clear the interrupt. This allows
- * software outside of interrupt context to determine what caused the SCI and
- * dispatch the correct AML.
- *
- ******************************************************************************/
-
-u32
-acpi_ev_gpe_dispatch (
- u32 gpe_number)
-{
- ACPI_GPE_LEVEL_INFO gpe_info;
-
- /*
- * Valid GPE number?
- */
- if (acpi_gbl_gpe_valid[gpe_number] == ACPI_GPE_INVALID) {
- return (INTERRUPT_NOT_HANDLED);
- }
-
- /*
- * Disable the GPE.
- */
- acpi_hw_disable_gpe (gpe_number);
-
- gpe_info = acpi_gbl_gpe_info [gpe_number];
-
- /*
- * Edge-Triggered?
- * ---------------
- * If edge-triggered, clear the GPE status bit now. Note that
- * level-triggered events are cleared after the GPE is serviced.
- */
- if (gpe_info.type & ACPI_EVENT_EDGE_TRIGGERED) {
- acpi_hw_clear_gpe (gpe_number);
- }
- /*
- * Function Handler (e.g. EC)?
- */
- if (gpe_info.handler) {
- /* Invoke function handler (at interrupt level). */
- gpe_info.handler (gpe_info.context);
-
- /* Level-Triggered? */
- if (gpe_info.type & ACPI_EVENT_LEVEL_TRIGGERED) {
- acpi_hw_clear_gpe (gpe_number);
- }
-
- /* Enable GPE */
- acpi_hw_enable_gpe (gpe_number);
- }
- /*
- * Method Handler (e.g. _Exx/_Lxx)?
- */
- else if (gpe_info.method_handle) {
- if (ACPI_FAILURE(acpi_os_queue_for_execution (OSD_PRIORITY_GPE,
- acpi_ev_asynch_execute_gpe_method, (void*)(NATIVE_UINT)gpe_number))) {
- /*
- * Shoudn't occur, but if it does report an error. Note that
- * the GPE will remain disabled until the ACPI Core Subsystem
- * is restarted, or the handler is removed/reinstalled.
- */
- REPORT_ERROR (("Acpi_ev_gpe_dispatch: Unable to queue handler for GPE bit [%X]\n", gpe_number));
- }
- }
- /*
- * No Handler? Report an error and leave the GPE disabled.
- */
- else {
- REPORT_ERROR (("Acpi_ev_gpe_dispatch: No installed handler for GPE [%X]\n", gpe_number));
-
- /* Level-Triggered? */
- if (gpe_info.type & ACPI_EVENT_LEVEL_TRIGGERED) {
- acpi_hw_clear_gpe (gpe_number);
- }
- }
-
- return (INTERRUPT_HANDLED);
-}
diff --git a/reactos/drivers/bus/acpi/events/evmisc.c b/reactos/drivers/bus/acpi/events/evmisc.c
deleted file mode 100644
index 7d137d1d48a..00000000000
--- a/reactos/drivers/bus/acpi/events/evmisc.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/******************************************************************************
- *
- * Module Name: evmisc - ACPI device notification handler dispatch
- * and ACPI Global Lock support
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include
-
-#define _COMPONENT ACPI_EVENTS
- MODULE_NAME ("evmisc")
-
-
-/**************************************************************************
- *
- * FUNCTION: Acpi_ev_queue_notify_request
- *
- * PARAMETERS:
- *
- * RETURN: None.
- *
- * DESCRIPTION: Dispatch a device notification event to a previously
- * installed handler.
- *
- *************************************************************************/
-
-ACPI_STATUS
-acpi_ev_queue_notify_request (
- ACPI_NAMESPACE_NODE *node,
- u32 notify_value)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *handler_obj = NULL;
- ACPI_GENERIC_STATE *notify_info;
- ACPI_STATUS status = AE_OK;
-
-
- /*
- * For value 1 (Ejection Request), some device method may need to be run.
- * For value 2 (Device Wake) if _PRW exists, the _PS0 method may need to be run.
- * For value 0x80 (Status Change) on the power button or sleep button,
- * initiate soft-off or sleep operation?
- */
-
- switch (notify_value) {
- case 0:
- break;
-
- case 1:
- break;
-
- case 2:
- break;
-
- case 0x80:
- break;
-
- default:
- break;
- }
-
-
- /*
- * Get the notify object attached to the device Node
- */
-
- obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node);
- if (obj_desc) {
-
- /* We have the notify object, Get the right handler */
-
- switch (node->type) {
- case ACPI_TYPE_DEVICE:
- if (notify_value <= MAX_SYS_NOTIFY) {
- handler_obj = obj_desc->device.sys_handler;
- }
- else {
- handler_obj = obj_desc->device.drv_handler;
- }
- break;
-
- case ACPI_TYPE_THERMAL:
- if (notify_value <= MAX_SYS_NOTIFY) {
- handler_obj = obj_desc->thermal_zone.sys_handler;
- }
- else {
- handler_obj = obj_desc->thermal_zone.drv_handler;
- }
- break;
- }
- }
-
-
- /* If there is any handler to run, schedule the dispatcher */
-
- if ((acpi_gbl_sys_notify.handler && (notify_value <= MAX_SYS_NOTIFY)) ||
- (acpi_gbl_drv_notify.handler && (notify_value > MAX_SYS_NOTIFY)) ||
- handler_obj) {
-
- notify_info = acpi_cm_create_generic_state ();
- if (!notify_info) {
- return (AE_NO_MEMORY);
- }
-
- notify_info->notify.node = node;
- notify_info->notify.value = (u16) notify_value;
- notify_info->notify.handler_obj = handler_obj;
-
- status = acpi_os_queue_for_execution (OSD_PRIORITY_HIGH,
- acpi_ev_notify_dispatch, notify_info);
- if (ACPI_FAILURE (status)) {
- acpi_cm_delete_generic_state (notify_info);
- }
- }
-
- if (!handler_obj) {
- /* There is no per-device notify handler for this device */
-
- }
-
-
- return (status);
-}
-
-
-/**************************************************************************
- *
- * FUNCTION: Acpi_ev_notify_dispatch
- *
- * PARAMETERS:
- *
- * RETURN: None.
- *
- * DESCRIPTION: Dispatch a device notification event to a previously
- * installed handler.
- *
- *************************************************************************/
-
-void
-acpi_ev_notify_dispatch (
- void *context)
-{
- ACPI_GENERIC_STATE *notify_info = (ACPI_GENERIC_STATE *) context;
- NOTIFY_HANDLER global_handler = NULL;
- void *global_context = NULL;
- ACPI_OPERAND_OBJECT *handler_obj;
-
-
- /*
- * We will invoke a global notify handler if installed.
- * This is done _before_ we invoke the per-device handler attached to the device.
- */
-
- if (notify_info->notify.value <= MAX_SYS_NOTIFY) {
- /* Global system notification handler */
-
- if (acpi_gbl_sys_notify.handler) {
- global_handler = acpi_gbl_sys_notify.handler;
- global_context = acpi_gbl_sys_notify.context;
- }
- }
-
- else {
- /* Global driver notification handler */
-
- if (acpi_gbl_drv_notify.handler) {
- global_handler = acpi_gbl_drv_notify.handler;
- global_context = acpi_gbl_drv_notify.context;
- }
- }
-
-
- /* Invoke the system handler first, if present */
-
- if (global_handler) {
- global_handler (notify_info->notify.node, notify_info->notify.value, global_context);
- }
-
- /* Now invoke the per-device handler, if present */
-
- handler_obj = notify_info->notify.handler_obj;
- if (handler_obj) {
- handler_obj->notify_handler.handler (notify_info->notify.node, notify_info->notify.value,
- handler_obj->notify_handler.context);
- }
-
-
- /* All done with the info object */
-
- acpi_cm_delete_generic_state (notify_info);
-}
-
-
-/***************************************************************************
- *
- * FUNCTION: Acpi_ev_global_lock_thread
- *
- * RETURN: None
- *
- * DESCRIPTION: Invoked by SCI interrupt handler upon acquisition of the
- * Global Lock. Simply signal all threads that are waiting
- * for the lock.
- *
- **************************************************************************/
-
-static void
-acpi_ev_global_lock_thread (
- void *context)
-{
-
- /* Signal threads that are waiting for the lock */
-
- if (acpi_gbl_global_lock_thread_count) {
- /* Send sufficient units to the semaphore */
-
- acpi_os_signal_semaphore (acpi_gbl_global_lock_semaphore,
- acpi_gbl_global_lock_thread_count);
- }
-}
-
-
-/***************************************************************************
- *
- * FUNCTION: Acpi_ev_global_lock_handler
- *
- * RETURN: Status
- *
- * DESCRIPTION: Invoked directly from the SCI handler when a global lock
- * release interrupt occurs. Grab the global lock and queue
- * the global lock thread for execution
- *
- **************************************************************************/
-
-static u32
-acpi_ev_global_lock_handler (
- void *context)
-{
- u8 acquired = FALSE;
- void *global_lock;
-
-
- /*
- * Attempt to get the lock
- * If we don't get it now, it will be marked pending and we will
- * take another interrupt when it becomes free.
- */
-
- global_lock = acpi_gbl_FACS->global_lock;
- ACPI_ACQUIRE_GLOBAL_LOCK (global_lock, acquired);
- if (acquired) {
- /* Got the lock, now wake all threads waiting for it */
-
- acpi_gbl_global_lock_acquired = TRUE;
-
- /* Run the Global Lock thread which will signal all waiting threads */
-
- acpi_os_queue_for_execution (OSD_PRIORITY_HIGH, acpi_ev_global_lock_thread,
- context);
- }
-
- return (INTERRUPT_HANDLED);
-}
-
-
-/***************************************************************************
- *
- * FUNCTION: Acpi_ev_init_global_lock_handler
- *
- * RETURN: Status
- *
- * DESCRIPTION: Install a handler for the global lock release event
- *
- **************************************************************************/
-
-ACPI_STATUS
-acpi_ev_init_global_lock_handler (void)
-{
- ACPI_STATUS status;
-
-
- acpi_gbl_global_lock_present = TRUE;
- status = acpi_install_fixed_event_handler (ACPI_EVENT_GLOBAL,
- acpi_ev_global_lock_handler, NULL);
-
- /*
- * If the global lock does not exist on this platform, the attempt
- * to enable GBL_STS will fail (the GBL_EN bit will not stick)
- * Map to AE_OK, but mark global lock as not present.
- * Any attempt to actually use the global lock will be flagged
- * with an error.
- */
- if (status == AE_NO_HARDWARE_RESPONSE) {
- acpi_gbl_global_lock_present = FALSE;
- status = AE_OK;
- }
-
- return (status);
-}
-
-
-/***************************************************************************
- *
- * FUNCTION: Acpi_ev_acquire_global_lock
- *
- * RETURN: Status
- *
- * DESCRIPTION: Attempt to gain ownership of the Global Lock.
- *
- **************************************************************************/
-
-ACPI_STATUS
-acpi_ev_acquire_global_lock(void)
-{
- ACPI_STATUS status = AE_OK;
- u8 acquired = FALSE;
- void *global_lock;
-
-
- /* Make sure that we actually have a global lock */
-
- if (!acpi_gbl_global_lock_present) {
- return (AE_NO_GLOBAL_LOCK);
- }
-
- /* One more thread wants the global lock */
-
- acpi_gbl_global_lock_thread_count++;
-
-
- /* If we (OS side) have the hardware lock already, we are done */
-
- if (acpi_gbl_global_lock_acquired) {
- return (AE_OK);
- }
-
- /* Only if the FACS is valid */
-
- if (!acpi_gbl_FACS) {
- return (AE_OK);
- }
-
-
- /* We must acquire the actual hardware lock */
-
- global_lock = acpi_gbl_FACS->global_lock;
- ACPI_ACQUIRE_GLOBAL_LOCK (global_lock, acquired);
- if (acquired) {
- /* We got the lock */
-
- acpi_gbl_global_lock_acquired = TRUE;
-
- return (AE_OK);
- }
-
-
- /*
- * Did not get the lock. The pending bit was set above, and we must now
- * wait until we get the global lock released interrupt.
- */
-
- /*
- * Acquire the global lock semaphore first.
- * Since this wait will block, we must release the interpreter
- */
-
- status = acpi_aml_system_wait_semaphore (acpi_gbl_global_lock_semaphore,
- ACPI_UINT32_MAX);
-
- return (status);
-}
-
-
-/***************************************************************************
- *
- * FUNCTION: Acpi_ev_release_global_lock
- *
- * DESCRIPTION: Releases ownership of the Global Lock.
- *
- **************************************************************************/
-
-void
-acpi_ev_release_global_lock (void)
-{
- u8 pending = FALSE;
- void *global_lock;
-
-
- if (!acpi_gbl_global_lock_thread_count) {
- REPORT_WARNING(("Global Lock has not be acquired, cannot release\n"));
- return;
- }
-
- /* One fewer thread has the global lock */
-
- acpi_gbl_global_lock_thread_count--;
-
- /* Have all threads released the lock? */
-
- if (!acpi_gbl_global_lock_thread_count) {
- /*
- * No more threads holding lock, we can do the actual hardware
- * release
- */
-
- global_lock = acpi_gbl_FACS->global_lock;
- ACPI_RELEASE_GLOBAL_LOCK (global_lock, pending);
- acpi_gbl_global_lock_acquired = FALSE;
-
- /*
- * If the pending bit was set, we must write GBL_RLS to the control
- * register
- */
- if (pending) {
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK,
- GBL_RLS, 1);
- }
- }
-
- return;
-}
diff --git a/reactos/drivers/bus/acpi/events/evregion.c b/reactos/drivers/bus/acpi/events/evregion.c
deleted file mode 100644
index 61bb39269b4..00000000000
--- a/reactos/drivers/bus/acpi/events/evregion.c
+++ /dev/null
@@ -1,602 +0,0 @@
-/******************************************************************************
- *
- * Module Name: evregion - ACPI Address_space (Op_region) handler dispatch
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_EVENTS
- MODULE_NAME ("evregion")
-
-
-/**************************************************************************
- *
- * FUNCTION: Acpi_ev_install_default_address_space_handlers
- *
- * PARAMETERS:
- *
- * RETURN: Status
- *
- * DESCRIPTION: Installs the core subsystem address space handlers.
- *
- *************************************************************************/
-
-ACPI_STATUS
-acpi_ev_install_default_address_space_handlers (
- void)
-{
- ACPI_STATUS status;
-
-
- /*
- * All address spaces (PCI Config, EC, SMBus) are scope dependent
- * and registration must occur for a specific device. In the case
- * system memory and IO address spaces there is currently no device
- * associated with the address space. For these we use the root.
- * We install the default PCI config space handler at the root so
- * that this space is immediately available even though the we have
- * not enumerated all the PCI Root Buses yet. This is to conform
- * to the ACPI specification which states that the PCI config
- * space must be always available -- even though we are nowhere
- * near ready to find the PCI root buses at this point.
- *
- * NOTE: We ignore AE_EXIST because this means that a handler has
- * already been installed (via Acpi_install_address_space_handler)
- */
-
- status = acpi_install_address_space_handler (acpi_gbl_root_node,
- ADDRESS_SPACE_SYSTEM_MEMORY,
- ACPI_DEFAULT_HANDLER, NULL, NULL);
- if ((ACPI_FAILURE (status)) &&
- (status != AE_EXIST)) {
- return (status);
- }
-
- status = acpi_install_address_space_handler (acpi_gbl_root_node,
- ADDRESS_SPACE_SYSTEM_IO,
- ACPI_DEFAULT_HANDLER, NULL, NULL);
- if ((ACPI_FAILURE (status)) &&
- (status != AE_EXIST)) {
- return (status);
- }
-
- status = acpi_install_address_space_handler (acpi_gbl_root_node,
- ADDRESS_SPACE_PCI_CONFIG,
- ACPI_DEFAULT_HANDLER, NULL, NULL);
- if ((ACPI_FAILURE (status)) &&
- (status != AE_EXIST)) {
- return (status);
- }
-
-
- return (AE_OK);
-}
-
-
-/* TBD: [Restructure] Move elsewhere */
-
-/**************************************************************************
- *
- * FUNCTION: Acpi_ev_execute_reg_method
- *
- * PARAMETERS: Region_obj - Object structure
- * Function - On (1) or Off (0)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute _REG method for a region
- *
- *************************************************************************/
-
-static ACPI_STATUS
-acpi_ev_execute_reg_method (
- ACPI_OPERAND_OBJECT *region_obj,
- u32 function)
-{
- ACPI_OPERAND_OBJECT *params[3];
- ACPI_OPERAND_OBJECT space_id_desc;
- ACPI_OPERAND_OBJECT function_desc;
- ACPI_STATUS status;
-
-
- if (region_obj->region.extra->extra.method_REG == NULL) {
- return (AE_OK);
- }
-
- /*
- * _REG method has two arguments
- * Arg0: Integer: Operation region space ID
- * Same value as Region_obj->Region.Space_id
- * Arg1: Integer: connection status
- * 1 for connecting the handler,
- * 0 for disconnecting the handler
- * Passed as a parameter
- */
-
- acpi_cm_init_static_object (&space_id_desc);
- acpi_cm_init_static_object (&function_desc);
-
- /*
- * Method requires two parameters.
- */
- params [0] = &space_id_desc;
- params [1] = &function_desc;
- params [2] = NULL;
-
- /*
- * Set up the parameter objects
- */
- space_id_desc.common.type = ACPI_TYPE_INTEGER;
- space_id_desc.integer.value = region_obj->region.space_id;
-
- function_desc.common.type = ACPI_TYPE_INTEGER;
- function_desc.integer.value = function;
-
- /*
- * Execute the method, no return value
- */
- status = acpi_ns_evaluate_by_handle (region_obj->region.extra->extra.method_REG, params, NULL);
- return (status);
-}
-
-
-/**************************************************************************
- *
- * FUNCTION: Acpi_ev_address_space_dispatch
- *
- * PARAMETERS: Region_obj - internal region object
- * Space_id - ID of the address space (0-255)
- * Function - Read or Write operation
- * Address - Where in the space to read or write
- * Bit_width - Field width in bits (8, 16, or 32)
- * Value - Pointer to in or out value
- *
- * RETURN: Status
- *
- * DESCRIPTION: Dispatch an address space or operation region access to
- * a previously installed handler.
- *
- *************************************************************************/
-
-ACPI_STATUS
-acpi_ev_address_space_dispatch (
- ACPI_OPERAND_OBJECT *region_obj,
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value)
-{
- ACPI_STATUS status;
- ADDRESS_SPACE_HANDLER handler;
- ADDRESS_SPACE_SETUP region_setup;
- ACPI_OPERAND_OBJECT *handler_desc;
- void *region_context = NULL;
-
-
- /*
- * Ensure that there is a handler associated with this region
- */
- handler_desc = region_obj->region.addr_handler;
- if (!handler_desc) {
- return(AE_NOT_EXIST);
- }
-
- /*
- * It may be the case that the region has never been initialized
- * Some types of regions require special init code
- */
- if (!(region_obj->region.flags & AOPOBJ_INITIALIZED)) {
- /*
- * This region has not been initialized yet, do it
- */
- region_setup = handler_desc->addr_handler.setup;
- if (!region_setup) {
- /*
- * Bad news, no init routine and not init'd
- */
- return (AE_UNKNOWN_STATUS);
- }
-
- /*
- * We must exit the interpreter because the region setup will potentially
- * execute control methods
- */
- acpi_aml_exit_interpreter ();
-
- status = region_setup (region_obj, ACPI_REGION_ACTIVATE,
- handler_desc->addr_handler.context,
- ®ion_context);
-
- /* Re-enter the interpreter */
-
- acpi_aml_enter_interpreter ();
-
- /*
- * Init routine may fail
- */
- if (ACPI_FAILURE (status)) {
- return(status);
- }
-
- region_obj->region.flags |= AOPOBJ_INITIALIZED;
-
- /*
- * Save the returned context for use in all accesses to
- * this particular region.
- */
- region_obj->region.extra->extra.region_context = region_context;
- }
-
- /*
- * We have everything we need, begin the process
- */
- handler = handler_desc->addr_handler.handler;
-
- if (!(handler_desc->addr_handler.flags & ADDR_HANDLER_DEFAULT_INSTALLED)) {
- /*
- * For handlers other than the default (supplied) handlers, we must
- * exit the interpreter because the handler *might* block -- we don't
- * know what it will do, so we can't hold the lock on the intepreter.
- */
- acpi_aml_exit_interpreter();
- }
-
- /*
- * Invoke the handler.
- */
- status = handler (function, address, bit_width, value,
- handler_desc->addr_handler.context,
- region_obj->region.extra->extra.region_context);
-
-
- if (!(handler_desc->addr_handler.flags & ADDR_HANDLER_DEFAULT_INSTALLED)) {
- /* We just returned from a non-default handler, we must re-enter the
- interpreter */
-
- acpi_aml_enter_interpreter ();
- }
-
- return (status);
-}
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_disassociate_region_from_handler
- *
- * PARAMETERS: Region_obj - Region Object
- * Acpi_ns_is_locked - Namespace Region Already Locked?
- *
- * RETURN: None
- *
- * DESCRIPTION: Break the association between the handler and the region
- * this is a two way association.
- *
- ******************************************************************************/
-
-void
-acpi_ev_disassociate_region_from_handler(
- ACPI_OPERAND_OBJECT *region_obj,
- u8 acpi_ns_is_locked)
-{
- ACPI_OPERAND_OBJECT *handler_obj;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT **last_obj_ptr;
- ADDRESS_SPACE_SETUP region_setup;
- void *region_context;
- ACPI_STATUS status;
-
-
- region_context = region_obj->region.extra->extra.region_context;
-
- /*
- * Get the address handler from the region object
- */
-
- handler_obj = region_obj->region.addr_handler;
- if (!handler_obj) {
- /*
- * This region has no handler, all done
- */
- return;
- }
-
-
- /*
- * Find this region in the handler's list
- */
-
- obj_desc = handler_obj->addr_handler.region_list;
- last_obj_ptr = &handler_obj->addr_handler.region_list;
-
- while (obj_desc) {
- /*
- * See if this is the one
- */
- if (obj_desc == region_obj) {
- /*
- * This is it, remove it from the handler's list
- */
- *last_obj_ptr = obj_desc->region.next;
- obj_desc->region.next = NULL; /* Must clear field */
-
- if (acpi_ns_is_locked) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- }
-
- /*
- * Now stop region accesses by executing the _REG method
- */
- acpi_ev_execute_reg_method (region_obj, 0);
-
- if (acpi_ns_is_locked) {
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
- }
-
- /*
- * Call the setup handler with the deactivate notification
- */
- region_setup = handler_obj->addr_handler.setup;
- status = region_setup (region_obj, ACPI_REGION_DEACTIVATE,
- handler_obj->addr_handler.context,
- ®ion_context);
-
- /*
- * Init routine may fail, Just ignore errors
- */
-
- region_obj->region.flags &= ~(AOPOBJ_INITIALIZED);
-
- /*
- * Remove handler reference in the region
- *
- * NOTE: this doesn't mean that the region goes away
- * The region is just inaccessible as indicated to
- * the _REG method
- *
- * If the region is on the handler's list
- * this better be the region's handler
- */
- ACPI_ASSERT (region_obj->region.addr_handler == handler_obj);
-
- region_obj->region.addr_handler = NULL;
-
- return;
-
- } /* found the right handler */
-
- /*
- * Move through the linked list of handlers
- */
- last_obj_ptr = &obj_desc->region.next;
- obj_desc = obj_desc->region.next;
- }
-
- /*
- * If we get here, the region was not in the handler's region list
- */
- return;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_associate_region_and_handler
- *
- * PARAMETERS: Handler_obj - Handler Object
- * Region_obj - Region Object
- * Acpi_ns_is_locked - Namespace Region Already Locked?
- *
- * RETURN: None
- *
- * DESCRIPTION: Create the association between the handler and the region
- * this is a two way association.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ev_associate_region_and_handler (
- ACPI_OPERAND_OBJECT *handler_obj,
- ACPI_OPERAND_OBJECT *region_obj,
- u8 acpi_ns_is_locked)
-{
- ACPI_STATUS status;
-
-
- ACPI_ASSERT (region_obj->region.space_id == handler_obj->addr_handler.space_id);
- ACPI_ASSERT (region_obj->region.addr_handler == 0);
-
- /*
- * Link this region to the front of the handler's list
- */
-
- region_obj->region.next = handler_obj->addr_handler.region_list;
- handler_obj->addr_handler.region_list = region_obj;
-
- /*
- * set the region's handler
- */
-
-/*
- Handler_obj->Common.Reference_count =
- (u16) (Handler_obj->Common.Reference_count +
- Region_obj->Common.Reference_count - 1);
-*/
- region_obj->region.addr_handler = handler_obj;
-
- /*
- * Last thing, tell all users that this region is usable
- */
- if (acpi_ns_is_locked) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- }
-
- status = acpi_ev_execute_reg_method (region_obj, 1);
-
- if (acpi_ns_is_locked) {
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
- }
-
- return (status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ev_addr_handler_helper
- *
- * PARAMETERS: Handle - Node to be dumped
- * Level - Nesting level of the handle
- * Context - Passed into Acpi_ns_walk_namespace
- *
- * DESCRIPTION: This routine checks to see if the object is a Region if it
- * is then the address handler is installed in it.
- *
- * If the Object is a Device, and the device has a handler of
- * the same type then the search is terminated in that branch.
- *
- * This is because the existing handler is closer in proximity
- * to any more regions than the one we are trying to install.
- *
- ***************************************************************************/
-
-ACPI_STATUS
-acpi_ev_addr_handler_helper (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *context,
- void **return_value)
-{
- ACPI_OPERAND_OBJECT *handler_obj;
- ACPI_OPERAND_OBJECT *tmp_obj;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status;
-
-
- handler_obj = (ACPI_OPERAND_OBJECT *) context;
-
- /* Parameter validation */
-
- if (!handler_obj) {
- return (AE_OK);
- }
-
- /* Convert and validate the device handle */
-
- node = acpi_ns_convert_handle_to_entry (obj_handle);
- if (!node) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * We only care about regions.and objects
- * that can have address handlers
- */
-
- if ((node->type != ACPI_TYPE_DEVICE) &&
- (node->type != ACPI_TYPE_REGION) &&
- (node != acpi_gbl_root_node)) {
- return (AE_OK);
- }
-
- /* Check for an existing internal object */
-
- obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node);
- if (!obj_desc) {
- /*
- * The object DNE, we don't care about it
- */
- return (AE_OK);
- }
-
- /*
- * Devices are handled different than regions
- */
- if (IS_THIS_OBJECT_TYPE (obj_desc, ACPI_TYPE_DEVICE)) {
- /*
- * See if this guy has any handlers
- */
- tmp_obj = obj_desc->device.addr_handler;
- while (tmp_obj) {
- /*
- * Now let's see if it's for the same address space.
- */
- if (tmp_obj->addr_handler.space_id == handler_obj->addr_handler.space_id) {
- /*
- * It's for the same address space
- */
- /*
- * Since the object we found it on was a device, then it
- * means that someone has already installed a handler for
- * the branch of the namespace from this device on. Just
- * bail out telling the walk routine to not traverse this
- * branch. This preserves the scoping rule for handlers.
- */
- return (AE_CTRL_DEPTH);
- }
-
- /*
- * Move through the linked list of handlers
- */
- tmp_obj = tmp_obj->addr_handler.next;
- }
-
- /*
- * As long as the device didn't have a handler for this
- * space we don't care about it. We just ignore it and
- * proceed.
- */
- return (AE_OK);
- }
-
- /*
- * Only here if it was a region
- */
- ACPI_ASSERT (obj_desc->common.type == ACPI_TYPE_REGION);
-
- if (obj_desc->region.space_id != handler_obj->addr_handler.space_id) {
- /*
- * This region is for a different address space
- * ignore it
- */
- return (AE_OK);
- }
-
- /*
- * Now we have a region and it is for the handler's address
- * space type.
- *
- * First disconnect region for any previous handler (if any)
- */
- acpi_ev_disassociate_region_from_handler (obj_desc, FALSE);
-
- /*
- * Then connect the region to the new handler
- */
- status = acpi_ev_associate_region_and_handler (handler_obj, obj_desc, FALSE);
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/events/evrgnini.c b/reactos/drivers/bus/acpi/events/evrgnini.c
deleted file mode 100644
index e37e78a4c63..00000000000
--- a/reactos/drivers/bus/acpi/events/evrgnini.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/******************************************************************************
- *
- * Module Name: evrgnini- ACPI Address_space (Op_region) init
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_EVENTS
- MODULE_NAME ("evrgnini")
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ev_system_memory_region_setup
- *
- * PARAMETERS: Region_obj - region we are interested in
- * Function - start or stop
- * Handler_context - Address space handler context
- * Region_context - Region specific context
- *
- * RETURN: Status
- *
- * DESCRIPTION: Do any prep work for region handling, a nop for now
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ev_system_memory_region_setup (
- ACPI_HANDLE handle,
- u32 function,
- void *handler_context,
- void **region_context)
-{
-
- if (function == ACPI_REGION_DEACTIVATE) {
- if (*region_context) {
- acpi_cm_free (*region_context);
- *region_context = NULL;
- }
- return (AE_OK);
- }
-
-
- /* Activate. Create a new context */
-
- *region_context = acpi_cm_callocate (sizeof (MEM_HANDLER_CONTEXT));
- if (!(*region_context)) {
- return (AE_NO_MEMORY);
- }
-
- return (AE_OK);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ev_io_space_region_setup
- *
- * PARAMETERS: Region_obj - region we are interested in
- * Function - start or stop
- * Handler_context - Address space handler context
- * Region_context - Region specific context
- *
- * RETURN: Status
- *
- * DESCRIPTION: Do any prep work for region handling
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ev_io_space_region_setup (
- ACPI_HANDLE handle,
- u32 function,
- void *handler_context,
- void **region_context)
-{
- if (function == ACPI_REGION_DEACTIVATE) {
- *region_context = NULL;
- }
- else {
- *region_context = handler_context;
- }
-
- return (AE_OK);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ev_pci_config_region_setup
- *
- * PARAMETERS: Region_obj - region we are interested in
- * Function - start or stop
- * Handler_context - Address space handler context
- * Region_context - Region specific context
- *
- * RETURN: Status
- *
- * DESCRIPTION: Do any prep work for region handling
- *
- * MUTEX: Assumes namespace is not locked
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ev_pci_config_region_setup (
- ACPI_HANDLE handle,
- u32 function,
- void *handler_context,
- void **region_context)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_INTEGER temp;
- PCI_HANDLER_CONTEXT *pci_context = *region_context;
- ACPI_OPERAND_OBJECT *handler_obj;
- ACPI_NAMESPACE_NODE *node;
- ACPI_OPERAND_OBJECT *region_obj = (ACPI_OPERAND_OBJECT *) handle;
- DEVICE_ID object_hID;
-
- handler_obj = region_obj->region.addr_handler;
-
- if (!handler_obj) {
- /*
- * No installed handler. This shouldn't happen because the dispatch
- * routine checks before we get here, but we check again just in case.
- */
- return(AE_NOT_EXIST);
- }
-
- if (function == ACPI_REGION_DEACTIVATE) {
- if (pci_context) {
- acpi_cm_free (pci_context);
- *region_context = NULL;
- }
-
- return (status);
- }
-
-
- /* Create a new context */
-
- pci_context = acpi_cm_callocate (sizeof(PCI_HANDLER_CONTEXT));
- if (!pci_context) {
- return (AE_NO_MEMORY);
- }
-
- /*
- * For PCI Config space access, we have to pass the segment, bus,
- * device and function numbers. This routine must acquire those.
- */
-
- /*
- * First get device and function numbers from the _ADR object
- * in the parent's scope.
- */
- ACPI_ASSERT(region_obj->region.node);
-
- node = acpi_ns_get_parent_object (region_obj->region.node);
-
-
- /* Acpi_evaluate the _ADR object */
-
- status = acpi_cm_evaluate_numeric_object (METHOD_NAME__ADR, node, &temp);
- /*
- * The default is zero, since the allocation above zeroed the data, just
- * do nothing on failures.
- */
- if (ACPI_SUCCESS (status)) {
- /*
- * Got it..
- */
- pci_context->dev_func = (u32) temp;
- }
-
- /*
- * Get the _SEG and _BBN values from the device upon which the handler
- * is installed.
- *
- * We need to get the _SEG and _BBN objects relative to the PCI BUS device.
- * This is the device the handler has been registered to handle.
- */
-
- /*
- * If the Addr_handler.Node is still pointing to the root, we need
- * to scan upward for a PCI Root bridge and re-associate the Op_region
- * handlers with that device.
- */
- if (handler_obj->addr_handler.node == acpi_gbl_root_node) {
- /*
- * Node is currently the parent object
- */
- while (node != acpi_gbl_root_node) {
- status = acpi_cm_execute_HID(node, &object_hID);
-
- if (ACPI_SUCCESS (status)) {
- if (!(STRNCMP(object_hID.buffer, PCI_ROOT_HID_STRING,
- sizeof (PCI_ROOT_HID_STRING)))) {
- acpi_install_address_space_handler(node,
- ADDRESS_SPACE_PCI_CONFIG,
- ACPI_DEFAULT_HANDLER, NULL, NULL);
-
- break;
- }
- }
-
- node = acpi_ns_get_parent_object(node);
- }
- }
- else {
- node = handler_obj->addr_handler.node;
- }
-
- status = acpi_cm_evaluate_numeric_object (METHOD_NAME__SEG, node, &temp);
- if (ACPI_SUCCESS (status)) {
- /*
- * Got it..
- */
- pci_context->seg = (u32) temp;
- }
-
- status = acpi_cm_evaluate_numeric_object (METHOD_NAME__BBN, node, &temp);
- if (ACPI_SUCCESS (status)) {
- /*
- * Got it..
- */
- pci_context->bus = (u32) temp;
- }
-
- *region_context = pci_context;
-
- return (AE_OK);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_ev_default_region_setup
- *
- * PARAMETERS: Region_obj - region we are interested in
- * Function - start or stop
- * Handler_context - Address space handler context
- * Region_context - Region specific context
- *
- * RETURN: Status
- *
- * DESCRIPTION: Do any prep work for region handling
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ev_default_region_setup (
- ACPI_HANDLE handle,
- u32 function,
- void *handler_context,
- void **region_context)
-{
- if (function == ACPI_REGION_DEACTIVATE) {
- *region_context = NULL;
- }
- else {
- *region_context = handler_context;
- }
-
- return (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_initialize_region
- *
- * PARAMETERS: Region_obj - Region we are initializing
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initializes the region, finds any _REG methods and saves them
- * for execution at a later time
- *
- * Get the appropriate address space handler for a newly
- * created region.
- *
- * This also performs address space specific intialization. For
- * example, PCI regions must have an _ADR object that contains
- * a PCI address in the scope of the defintion. This address is
- * required to perform an access to PCI config space.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ev_initialize_region (
- ACPI_OPERAND_OBJECT *region_obj,
- u8 acpi_ns_locked)
-{
- ACPI_OPERAND_OBJECT *handler_obj;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_ADDRESS_SPACE_TYPE space_id;
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *method_node;
- ACPI_NAME *reg_name_ptr = (ACPI_NAME *) METHOD_NAME__REG;
-
-
- if (!region_obj) {
- return (AE_BAD_PARAMETER);
- }
-
- ACPI_ASSERT(region_obj->region.node);
-
- node = acpi_ns_get_parent_object (region_obj->region.node);
- space_id = region_obj->region.space_id;
-
- region_obj->region.addr_handler = NULL;
- region_obj->region.extra->extra.method_REG = NULL;
- region_obj->region.flags &= ~(AOPOBJ_INITIALIZED);
-
- /*
- * Find any "_REG" associated with this region definition
- */
- status = acpi_ns_search_node (*reg_name_ptr, node,
- ACPI_TYPE_METHOD, &method_node);
- if (ACPI_SUCCESS (status)) {
- /*
- * The _REG method is optional and there can be only one per region
- * definition. This will be executed when the handler is attached
- * or removed
- */
- region_obj->region.extra->extra.method_REG = method_node;
- }
-
- /*
- * The following loop depends upon the root Node having no parent
- * ie: Acpi_gbl_Root_node->Parent_entry being set to NULL
- */
- while (node) {
- /*
- * Check to see if a handler exists
- */
- handler_obj = NULL;
- obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node);
- if (obj_desc) {
- /*
- * can only be a handler if the object exists
- */
- switch (node->type) {
- case ACPI_TYPE_DEVICE:
-
- handler_obj = obj_desc->device.addr_handler;
- break;
-
- case ACPI_TYPE_PROCESSOR:
-
- handler_obj = obj_desc->processor.addr_handler;
- break;
-
- case ACPI_TYPE_THERMAL:
-
- handler_obj = obj_desc->thermal_zone.addr_handler;
- break;
- }
-
- while (handler_obj) {
- /*
- * This guy has at least one address handler
- * see if it has the type we want
- */
- if (handler_obj->addr_handler.space_id == space_id) {
- /*
- * Found it! Now update the region and the handler
- */
- acpi_ev_associate_region_and_handler (handler_obj, region_obj, acpi_ns_locked);
- return (AE_OK);
- }
-
- handler_obj = handler_obj->addr_handler.next;
-
- } /* while handlerobj */
- }
-
- /*
- * This one does not have the handler we need
- * Pop up one level
- */
- node = acpi_ns_get_parent_object (node);
-
- } /* while Node != ROOT */
-
- /*
- * If we get here, there is no handler for this region
- */
- return (AE_NOT_EXIST);
-}
-
diff --git a/reactos/drivers/bus/acpi/events/evsci.c b/reactos/drivers/bus/acpi/events/evsci.c
deleted file mode 100644
index 748c5f73904..00000000000
--- a/reactos/drivers/bus/acpi/events/evsci.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: evsci - System Control Interrupt configuration and
- * legacy to ACPI mode state transition functions
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include
-
-#define _COMPONENT ACPI_EVENTS
- MODULE_NAME ("evsci")
-
-
-/*
- * Elements correspond to counts for TMR, NOT_USED, GBL, PWR_BTN, SLP_BTN, RTC,
- * and GENERAL respectively. These counts are modified by the ACPI interrupt
- * handler.
- *
- * TBD: [Investigate] Note that GENERAL should probably be split out into
- * one element for each bit in the GPE registers
- */
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ev_sci_handler
- *
- * PARAMETERS: Context - Calling Context
- *
- * RETURN: Status code indicates whether interrupt was handled.
- *
- * DESCRIPTION: Interrupt handler that will figure out what function or
- * control method to call to deal with a SCI. Installed
- * using BU interrupt support.
- *
- ******************************************************************************/
-
-static u32
-acpi_ev_sci_handler (void *context)
-{
- u32 interrupt_handled = INTERRUPT_NOT_HANDLED;
-
-
- /*
- * Make sure that ACPI is enabled by checking SCI_EN. Note that we are
- * required to treat the SCI interrupt as sharable, level, active low.
- */
- if (!acpi_hw_register_bit_access (ACPI_READ, ACPI_MTX_DO_NOT_LOCK, SCI_EN)) {
- /* ACPI is not enabled; this interrupt cannot be for us */
-
- return (INTERRUPT_NOT_HANDLED);
- }
-
- /*
- * Fixed Acpi_events:
- * -------------
- * Check for and dispatch any Fixed Acpi_events that have occurred
- */
- interrupt_handled |= acpi_ev_fixed_event_detect ();
-
- /*
- * GPEs:
- * -----
- * Check for and dispatch any GPEs that have occurred
- */
- interrupt_handled |= acpi_ev_gpe_detect ();
-
- return (interrupt_handled);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_install_sci_handler
- *
- * PARAMETERS: none
- *
- * RETURN: Status
- *
- * DESCRIPTION: Installs SCI handler.
- *
- ******************************************************************************/
-
-u32
-acpi_ev_install_sci_handler (void)
-{
- u32 except = AE_OK;
-
-
- except = acpi_os_install_interrupt_handler ((u32) acpi_gbl_FADT->sci_int,
- acpi_ev_sci_handler,
- NULL);
-
- return (except);
-}
-
-
-/******************************************************************************
-
- *
- * FUNCTION: Acpi_ev_remove_sci_handler
- *
- * PARAMETERS: none
- *
- * RETURN: E_OK if handler uninstalled OK, E_ERROR if handler was not
- * installed to begin with
- *
- * DESCRIPTION: Restores original status of all fixed event enable bits and
- * removes SCI handler.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ev_remove_sci_handler (void)
-{
-#if 0
- /* TBD:[Investigate] Figure this out!! Disable all events first ??? */
-
- if (original_fixed_enable_bit_status ^ 1 << acpi_event_index (TMR_FIXED_EVENT)) {
- acpi_event_disable_event (TMR_FIXED_EVENT);
- }
-
- if (original_fixed_enable_bit_status ^ 1 << acpi_event_index (GBL_FIXED_EVENT)) {
- acpi_event_disable_event (GBL_FIXED_EVENT);
- }
-
- if (original_fixed_enable_bit_status ^ 1 << acpi_event_index (PWR_BTN_FIXED_EVENT)) {
- acpi_event_disable_event (PWR_BTN_FIXED_EVENT);
- }
-
- if (original_fixed_enable_bit_status ^ 1 << acpi_event_index (SLP_BTN_FIXED_EVENT)) {
- acpi_event_disable_event (SLP_BTN_FIXED_EVENT);
- }
-
- if (original_fixed_enable_bit_status ^ 1 << acpi_event_index (RTC_FIXED_EVENT)) {
- acpi_event_disable_event (RTC_FIXED_EVENT);
- }
-
- original_fixed_enable_bit_status = 0;
-
-#endif
-
- acpi_os_remove_interrupt_handler ((u32) acpi_gbl_FADT->sci_int,
- acpi_ev_sci_handler);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ev_restore_acpi_state
- *
- * PARAMETERS: none
- *
- * RETURN: none
- *
- * DESCRIPTION: Restore the original ACPI state of the machine
- *
- ******************************************************************************/
-
-void
-acpi_ev_restore_acpi_state (void)
-{
- u32 index;
-
-
- /* Restore the state of the chipset enable bits. */
-
- if (acpi_gbl_restore_acpi_chipset == TRUE) {
- /* Restore the fixed events */
-
- if (acpi_hw_register_read (ACPI_MTX_LOCK, PM1_EN) !=
- acpi_gbl_pm1_enable_register_save) {
- acpi_hw_register_write (ACPI_MTX_LOCK, PM1_EN,
- acpi_gbl_pm1_enable_register_save);
- }
-
-
- /* Ensure that all status bits are clear */
-
- acpi_hw_clear_acpi_status ();
-
-
- /* Now restore the GPEs */
-
- for (index = 0; index < DIV_2 (acpi_gbl_FADT->gpe0blk_len); index++) {
- if (acpi_hw_register_read (ACPI_MTX_LOCK, GPE0_EN_BLOCK | index) !=
- acpi_gbl_gpe0enable_register_save[index]) {
- acpi_hw_register_write (ACPI_MTX_LOCK, GPE0_EN_BLOCK | index,
- acpi_gbl_gpe0enable_register_save[index]);
- }
- }
-
- /* GPE 1 present? */
-
- if (acpi_gbl_FADT->gpe1_blk_len) {
- for (index = 0; index < DIV_2 (acpi_gbl_FADT->gpe1_blk_len); index++) {
- if (acpi_hw_register_read (ACPI_MTX_LOCK, GPE1_EN_BLOCK | index) !=
- acpi_gbl_gpe1_enable_register_save[index]) {
- acpi_hw_register_write (ACPI_MTX_LOCK, GPE1_EN_BLOCK | index,
- acpi_gbl_gpe1_enable_register_save[index]);
- }
- }
- }
-
- if (acpi_hw_get_mode() != acpi_gbl_original_mode) {
- acpi_hw_set_mode (acpi_gbl_original_mode);
- }
- }
-
- return;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ev_terminate
- *
- * PARAMETERS: none
- *
- * RETURN: none
- *
- * DESCRIPTION: free memory allocated for table storage.
- *
- ******************************************************************************/
-
-void
-acpi_ev_terminate (void)
-{
-
-
- /*
- * Free global tables, etc.
- */
-
- if (acpi_gbl_gpe_registers) {
- acpi_cm_free (acpi_gbl_gpe_registers);
- }
-
- if (acpi_gbl_gpe_info) {
- acpi_cm_free (acpi_gbl_gpe_info);
- }
-
- return;
-}
-
-
diff --git a/reactos/drivers/bus/acpi/events/evxface.c b/reactos/drivers/bus/acpi/events/evxface.c
deleted file mode 100644
index 3322616ed6c..00000000000
--- a/reactos/drivers/bus/acpi/events/evxface.c
+++ /dev/null
@@ -1,604 +0,0 @@
-/******************************************************************************
- *
- * Module Name: evxface - External interfaces for ACPI events
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_EVENTS
- MODULE_NAME ("evxface")
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_install_fixed_event_handler
- *
- * PARAMETERS: Event - Event type to enable.
- * Handler - Pointer to the handler function for the
- * event
- * Context - Value passed to the handler on each GPE
- *
- * RETURN: Status
- *
- * DESCRIPTION: Saves the pointer to the handler function and then enables the
- * event.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_install_fixed_event_handler (
- u32 event,
- FIXED_EVENT_HANDLER handler,
- void *context)
-{
- ACPI_STATUS status;
-
-
- /* Parameter validation */
-
- if (event >= NUM_FIXED_EVENTS) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_EVENTS);
-
- /* Don't allow two handlers. */
-
- if (NULL != acpi_gbl_fixed_event_handlers[event].handler) {
- status = AE_EXIST;
- goto cleanup;
- }
-
-
- /* Install the handler before enabling the event - just in case... */
-
- acpi_gbl_fixed_event_handlers[event].handler = handler;
- acpi_gbl_fixed_event_handlers[event].context = context;
-
- status = acpi_enable_event (event, ACPI_EVENT_FIXED);
- if (!ACPI_SUCCESS (status)) {
- /* Remove the handler */
-
- acpi_gbl_fixed_event_handlers[event].handler = NULL;
- acpi_gbl_fixed_event_handlers[event].context = NULL;
- }
-
-
-
-cleanup:
- acpi_cm_release_mutex (ACPI_MTX_EVENTS);
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_remove_fixed_event_handler
- *
- * PARAMETERS: Event - Event type to disable.
- * Handler - Address of the handler
- *
- * RETURN: Status
- *
- * DESCRIPTION: Disables the event and unregisters the event handler.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_remove_fixed_event_handler (
- u32 event,
- FIXED_EVENT_HANDLER handler)
-{
- ACPI_STATUS status = AE_OK;
-
-
- /* Parameter validation */
-
- if (event >= NUM_FIXED_EVENTS) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_EVENTS);
-
- /* Disable the event before removing the handler - just in case... */
-
- status = acpi_disable_event(event, ACPI_EVENT_FIXED);
-
- /* Always Remove the handler */
-
- acpi_gbl_fixed_event_handlers[event].handler = NULL;
- acpi_gbl_fixed_event_handlers[event].context = NULL;
-
-
-
-
- acpi_cm_release_mutex (ACPI_MTX_EVENTS);
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_install_notify_handler
- *
- * PARAMETERS: Device - The device for which notifies will be handled
- * Handler_type - The type of handler:
- * ACPI_SYSTEM_NOTIFY: System_handler (00-7f)
- * ACPI_DEVICE_NOTIFY: Driver_handler (80-ff)
- * Handler - Address of the handler
- * Context - Value passed to the handler on each GPE
- *
- * RETURN: Status
- *
- * DESCRIPTION: Install a handler for notifies on an ACPI device
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_install_notify_handler (
- ACPI_HANDLE device,
- u32 handler_type,
- NOTIFY_HANDLER handler,
- void *context)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *notify_obj;
- ACPI_NAMESPACE_NODE *device_node;
- ACPI_STATUS status = AE_OK;
-
-
- /* Parameter validation */
-
- if ((!handler) ||
- (handler_type > ACPI_MAX_NOTIFY_HANDLER_TYPE)) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* Convert and validate the device handle */
-
- device_node = acpi_ns_convert_handle_to_entry (device);
- if (!device_node) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
- /*
- * Root Object:
- * ------------
- * Registering a notify handler on the root object indicates that the
- * caller wishes to receive notifications for all objects. Note that
- * only one global handler can be regsitered (per notify type).
- */
- if (device == ACPI_ROOT_OBJECT) {
- /* Make sure the handler is not already installed */
-
- if (((handler_type == ACPI_SYSTEM_NOTIFY) &&
- acpi_gbl_sys_notify.handler) ||
- ((handler_type == ACPI_DEVICE_NOTIFY) &&
- acpi_gbl_drv_notify.handler)) {
- status = AE_EXIST;
- goto unlock_and_exit;
- }
-
- if (handler_type == ACPI_SYSTEM_NOTIFY) {
- acpi_gbl_sys_notify.node = device_node;
- acpi_gbl_sys_notify.handler = handler;
- acpi_gbl_sys_notify.context = context;
- }
- else /* ACPI_DEVICE_NOTIFY */ {
- acpi_gbl_drv_notify.node = device_node;
- acpi_gbl_drv_notify.handler = handler;
- acpi_gbl_drv_notify.context = context;
- }
-
- /* Global notify handler installed */
- }
-
- /*
- * Other Objects:
- * --------------
- * Caller will only receive notifications specific to the target object.
- * Note that only certain object types can receive notifications.
- */
- else {
- /*
- * These are the ONLY objects that can receive ACPI notifications
- */
- if ((device_node->type != ACPI_TYPE_DEVICE) &&
- (device_node->type != ACPI_TYPE_PROCESSOR) &&
- (device_node->type != ACPI_TYPE_POWER) &&
- (device_node->type != ACPI_TYPE_THERMAL)) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
- /* Check for an existing internal object */
-
- obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) device_node);
- if (obj_desc) {
-
- /* Object exists - make sure there's no handler */
-
- if (((handler_type == ACPI_SYSTEM_NOTIFY) &&
- obj_desc->device.sys_handler) ||
- ((handler_type == ACPI_DEVICE_NOTIFY) &&
- obj_desc->device.drv_handler)) {
- status = AE_EXIST;
- goto unlock_and_exit;
- }
- }
-
- else {
- /* Create a new object */
-
- obj_desc = acpi_cm_create_internal_object (device_node->type);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto unlock_and_exit;
- }
-
- /* Attach new object to the Node */
-
- status = acpi_ns_attach_object (device, obj_desc, (u8) device_node->type);
-
- if (ACPI_FAILURE (status)) {
- goto unlock_and_exit;
- }
- }
-
- /* Install the handler */
-
- notify_obj = acpi_cm_create_internal_object (INTERNAL_TYPE_NOTIFY);
- if (!notify_obj) {
- status = AE_NO_MEMORY;
- goto unlock_and_exit;
- }
-
- notify_obj->notify_handler.node = device_node;
- notify_obj->notify_handler.handler = handler;
- notify_obj->notify_handler.context = context;
-
-
- if (handler_type == ACPI_SYSTEM_NOTIFY) {
- obj_desc->device.sys_handler = notify_obj;
- }
- else /* ACPI_DEVICE_NOTIFY */ {
- obj_desc->device.drv_handler = notify_obj;
- }
- }
-
-unlock_and_exit:
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_remove_notify_handler
- *
- * PARAMETERS: Device - The device for which notifies will be handled
- * Handler_type - The type of handler:
- * ACPI_SYSTEM_NOTIFY: System_handler (00-7f)
- * ACPI_DEVICE_NOTIFY: Driver_handler (80-ff)
- * Handler - Address of the handler
- * RETURN: Status
- *
- * DESCRIPTION: Remove a handler for notifies on an ACPI device
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_remove_notify_handler (
- ACPI_HANDLE device,
- u32 handler_type,
- NOTIFY_HANDLER handler)
-{
- ACPI_OPERAND_OBJECT *notify_obj;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_NAMESPACE_NODE *device_node;
- ACPI_STATUS status = AE_OK;
-
- /* Parameter validation */
-
- if ((!handler) ||
- (handler_type > ACPI_MAX_NOTIFY_HANDLER_TYPE)) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* Convert and validate the device handle */
-
- device_node = acpi_ns_convert_handle_to_entry (device);
- if (!device_node) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
- /*
- * Root Object:
- * ------------
- */
- if (device == ACPI_ROOT_OBJECT) {
-
- if (((handler_type == ACPI_SYSTEM_NOTIFY) &&
- !acpi_gbl_sys_notify.handler) ||
- ((handler_type == ACPI_DEVICE_NOTIFY) &&
- !acpi_gbl_drv_notify.handler)) {
- status = AE_NOT_EXIST;
- goto unlock_and_exit;
- }
-
- if (handler_type == ACPI_SYSTEM_NOTIFY) {
- acpi_gbl_sys_notify.node = NULL;
- acpi_gbl_sys_notify.handler = NULL;
- acpi_gbl_sys_notify.context = NULL;
- }
- else {
- acpi_gbl_drv_notify.node = NULL;
- acpi_gbl_drv_notify.handler = NULL;
- acpi_gbl_drv_notify.context = NULL;
- }
- }
-
- /*
- * Other Objects:
- * --------------
- */
- else {
- /*
- * These are the ONLY objects that can receive ACPI notifications
- */
- if ((device_node->type != ACPI_TYPE_DEVICE) &&
- (device_node->type != ACPI_TYPE_PROCESSOR) &&
- (device_node->type != ACPI_TYPE_POWER) &&
- (device_node->type != ACPI_TYPE_THERMAL)) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
- /* Check for an existing internal object */
-
- obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) device_node);
- if (!obj_desc) {
- status = AE_NOT_EXIST;
- goto unlock_and_exit;
- }
-
- /* Object exists - make sure there's an existing handler */
-
- if (handler_type == ACPI_SYSTEM_NOTIFY) {
- notify_obj = obj_desc->device.sys_handler;
- }
- else {
- notify_obj = obj_desc->device.drv_handler;
- }
-
- if ((!notify_obj) ||
- (notify_obj->notify_handler.handler != handler)) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
- /* Remove the handler */
-
- if (handler_type == ACPI_SYSTEM_NOTIFY) {
- obj_desc->device.sys_handler = NULL;
- }
- else {
- obj_desc->device.drv_handler = NULL;
- }
-
- acpi_cm_remove_reference (notify_obj);
- }
-
-
-unlock_and_exit:
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_install_gpe_handler
- *
- * PARAMETERS: Gpe_number - The GPE number. The numbering scheme is
- * bank 0 first, then bank 1.
- * Type - Whether this GPE should be treated as an
- * edge- or level-triggered interrupt.
- * Handler - Address of the handler
- * Context - Value passed to the handler on each GPE
- *
- * RETURN: Status
- *
- * DESCRIPTION: Install a handler for a General Purpose Event.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_install_gpe_handler (
- u32 gpe_number,
- u32 type,
- GPE_HANDLER handler,
- void *context)
-{
- ACPI_STATUS status = AE_OK;
-
- /* Parameter validation */
-
- if (!handler || (gpe_number >= NUM_GPE)) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Ensure that we have a valid GPE number */
-
- if (acpi_gbl_gpe_valid[gpe_number] == ACPI_GPE_INVALID) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_EVENTS);
-
- /* Make sure that there isn't a handler there already */
-
- if (acpi_gbl_gpe_info[gpe_number].handler) {
- status = AE_EXIST;
- goto cleanup;
- }
-
- /* Install the handler */
-
- acpi_gbl_gpe_info[gpe_number].handler = handler;
- acpi_gbl_gpe_info[gpe_number].context = context;
- acpi_gbl_gpe_info[gpe_number].type = (u8) type;
-
- /* Clear the GPE (of stale events), the enable it */
-
- acpi_hw_clear_gpe (gpe_number);
- acpi_hw_enable_gpe (gpe_number);
-
-cleanup:
- acpi_cm_release_mutex (ACPI_MTX_EVENTS);
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_remove_gpe_handler
- *
- * PARAMETERS: Gpe_number - The event to remove a handler
- * Handler - Address of the handler
- *
- * RETURN: Status
- *
- * DESCRIPTION: Remove a handler for a General Purpose Acpi_event.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_remove_gpe_handler (
- u32 gpe_number,
- GPE_HANDLER handler)
-{
- ACPI_STATUS status = AE_OK;
-
-
- /* Parameter validation */
-
- if (!handler || (gpe_number >= NUM_GPE)) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Ensure that we have a valid GPE number */
-
- if (acpi_gbl_gpe_valid[gpe_number] == ACPI_GPE_INVALID) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Disable the GPE before removing the handler */
-
- acpi_hw_disable_gpe (gpe_number);
-
- acpi_cm_acquire_mutex (ACPI_MTX_EVENTS);
-
- /* Make sure that the installed handler is the same */
-
- if (acpi_gbl_gpe_info[gpe_number].handler != handler) {
- acpi_hw_enable_gpe (gpe_number);
- status = AE_BAD_PARAMETER;
- goto cleanup;
- }
-
- /* Remove the handler */
-
- acpi_gbl_gpe_info[gpe_number].handler = NULL;
- acpi_gbl_gpe_info[gpe_number].context = NULL;
-
-cleanup:
- acpi_cm_release_mutex (ACPI_MTX_EVENTS);
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_acquire_global_lock
- *
- * PARAMETERS: Timeout - How long the caller is willing to wait
- * Out_handle - A handle to the lock if acquired
- *
- * RETURN: Status
- *
- * DESCRIPTION: Acquire the ACPI Global Lock
- *
- ******************************************************************************/
-ACPI_STATUS
-acpi_acquire_global_lock (
- void)
-{
- ACPI_STATUS status;
-
-
- status = acpi_aml_enter_interpreter ();
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * TBD: [Restructure] add timeout param to internal interface, and
- * perhaps INTERPRETER_LOCKED
- */
-
- status = acpi_ev_acquire_global_lock ();
- acpi_aml_exit_interpreter ();
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_release_global_lock
- *
- * PARAMETERS: Handle - Returned from Acpi_acquire_global_lock
- *
- * RETURN: Status
- *
- * DESCRIPTION: Release the ACPI Global Lock
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_release_global_lock (
- void)
-{
- acpi_ev_release_global_lock ();
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/events/evxfevnt.c b/reactos/drivers/bus/acpi/events/evxfevnt.c
deleted file mode 100644
index 439f62e7931..00000000000
--- a/reactos/drivers/bus/acpi/events/evxfevnt.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/******************************************************************************
- *
- * Module Name: evxfevnt - External Interfaces, ACPI event disable/enable
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_EVENTS
- MODULE_NAME ("evxfevnt")
-
-
-/**************************************************************************
- *
- * FUNCTION: Acpi_enable
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Transfers the system into ACPI mode.
- *
- *************************************************************************/
-
-ACPI_STATUS
-acpi_enable (void)
-{
- ACPI_STATUS status;
-
-
- /* Make sure we've got ACPI tables */
-
- if (!acpi_gbl_DSDT) {
- return (AE_NO_ACPI_TABLES);
- }
-
- /* Make sure the BIOS supports ACPI mode */
-
- if (SYS_MODE_LEGACY == acpi_hw_get_mode_capabilities()) {
- return (AE_ERROR);
- }
-
- /* Transition to ACPI mode */
-
- status = acpi_hw_set_mode (SYS_MODE_ACPI);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- return (status);
-}
-
-
-/**************************************************************************
- *
- * FUNCTION: Acpi_disable
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Returns the system to original ACPI/legacy mode, and
- * uninstalls the SCI interrupt handler.
- *
- *************************************************************************/
-
-ACPI_STATUS
-acpi_disable (void)
-{
- ACPI_STATUS status;
-
-
- /* Restore original mode */
-
- status = acpi_hw_set_mode (acpi_gbl_original_mode);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Unload the SCI interrupt handler */
-
- acpi_ev_remove_sci_handler ();
- acpi_ev_restore_acpi_state ();
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_enable_event
- *
- * PARAMETERS: Event - The fixed event or GPE to be enabled
- * Type - The type of event
- *
- * RETURN: Status
- *
- * DESCRIPTION: Enable an ACPI event (fixed and general purpose)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_enable_event (
- u32 event,
- u32 type)
-{
- ACPI_STATUS status = AE_OK;
- u32 register_id;
-
-
- /* The Type must be either Fixed Acpi_event or GPE */
-
- switch (type) {
-
- case ACPI_EVENT_FIXED:
-
- /* Decode the Fixed Acpi_event */
-
- switch (event) {
- case ACPI_EVENT_PMTIMER:
- register_id = TMR_EN;
- break;
-
- case ACPI_EVENT_GLOBAL:
- register_id = GBL_EN;
- break;
-
- case ACPI_EVENT_POWER_BUTTON:
- register_id = PWRBTN_EN;
- break;
-
- case ACPI_EVENT_SLEEP_BUTTON:
- register_id = SLPBTN_EN;
- break;
-
- case ACPI_EVENT_RTC:
- register_id = RTC_EN;
- break;
-
- default:
- return (AE_BAD_PARAMETER);
- break;
- }
-
- /*
- * Enable the requested fixed event (by writing a one to the
- * enable register bit)
- */
-
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, register_id, 1);
-
- if (1 != acpi_hw_register_bit_access(ACPI_READ, ACPI_MTX_LOCK, register_id)) {
- return (AE_NO_HARDWARE_RESPONSE);
- }
-
- break;
-
-
- case ACPI_EVENT_GPE:
-
- /* Ensure that we have a valid GPE number */
-
- if ((event >= NUM_GPE) ||
- (acpi_gbl_gpe_valid[event] == ACPI_GPE_INVALID)) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* Enable the requested GPE number */
-
- acpi_hw_enable_gpe (event);
- break;
-
-
- default:
-
- status = AE_BAD_PARAMETER;
- }
-
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_disable_event
- *
- * PARAMETERS: Event - The fixed event or GPE to be enabled
- * Type - The type of event
- *
- * RETURN: Status
- *
- * DESCRIPTION: Disable an ACPI event (fixed and general purpose)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_disable_event (
- u32 event,
- u32 type)
-{
- ACPI_STATUS status = AE_OK;
- u32 register_id;
-
-
- /* The Type must be either Fixed Acpi_event or GPE */
-
- switch (type) {
-
- case ACPI_EVENT_FIXED:
-
- /* Decode the Fixed Acpi_event */
-
- switch (event) {
- case ACPI_EVENT_PMTIMER:
- register_id = TMR_EN;
- break;
-
- case ACPI_EVENT_GLOBAL:
- register_id = GBL_EN;
- break;
-
- case ACPI_EVENT_POWER_BUTTON:
- register_id = PWRBTN_EN;
- break;
-
- case ACPI_EVENT_SLEEP_BUTTON:
- register_id = SLPBTN_EN;
- break;
-
- case ACPI_EVENT_RTC:
- register_id = RTC_EN;
- break;
-
- default:
- return (AE_BAD_PARAMETER);
- break;
- }
-
- /*
- * Disable the requested fixed event (by writing a zero to the
- * enable register bit)
- */
-
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, register_id, 0);
-
- if (0 != acpi_hw_register_bit_access(ACPI_READ, ACPI_MTX_LOCK, register_id)) {
- return (AE_NO_HARDWARE_RESPONSE);
- }
-
- break;
-
-
- case ACPI_EVENT_GPE:
-
- /* Ensure that we have a valid GPE number */
-
- if ((event >= NUM_GPE) ||
- (acpi_gbl_gpe_valid[event] == ACPI_GPE_INVALID)) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Disable the requested GPE number */
-
- acpi_hw_disable_gpe (event);
- break;
-
-
- default:
- status = AE_BAD_PARAMETER;
- }
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_clear_event
- *
- * PARAMETERS: Event - The fixed event or GPE to be cleared
- * Type - The type of event
- *
- * RETURN: Status
- *
- * DESCRIPTION: Clear an ACPI event (fixed and general purpose)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_clear_event (
- u32 event,
- u32 type)
-{
- ACPI_STATUS status = AE_OK;
- u32 register_id;
-
-
- /* The Type must be either Fixed Acpi_event or GPE */
-
- switch (type) {
-
- case ACPI_EVENT_FIXED:
-
- /* Decode the Fixed Acpi_event */
-
- switch (event) {
- case ACPI_EVENT_PMTIMER:
- register_id = TMR_STS;
- break;
-
- case ACPI_EVENT_GLOBAL:
- register_id = GBL_STS;
- break;
-
- case ACPI_EVENT_POWER_BUTTON:
- register_id = PWRBTN_STS;
- break;
-
- case ACPI_EVENT_SLEEP_BUTTON:
- register_id = SLPBTN_STS;
- break;
-
- case ACPI_EVENT_RTC:
- register_id = RTC_STS;
- break;
-
- default:
- return (AE_BAD_PARAMETER);
- break;
- }
-
- /*
- * Clear the requested fixed event (By writing a one to the
- * status register bit)
- */
-
- acpi_hw_register_bit_access (ACPI_WRITE, ACPI_MTX_LOCK, register_id, 1);
- break;
-
-
- case ACPI_EVENT_GPE:
-
- /* Ensure that we have a valid GPE number */
-
- if ((event >= NUM_GPE) ||
- (acpi_gbl_gpe_valid[event] == ACPI_GPE_INVALID)) {
- return (AE_BAD_PARAMETER);
- }
-
-
- acpi_hw_clear_gpe (event);
- break;
-
-
- default:
-
- status = AE_BAD_PARAMETER;
- }
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_get_event_status
- *
- * PARAMETERS: Event - The fixed event or GPE
- * Type - The type of event
- * Status - Where the current status of the event will
- * be returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Obtains and returns the current status of the event
- *
- ******************************************************************************/
-
-
-ACPI_STATUS
-acpi_get_event_status (
- u32 event,
- u32 type,
- ACPI_EVENT_STATUS *event_status)
-{
- ACPI_STATUS status = AE_OK;
- u32 register_id;
-
-
- if (!event_status) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* The Type must be either Fixed Acpi_event or GPE */
-
- switch (type) {
-
- case ACPI_EVENT_FIXED:
-
- /* Decode the Fixed Acpi_event */
-
- switch (event) {
- case ACPI_EVENT_PMTIMER:
- register_id = TMR_STS;
- break;
-
- case ACPI_EVENT_GLOBAL:
- register_id = GBL_STS;
- break;
-
- case ACPI_EVENT_POWER_BUTTON:
- register_id = PWRBTN_STS;
- break;
-
- case ACPI_EVENT_SLEEP_BUTTON:
- register_id = SLPBTN_STS;
- break;
-
- case ACPI_EVENT_RTC:
- register_id = RTC_STS;
- break;
-
- default:
- return (AE_BAD_PARAMETER);
- break;
- }
-
- /* Get the status of the requested fixed event */
-
- *event_status = acpi_hw_register_bit_access (ACPI_READ, ACPI_MTX_LOCK, register_id);
- break;
-
-
- case ACPI_EVENT_GPE:
-
- /* Ensure that we have a valid GPE number */
-
- if ((event >= NUM_GPE) ||
- (acpi_gbl_gpe_valid[event] == ACPI_GPE_INVALID)) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* Obtain status on the requested GPE number */
-
- acpi_hw_get_gpe_status (event, event_status);
- break;
-
-
- default:
- status = AE_BAD_PARAMETER;
- }
-
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/events/evxfregn.c b/reactos/drivers/bus/acpi/events/evxfregn.c
deleted file mode 100644
index e9d720e924a..00000000000
--- a/reactos/drivers/bus/acpi/events/evxfregn.c
+++ /dev/null
@@ -1,373 +0,0 @@
-/******************************************************************************
- *
- * Module Name: evxfregn - External Interfaces, ACPI Operation Regions and
- * Address Spaces.
- * $Revision: 1.2 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_EVENTS
- MODULE_NAME ("evxfregn")
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_install_address_space_handler
- *
- * PARAMETERS: Device - Handle for the device
- * Space_id - The address space ID
- * Handler - Address of the handler
- * Setup - Address of the setup function
- * Context - Value passed to the handler on each access
- *
- * RETURN: Status
- *
- * DESCRIPTION: Install a handler for all Op_regions of a given Space_id.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_install_address_space_handler (
- ACPI_HANDLE device,
- ACPI_ADDRESS_SPACE_TYPE space_id,
- ADDRESS_SPACE_HANDLER handler,
- ADDRESS_SPACE_SETUP setup,
- void *context)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *handler_obj;
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status = AE_OK;
- OBJECT_TYPE_INTERNAL type;
- u16 flags = 0;
-
-
- /* Parameter validation */
-
- if ((!device) ||
- ((!handler) && (handler != ACPI_DEFAULT_HANDLER))) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* Convert and validate the device handle */
-
- node = acpi_ns_convert_handle_to_entry (device);
- if (!node) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
- /*
- * This registration is valid for only the types below
- * and the root. This is where the default handlers
- * get placed.
- */
-
- if ((node->type != ACPI_TYPE_DEVICE) &&
- (node->type != ACPI_TYPE_PROCESSOR) &&
- (node->type != ACPI_TYPE_THERMAL) &&
- (node != acpi_gbl_root_node)) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
- if (handler == ACPI_DEFAULT_HANDLER) {
- flags = ADDR_HANDLER_DEFAULT_INSTALLED;
-
- switch (space_id) {
- case ADDRESS_SPACE_SYSTEM_MEMORY:
- handler = acpi_aml_system_memory_space_handler;
- setup = acpi_ev_system_memory_region_setup;
- break;
-
- case ADDRESS_SPACE_SYSTEM_IO:
- handler = acpi_aml_system_io_space_handler;
- setup = acpi_ev_io_space_region_setup;
- break;
-
- case ADDRESS_SPACE_PCI_CONFIG:
- handler = acpi_aml_pci_config_space_handler;
- setup = acpi_ev_pci_config_region_setup;
- break;
-
- default:
- status = AE_NOT_EXIST;
- goto unlock_and_exit;
- break;
- }
- }
-
- /*
- * If the caller hasn't specified a setup routine, use the default
- */
- if (!setup) {
- setup = acpi_ev_default_region_setup;
- }
-
- /*
- * Check for an existing internal object
- */
-
- obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node);
- if (obj_desc) {
- /*
- * The object exists.
- * Make sure the handler is not already installed.
- */
-
- /* check the address handler the user requested */
-
- handler_obj = obj_desc->device.addr_handler;
- while (handler_obj) {
- /*
- * We have an Address handler, see if user requested this
- * address space.
- */
- if(handler_obj->addr_handler.space_id == space_id) {
- status = AE_EXIST;
- goto unlock_and_exit;
- }
-
- /*
- * Move through the linked list of handlers
- */
- handler_obj = handler_obj->addr_handler.next;
- }
- }
-
- else {
- /* Obj_desc does not exist, create one */
-
- if (node->type == ACPI_TYPE_ANY) {
- type = ACPI_TYPE_DEVICE;
- }
-
- else {
- type = node->type;
- }
-
- obj_desc = acpi_cm_create_internal_object (type);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto unlock_and_exit;
- }
-
- /* Init new descriptor */
-
- obj_desc->common.type = (u8) type;
-
- /* Attach the new object to the Node */
-
- status = acpi_ns_attach_object (node, obj_desc, (u8) type);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (obj_desc);
- goto unlock_and_exit;
- }
- }
-
- /*
- * Now we can install the handler
- *
- * At this point we know that there is no existing handler.
- * So, we just allocate the object for the handler and link it
- * into the list.
- */
- handler_obj = acpi_cm_create_internal_object (INTERNAL_TYPE_ADDRESS_HANDLER);
- if (!handler_obj) {
- status = AE_NO_MEMORY;
- goto unlock_and_exit;
- }
-
- handler_obj->addr_handler.space_id = (u8) space_id;
- handler_obj->addr_handler.hflags = flags;
- handler_obj->addr_handler.next = obj_desc->device.addr_handler;
- handler_obj->addr_handler.region_list = NULL;
- handler_obj->addr_handler.node = node;
- handler_obj->addr_handler.handler = handler;
- handler_obj->addr_handler.context = context;
- handler_obj->addr_handler.setup = setup;
-
- /*
- * Now walk the namespace finding all of the regions this
- * handler will manage.
- *
- * We start at the device and search the branch toward
- * the leaf nodes until either the leaf is encountered or
- * a device is detected that has an address handler of the
- * same type.
- *
- * In either case we back up and search down the remainder
- * of the branch
- */
- status = acpi_ns_walk_namespace (ACPI_TYPE_ANY, device,
- ACPI_UINT32_MAX, NS_WALK_UNLOCK,
- acpi_ev_addr_handler_helper,
- handler_obj, NULL);
-
- /*
- * Place this handler 1st on the list
- */
-
- handler_obj->common.reference_count =
- (u16) (handler_obj->common.reference_count +
- obj_desc->common.reference_count - 1);
- obj_desc->device.addr_handler = handler_obj;
-
-
-unlock_and_exit:
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_remove_address_space_handler
- *
- * PARAMETERS: Space_id - The address space ID
- * Handler - Address of the handler
- *
- * RETURN: Status
- *
- * DESCRIPTION: Install a handler for accesses on an Operation Region
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_remove_address_space_handler (
- ACPI_HANDLE device,
- ACPI_ADDRESS_SPACE_TYPE space_id,
- ADDRESS_SPACE_HANDLER handler)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *handler_obj;
- ACPI_OPERAND_OBJECT *region_obj;
- ACPI_OPERAND_OBJECT **last_obj_ptr;
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status = AE_OK;
-
-
- /* Parameter validation */
-
- if ((!device) ||
- ((!handler) && (handler != ACPI_DEFAULT_HANDLER))) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* Convert and validate the device handle */
-
- node = acpi_ns_convert_handle_to_entry (device);
- if (!node) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
-
- /* Make sure the internal object exists */
-
- obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node);
- if (!obj_desc) {
- /*
- * The object DNE.
- */
- status = AE_NOT_EXIST;
- goto unlock_and_exit;
- }
-
- /*
- * find the address handler the user requested
- */
-
- handler_obj = obj_desc->device.addr_handler;
- last_obj_ptr = &obj_desc->device.addr_handler;
- while (handler_obj) {
- /*
- * We have a handler, see if user requested this one
- */
-
- if(handler_obj->addr_handler.space_id == space_id) {
- /*
- * Got it, first dereference this in the Regions
- */
- region_obj = handler_obj->addr_handler.region_list;
-
- /* Walk the handler's region list */
-
- while (region_obj) {
- /*
- * First disassociate the handler from the region.
- *
- * NOTE: this doesn't mean that the region goes away
- * The region is just inaccessible as indicated to
- * the _REG method
- */
- acpi_ev_disassociate_region_from_handler(region_obj, FALSE);
-
- /*
- * Walk the list, since we took the first region and it
- * was removed from the list by the dissassociate call
- * we just get the first item on the list again
- */
- region_obj = handler_obj->addr_handler.region_list;
-
- }
-
- /*
- * Remove this Handler object from the list
- */
- *last_obj_ptr = handler_obj->addr_handler.next;
-
- /*
- * Now we can delete the handler object
- */
- acpi_cm_remove_reference (handler_obj);
- acpi_cm_remove_reference (handler_obj);
-
- goto unlock_and_exit;
- }
-
- /*
- * Move through the linked list of handlers
- */
- last_obj_ptr = &handler_obj->addr_handler.next;
- handler_obj = handler_obj->addr_handler.next;
- }
-
-
- /*
- * The handler does not exist
- */
- status = AE_NOT_EXIST;
-
-
-unlock_and_exit:
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amconfig.c b/reactos/drivers/bus/acpi/executer/amconfig.c
deleted file mode 100644
index b2e8c55e0f2..00000000000
--- a/reactos/drivers/bus/acpi/executer/amconfig.c
+++ /dev/null
@@ -1,297 +0,0 @@
-/******************************************************************************
- *
- * Module Name: amconfig - Namespace reconfiguration (Load/Unload opcodes)
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amconfig")
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_load_table
- *
- * PARAMETERS: Rgn_desc - Op region where the table will be obtained
- * Ddb_handle - Where a handle to the table will be returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Load an ACPI table
- *
- ****************************************************************************/
-
-static ACPI_STATUS
-acpi_aml_exec_load_table (
- ACPI_OPERAND_OBJECT *rgn_desc,
- ACPI_HANDLE *ddb_handle)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *table_desc = NULL;
- u8 *table_ptr;
- u8 *table_data_ptr;
- ACPI_TABLE_HEADER table_header;
- ACPI_TABLE_DESC table_info;
- u32 i;
-
-
- /* TBD: [Unhandled] Object can be either a field or an opregion */
-
-
- /* Get the table header */
-
- table_header.length = 0;
- for (i = 0; i < sizeof (ACPI_TABLE_HEADER); i++) {
- status = acpi_ev_address_space_dispatch (rgn_desc, ADDRESS_SPACE_READ,
- (ACPI_PHYSICAL_ADDRESS) i, 8,
- (u32 *) ((u8 *) &table_header + i));
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- /* Allocate a buffer for the entire table */
-
- table_ptr = acpi_cm_allocate (table_header.length);
- if (!table_ptr) {
- return (AE_NO_MEMORY);
- }
-
- /* Copy the header to the buffer */
-
- MEMCPY (table_ptr, &table_header, sizeof (ACPI_TABLE_HEADER));
- table_data_ptr = table_ptr + sizeof (ACPI_TABLE_HEADER);
-
-
- /* Get the table from the op region */
-
- for (i = 0; i < table_header.length; i++) {
- status = acpi_ev_address_space_dispatch (rgn_desc, ADDRESS_SPACE_READ,
- (ACPI_PHYSICAL_ADDRESS)i, 8,
- (u32 *) (table_data_ptr + i));
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
- }
-
-
- /* Table must be either an SSDT or a PSDT */
-
- if ((!STRNCMP (table_header.signature,
- acpi_gbl_acpi_table_data[ACPI_TABLE_PSDT].signature,
- acpi_gbl_acpi_table_data[ACPI_TABLE_PSDT].sig_length)) &&
- (!STRNCMP (table_header.signature,
- acpi_gbl_acpi_table_data[ACPI_TABLE_SSDT].signature,
- acpi_gbl_acpi_table_data[ACPI_TABLE_SSDT].sig_length))) {
- status = AE_BAD_SIGNATURE;
- goto cleanup;
- }
-
- /* Create an object to be the table handle */
-
- table_desc = acpi_cm_create_internal_object (INTERNAL_TYPE_REFERENCE);
- if (!table_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
-
- /* Install the new table into the local data structures */
-
- table_info.pointer = (ACPI_TABLE_HEADER *) table_ptr;
- table_info.length = table_header.length;
- table_info.allocation = ACPI_MEM_ALLOCATED;
- table_info.base_pointer = table_ptr;
-
- status = acpi_tb_install_table (NULL, &table_info);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /* Add the table to the namespace */
-
- /* TBD: [Restructure] - change to whatever new interface is appropriate */
-/*
- Status = Acpi_load_namespace ();
- if (ACPI_FAILURE (Status))
- {
-*/
- /* TBD: [Errors] Unload the table on failure ? */
-/*
- goto Cleanup;
- }
-*/
-
-
- /* TBD: [Investigate] we need a pointer to the table desc */
-
- /* Init the table handle */
-
- table_desc->reference.opcode = AML_LOAD_OP;
- table_desc->reference.object = table_info.installed_desc;
-
- *ddb_handle = table_desc;
-
- return (status);
-
-
-cleanup:
-
- acpi_cm_free (table_desc);
- acpi_cm_free (table_ptr);
- return (status);
-
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_unload_table
- *
- * PARAMETERS: Ddb_handle - Handle to a previously loaded table
- *
- * RETURN: Status
- *
- * DESCRIPTION: Unload an ACPI table
- *
- ****************************************************************************/
-
-static ACPI_STATUS
-acpi_aml_exec_unload_table (
- ACPI_HANDLE ddb_handle)
-{
- ACPI_STATUS status = AE_NOT_IMPLEMENTED;
- ACPI_OPERAND_OBJECT *table_desc = (ACPI_OPERAND_OBJECT *) ddb_handle;
- ACPI_TABLE_DESC *table_info;
-
-
- /* Validate the handle */
- /* Although the handle is partially validated in Acpi_aml_exec_reconfiguration(),
- * when it calls Acpi_aml_resolve_operands(), the handle is more completely
- * validated here.
- */
-
- if ((!ddb_handle) ||
- (!VALID_DESCRIPTOR_TYPE (ddb_handle, ACPI_DESC_TYPE_INTERNAL)) ||
- (((ACPI_OPERAND_OBJECT *)ddb_handle)->common.type !=
- INTERNAL_TYPE_REFERENCE)) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* Get the actual table descriptor from the Ddb_handle */
-
- table_info = (ACPI_TABLE_DESC *) table_desc->reference.object;
-
- /*
- * Delete the entire namespace under this table Node
- * (Offset contains the Table_id)
- */
-
- status = acpi_ns_delete_namespace_by_owner (table_info->table_id);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Delete the table itself */
-
- acpi_tb_uninstall_table (table_info->installed_desc);
-
- /* Delete the table descriptor (Ddb_handle) */
-
- acpi_cm_remove_reference (table_desc);
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_reconfiguration
- *
- * PARAMETERS: Opcode - The opcode to be executed
- * Walk_state - Current state of the parse tree walk
- *
- * RETURN: Status
- *
- * DESCRIPTION: Reconfiguration opcodes such as LOAD and UNLOAD
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_reconfiguration (
- u16 opcode,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *region_desc = NULL;
- ACPI_HANDLE *ddb_handle;
-
-
- /* Resolve the operands */
-
- status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state);
- /* Get the table handle, common for both opcodes */
-
- status |= acpi_ds_obj_stack_pop_object ((ACPI_OPERAND_OBJECT **) &ddb_handle,
- walk_state);
-
- switch (opcode) {
-
- case AML_LOAD_OP:
-
- /* Get the region or field descriptor */
-
- status |= acpi_ds_obj_stack_pop_object (®ion_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (region_desc);
- return (status);
- }
-
- status = acpi_aml_exec_load_table (region_desc, ddb_handle);
- break;
-
-
- case AML_UNLOAD_OP:
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- status = acpi_aml_exec_unload_table (ddb_handle);
- break;
-
-
- default:
-
- status = AE_AML_BAD_OPCODE;
- break;
- }
-
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/executer/amconvrt.c b/reactos/drivers/bus/acpi/executer/amconvrt.c
deleted file mode 100644
index cb53d1429a6..00000000000
--- a/reactos/drivers/bus/acpi/executer/amconvrt.c
+++ /dev/null
@@ -1,511 +0,0 @@
-/******************************************************************************
- *
- * Module Name: amconvrt - Object conversion routines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amconvrt")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_convert_to_integer
- *
- * PARAMETERS: *Obj_desc - Object to be converted. Must be an
- * Integer, Buffer, or String
- * Walk_state - Current method state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Convert an ACPI Object to an integer.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_convert_to_integer (
- ACPI_OPERAND_OBJECT **obj_desc,
- ACPI_WALK_STATE *walk_state)
-{
- u32 i;
- ACPI_OPERAND_OBJECT *ret_desc;
- u32 count;
- char *pointer;
- ACPI_INTEGER result;
- u32 integer_size = sizeof (ACPI_INTEGER);
-
-
- switch ((*obj_desc)->common.type) {
- case ACPI_TYPE_INTEGER:
- return (AE_OK);
-
- case ACPI_TYPE_STRING:
- pointer = (*obj_desc)->string.pointer;
- count = (*obj_desc)->string.length;
- break;
-
- case ACPI_TYPE_BUFFER:
- pointer = (char *) (*obj_desc)->buffer.pointer;
- count = (*obj_desc)->buffer.length;
- break;
-
- default:
- return (AE_TYPE);
- }
-
- /*
- * Create a new integer
- */
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- return (AE_NO_MEMORY);
- }
-
-
- /* Handle both ACPI 1.0 and ACPI 2.0 Integer widths */
-
- if (walk_state->method_node->flags & ANOBJ_DATA_WIDTH_32) {
- /*
- * We are running a method that exists in a 32-bit ACPI table.
- * Truncate the value to 32 bits by zeroing out the upper 32-bit field
- */
- integer_size = sizeof (u32);
- }
-
-
- /*
- * Convert the buffer/string to an integer. Note that both buffers and
- * strings are treated as raw data - we don't convert ascii to hex for
- * strings.
- *
- * There are two terminating conditions for the loop:
- * 1) The size of an integer has been reached, or
- * 2) The end of the buffer or string has been reached
- */
- result = 0;
-
- /* Transfer no more than an integer's worth of data */
-
- if (count > integer_size) {
- count = integer_size;
- }
-
- /*
- * String conversion is different than Buffer conversion
- */
- switch ((*obj_desc)->common.type) {
- case ACPI_TYPE_STRING:
-
- /* TBD: Need to use 64-bit STRTOUL */
-
- /*
- * Convert string to an integer
- * String must be hexadecimal as per the ACPI specification
- */
-
- result = STRTOUL (pointer, NULL, 16);
- break;
-
-
- case ACPI_TYPE_BUFFER:
-
- /*
- * Buffer conversion - we simply grab enough raw data from the
- * buffer to fill an integer
- */
- for (i = 0; i < count; i++) {
- /*
- * Get next byte and shift it into the Result.
- * Little endian is used, meaning that the first byte of the buffer
- * is the LSB of the integer
- */
- result |= (((ACPI_INTEGER) pointer[i]) << (i * 8));
- }
-
- break;
- }
-
- /* Save the Result, delete original descriptor, store new descriptor */
-
- ret_desc->integer.value = result;
-
- if (walk_state->opcode != AML_STORE_OP) {
- acpi_cm_remove_reference (*obj_desc);
- }
-
- *obj_desc = ret_desc;
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_convert_to_buffer
- *
- * PARAMETERS: *Obj_desc - Object to be converted. Must be an
- * Integer, Buffer, or String
- * Walk_state - Current method state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Convert an ACPI Object to an Buffer
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_convert_to_buffer (
- ACPI_OPERAND_OBJECT **obj_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *ret_desc;
- u32 i;
- u32 integer_size = sizeof (ACPI_INTEGER);
- u8 *new_buf;
-
-
- switch ((*obj_desc)->common.type) {
- case ACPI_TYPE_INTEGER:
-
- /*
- * Create a new Buffer
- */
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_BUFFER);
- if (!ret_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Handle both ACPI 1.0 and ACPI 2.0 Integer widths */
-
- if (walk_state->method_node->flags & ANOBJ_DATA_WIDTH_32) {
- /*
- * We are running a method that exists in a 32-bit ACPI table.
- * Truncate the value to 32 bits by zeroing out the upper
- * 32-bit field
- */
- integer_size = sizeof (u32);
- }
-
- /* Need enough space for one integers */
-
- ret_desc->buffer.length = integer_size;
- new_buf = acpi_cm_callocate (integer_size);
- if (!new_buf) {
- REPORT_ERROR
- (("Aml_exec_dyadic2_r/Concat_op: Buffer allocation failure\n"));
- acpi_cm_remove_reference (ret_desc);
- return (AE_NO_MEMORY);
- }
-
- /* Copy the integer to the buffer */
-
- for (i = 0; i < integer_size; i++) {
- new_buf[i] = (u8) ((*obj_desc)->integer.value >> (i * 8));
- }
- ret_desc->buffer.pointer = new_buf;
-
- /* Return the new buffer descriptor */
-
- if (walk_state->opcode != AML_STORE_OP) {
- acpi_cm_remove_reference (*obj_desc);
- }
- *obj_desc = ret_desc;
- break;
-
-
- case ACPI_TYPE_STRING:
- break;
-
-
- case ACPI_TYPE_BUFFER:
- break;
-
-
- default:
- return (AE_TYPE);
- break;
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_convert_to_string
- *
- * PARAMETERS: *Obj_desc - Object to be converted. Must be an
- * Integer, Buffer, or String
- * Walk_state - Current method state
- *
- * RETURN: Status
- *
- * DESCRIPTION: Convert an ACPI Object to a string
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_convert_to_string (
- ACPI_OPERAND_OBJECT **obj_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *ret_desc;
- u32 i;
- u32 index;
- u32 integer_size = sizeof (ACPI_INTEGER);
- u8 *new_buf;
- u8 *pointer;
-
-
- switch ((*obj_desc)->common.type) {
- case ACPI_TYPE_INTEGER:
-
- /*
- * Create a new String
- */
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_STRING);
- if (!ret_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Handle both ACPI 1.0 and ACPI 2.0 Integer widths */
-
- if (walk_state->method_node->flags & ANOBJ_DATA_WIDTH_32) {
- /*
- * We are running a method that exists in a 32-bit ACPI table.
- * Truncate the value to 32 bits by zeroing out the upper
- * 32-bit field
- */
- integer_size = sizeof (u32);
- }
-
- /* Need enough space for one ASCII integer plus null terminator */
-
- ret_desc->string.length = (integer_size * 2) + 1;
- new_buf = acpi_cm_callocate (ret_desc->string.length);
- if (!new_buf) {
- REPORT_ERROR
- (("Aml_exec_dyadic2_r/Concat_op: Buffer allocation failure\n"));
- acpi_cm_remove_reference (ret_desc);
- return (AE_NO_MEMORY);
- }
-
- /* Copy the integer to the buffer */
-
- for (i = 0; i < (integer_size * 2); i++) {
- new_buf[i] = acpi_gbl_hex_to_ascii [((*obj_desc)->integer.value >> (i * 4)) & 0xF];
- }
-
- /* Null terminate */
-
- new_buf [i] = 0;
- ret_desc->buffer.pointer = new_buf;
-
- /* Return the new buffer descriptor */
-
- if (walk_state->opcode != AML_STORE_OP) {
- acpi_cm_remove_reference (*obj_desc);
- }
- *obj_desc = ret_desc;
-
- return (AE_OK);
-
-
- case ACPI_TYPE_BUFFER:
-
- if (((*obj_desc)->buffer.length * 3) > ACPI_MAX_STRING_CONVERSION) {
- return (AE_AML_STRING_LIMIT);
- }
-
- /*
- * Create a new String
- */
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_STRING);
- if (!ret_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Need enough space for one ASCII integer plus null terminator */
-
- ret_desc->string.length = (*obj_desc)->buffer.length * 3;
- new_buf = acpi_cm_callocate (ret_desc->string.length + 1);
- if (!new_buf) {
- REPORT_ERROR
- (("Aml_exec_dyadic2_r/Concat_op: Buffer allocation failure\n"));
- acpi_cm_remove_reference (ret_desc);
- return (AE_NO_MEMORY);
- }
-
- /*
- * Convert each byte of the buffer to two ASCII characters plus a space.
- */
- pointer = (*obj_desc)->buffer.pointer;
- index = 0;
- for (i = 0; i < (*obj_desc)->buffer.length; i++) {
- new_buf[index + 0] = acpi_gbl_hex_to_ascii [pointer[i] & 0x0F];
- new_buf[index + 1] = acpi_gbl_hex_to_ascii [(pointer[i] >> 4) & 0x0F];
- new_buf[index + 2] = ' ';
- index += 3;
- }
-
- /* Null terminate */
-
- new_buf [index] = 0;
- ret_desc->buffer.pointer = new_buf;
-
- /* Return the new buffer descriptor */
-
- if (walk_state->opcode != AML_STORE_OP) {
- acpi_cm_remove_reference (*obj_desc);
- }
- *obj_desc = ret_desc;
- break;
-
-
- case ACPI_TYPE_STRING:
- break;
-
-
- default:
- return (AE_TYPE);
- break;
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_convert_to_target_type
- *
- * PARAMETERS: *Obj_desc - Object to be converted.
- * Walk_state - Current method state
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_convert_to_target_type (
- OBJECT_TYPE_INTERNAL destination_type,
- ACPI_OPERAND_OBJECT **obj_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_OK;
-
-
- /*
- * If required by the target,
- * perform implicit conversion on the source before we store it.
- */
-
- switch (GET_CURRENT_ARG_TYPE (walk_state->op_info->runtime_args)) {
- case ARGI_SIMPLE_TARGET:
- case ARGI_FIXED_TARGET:
- case ARGI_INTEGER_REF: /* Handles Increment, Decrement cases */
-
- switch (destination_type) {
- case INTERNAL_TYPE_DEF_FIELD:
- /*
- * Named field can always handle conversions
- */
- break;
-
- default:
- /* No conversion allowed for these types */
-
- if (destination_type != (*obj_desc)->common.type) {
- status = AE_TYPE;
- }
- }
- break;
-
-
- case ARGI_TARGETREF:
-
- switch (destination_type) {
- case ACPI_TYPE_INTEGER:
- case ACPI_TYPE_FIELD_UNIT:
- case INTERNAL_TYPE_BANK_FIELD:
- case INTERNAL_TYPE_INDEX_FIELD:
- /*
- * These types require an Integer operand. We can convert
- * a Buffer or a String to an Integer if necessary.
- */
- status = acpi_aml_convert_to_integer (obj_desc, walk_state);
- break;
-
-
- case ACPI_TYPE_STRING:
-
- /*
- * The operand must be a String. We can convert an
- * Integer or Buffer if necessary
- */
- status = acpi_aml_convert_to_string (obj_desc, walk_state);
- break;
-
-
- case ACPI_TYPE_BUFFER:
-
- /*
- * The operand must be a String. We can convert an
- * Integer or Buffer if necessary
- */
- status = acpi_aml_convert_to_buffer (obj_desc, walk_state);
- break;
- }
- break;
-
-
- case ARGI_REFERENCE:
- /*
- * Create_xxxx_field cases - we are storing the field object into the name
- */
- break;
-
-
- default:
- status = AE_AML_INTERNAL;
- }
-
-
- /*
- * Source-to-Target conversion semantics:
- *
- * If conversion to the target type cannot be performed, then simply
- * overwrite the target with the new object and type.
- */
- if (status == AE_TYPE) {
- status = AE_OK;
- }
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amcreate.c b/reactos/drivers/bus/acpi/executer/amcreate.c
deleted file mode 100644
index e8c5704546d..00000000000
--- a/reactos/drivers/bus/acpi/executer/amcreate.c
+++ /dev/null
@@ -1,714 +0,0 @@
-/******************************************************************************
- *
- * Module Name: amcreate - Named object creation
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amcreate")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_create_field
- *
- * PARAMETERS: Opcode - The opcode to be executed
- * Operands - List of operands for the opcode
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Create_field operators: Create_bit_field_op,
- * Create_byte_field_op, Create_word_field_op, Create_dWord_field_op,
- * Create_field_op (which define fields in buffers)
- *
- * ALLOCATION: Deletes Create_field_op's count operand descriptor
- *
- *
- * ACPI SPECIFICATION REFERENCES:
- * Def_create_bit_field := Create_bit_field_op Src_buf Bit_idx Name_string
- * Def_create_byte_field := Create_byte_field_op Src_buf Byte_idx Name_string
- * Def_create_dWord_field := Create_dWord_field_op Src_buf Byte_idx Name_string
- * Def_create_field := Create_field_op Src_buf Bit_idx Num_bits Name_string
- * Def_create_word_field := Create_word_field_op Src_buf Byte_idx Name_string
- * Bit_index := Term_arg=>Integer
- * Byte_index := Term_arg=>Integer
- * Num_bits := Term_arg=>Integer
- * Source_buff := Term_arg=>Buffer
- *
- ******************************************************************************/
-
-
-ACPI_STATUS
-acpi_aml_exec_create_field (
- u8 *aml_ptr,
- u32 aml_length,
- ACPI_NAMESPACE_NODE *node,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *tmp_desc;
-
-
- /* Create the region descriptor */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_FIELD_UNIT);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /* Construct the field object */
-
- obj_desc->field_unit.access = (u8) ACCESS_ANY_ACC;
- obj_desc->field_unit.lock_rule = (u8) GLOCK_NEVER_LOCK;
- obj_desc->field_unit.update_rule = (u8) UPDATE_PRESERVE;
-
- /*
- * Allocate a method object for this field unit
- */
-
- obj_desc->field_unit.extra = acpi_cm_create_internal_object (
- INTERNAL_TYPE_EXTRA);
- if (!obj_desc->field_unit.extra) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /*
- * Remember location in AML stream of the field unit
- * opcode and operands -- since the buffer and index
- * operands must be evaluated.
- */
-
- obj_desc->field_unit.extra->extra.pcode = aml_ptr;
- obj_desc->field_unit.extra->extra.pcode_length = aml_length;
- obj_desc->field_unit.node = node;
-
-
- /*
- * This operation is supposed to cause the destination Name to refer
- * to the defined Field_unit -- it must not store the constructed
- * Field_unit object (or its current value) in some location that the
- * Name may already be pointing to. So, if the Name currently contains
- * a reference which would cause Acpi_aml_exec_store() to perform an indirect
- * store rather than setting the value of the Name itself, clobber that
- * reference before calling Acpi_aml_exec_store().
- */
-
- /* Type of Name's existing value */
-
- switch (acpi_ns_get_type (node)) {
-
- case ACPI_TYPE_FIELD_UNIT:
-
- case INTERNAL_TYPE_ALIAS:
- case INTERNAL_TYPE_BANK_FIELD:
- case INTERNAL_TYPE_DEF_FIELD:
- case INTERNAL_TYPE_INDEX_FIELD:
-
- tmp_desc = acpi_ns_get_attached_object (node);
- if (tmp_desc) {
- /*
- * There is an existing object here; delete it and zero out the
- * object field within the Node
- */
-
- acpi_cm_remove_reference (tmp_desc);
- acpi_ns_attach_object ((ACPI_NAMESPACE_NODE *) node, NULL,
- ACPI_TYPE_ANY);
- }
-
- /* Set the type to ANY (or the store below will fail) */
-
- ((ACPI_NAMESPACE_NODE *) node)->type = ACPI_TYPE_ANY;
-
- break;
-
-
- default:
-
- break;
- }
-
-
- /* Store constructed field descriptor in result location */
-
- status = acpi_aml_exec_store (obj_desc, (ACPI_OPERAND_OBJECT *) node, walk_state);
-
- /*
- * If the field descriptor was not physically stored (or if a failure
- * above), we must delete it
- */
- if (obj_desc->common.reference_count <= 1) {
- acpi_cm_remove_reference (obj_desc);
- }
-
-
- return (AE_OK);
-
-
-cleanup:
-
- /* Delete region object and method subobject */
-
- if (obj_desc) {
- /* Remove deletes both objects! */
-
- acpi_cm_remove_reference (obj_desc);
- obj_desc = NULL;
- }
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_create_alias
- *
- * PARAMETERS: Operands - List of operands for the opcode
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new named alias
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_create_alias (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_NAMESPACE_NODE *source_node;
- ACPI_NAMESPACE_NODE *alias_node;
- ACPI_STATUS status;
-
-
- /* Get the source/alias operands (both NTEs) */
-
- status = acpi_ds_obj_stack_pop_object ((ACPI_OPERAND_OBJECT **) &source_node,
- walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * Don't pop it, it gets removed in the calling routine
- */
-
- alias_node = acpi_ds_obj_stack_get_value (0, walk_state);
-
- /* Add an additional reference to the object */
-
- acpi_cm_add_reference (source_node->object);
-
- /*
- * Attach the original source Node to the new Alias Node.
- */
- status = acpi_ns_attach_object (alias_node, source_node->object,
- source_node->type);
-
-
- /*
- * The new alias assumes the type of the source, but it points
- * to the same object. The reference count of the object has two
- * additional references to prevent deletion out from under either the
- * source or the alias Node
- */
-
- /* Since both operands are NTEs, we don't need to delete them */
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_create_event
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new event object
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_create_event (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- BREAKPOINT3;
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_EVENT);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /* Create the actual OS semaphore */
-
- /* TBD: [Investigate] should be created with 0 or 1 units? */
-
- status = acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT, 1,
- &obj_desc->event.semaphore);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (obj_desc);
- goto cleanup;
- }
-
- /* Attach object to the Node */
-
- status = acpi_ns_attach_object (acpi_ds_obj_stack_get_value (0, walk_state),
- obj_desc, (u8) ACPI_TYPE_EVENT);
- if (ACPI_FAILURE (status)) {
- acpi_os_delete_semaphore (obj_desc->event.semaphore);
- acpi_cm_remove_reference (obj_desc);
- goto cleanup;
- }
-
-
-cleanup:
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_create_mutex
- *
- * PARAMETERS: Interpreter_mode - Current running mode (load1/Load2/Exec)
- * Operands - List of operands for the opcode
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new mutex object
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_create_mutex (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *sync_desc;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- /* Get the operand */
-
- status = acpi_ds_obj_stack_pop_object (&sync_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Attempt to allocate a new object */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_MUTEX);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /* Create the actual OS semaphore */
-
- status = acpi_os_create_semaphore (1, 1, &obj_desc->mutex.semaphore);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (obj_desc);
- goto cleanup;
- }
-
- obj_desc->mutex.sync_level = (u8) sync_desc->integer.value;
-
- /* Obj_desc was on the stack top, and the name is below it */
-
- status = acpi_ns_attach_object (acpi_ds_obj_stack_get_value (0, walk_state),
- obj_desc, (u8) ACPI_TYPE_MUTEX);
- if (ACPI_FAILURE (status)) {
- acpi_os_delete_semaphore (obj_desc->mutex.semaphore);
- acpi_cm_remove_reference (obj_desc);
- goto cleanup;
- }
-
-
-cleanup:
-
- /* Always delete the operand */
-
- acpi_cm_remove_reference (sync_desc);
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_create_region
- *
- * PARAMETERS: Aml_ptr - Pointer to the region declaration AML
- * Aml_length - Max length of the declaration AML
- * Operands - List of operands for the opcode
- * Interpreter_mode - Load1/Load2/Execute
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new operation region object
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_create_region (
- u8 *aml_ptr,
- u32 aml_length,
- u8 region_space,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_NAMESPACE_NODE *node;
-
-
- /*
- * Space ID must be one of the predefined IDs, or in the user-defined
- * range
- */
- if ((region_space >= NUM_REGION_TYPES) &&
- (region_space < USER_REGION_BEGIN)) {
- REPORT_ERROR (("Invalid Address_space type %X\n", region_space));
- return (AE_AML_INVALID_SPACE_ID);
- }
-
-
- /* Get the Node from the object stack */
-
- node = (ACPI_NAMESPACE_NODE *) acpi_ds_obj_stack_get_value (0, walk_state);
-
- /* Create the region descriptor */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_REGION);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /*
- * Allocate a method object for this region.
- */
-
- obj_desc->region.extra = acpi_cm_create_internal_object (
- INTERNAL_TYPE_EXTRA);
- if (!obj_desc->region.extra) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /*
- * Remember location in AML stream of address & length
- * operands since they need to be evaluated at run time.
- */
-
- obj_desc->region.extra->extra.pcode = aml_ptr;
- obj_desc->region.extra->extra.pcode_length = aml_length;
-
- /* Init the region from the operands */
-
- obj_desc->region.space_id = region_space;
- obj_desc->region.address = 0;
- obj_desc->region.length = 0;
-
-
- /* Install the new region object in the parent Node */
-
- obj_desc->region.node = node;
-
- status = acpi_ns_attach_object (node, obj_desc,
- (u8) ACPI_TYPE_REGION);
-
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /*
- * If we have a valid region, initialize it
- * Namespace is NOT locked at this point.
- */
-
- status = acpi_ev_initialize_region (obj_desc, FALSE);
-
- if (ACPI_FAILURE (status)) {
- /*
- * If AE_NOT_EXIST is returned, it is not fatal
- * because many regions get created before a handler
- * is installed for said region.
- */
- if (AE_NOT_EXIST == status) {
- status = AE_OK;
- }
- }
-
-cleanup:
-
- if (ACPI_FAILURE (status)) {
- /* Delete region object and method subobject */
-
- if (obj_desc) {
- /* Remove deletes both objects! */
-
- acpi_cm_remove_reference (obj_desc);
- obj_desc = NULL;
- }
- }
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_create_processor
- *
- * PARAMETERS: Op - Op containing the Processor definition and
- * args
- * Processor_nTE - Node for the containing Node
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new processor object and populate the fields
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_create_processor (
- ACPI_PARSE_OBJECT *op,
- ACPI_HANDLE processor_nTE)
-{
- ACPI_STATUS status;
- ACPI_PARSE_OBJECT *arg;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_PROCESSOR);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- return (status);
- }
-
- /* Install the new processor object in the parent Node */
-
- status = acpi_ns_attach_object (processor_nTE, obj_desc,
- (u8) ACPI_TYPE_PROCESSOR);
- if (ACPI_FAILURE (status)) {
- return(status);
- }
-
- arg = op->value.arg;
-
- /* check existence */
-
- if (!arg) {
- status = AE_AML_NO_OPERAND;
- return (status);
- }
-
- /* First arg is the Processor ID */
-
- obj_desc->processor.proc_id = (u8) arg->value.integer;
-
- /* Move to next arg and check existence */
-
- arg = arg->next;
- if (!arg) {
- status = AE_AML_NO_OPERAND;
- return (status);
- }
-
- /* Second arg is the PBlock Address */
-
- obj_desc->processor.address = (ACPI_IO_ADDRESS) arg->value.integer;
-
- /* Move to next arg and check existence */
-
- arg = arg->next;
- if (!arg) {
- status = AE_AML_NO_OPERAND;
- return (status);
- }
-
- /* Third arg is the PBlock Length */
-
- obj_desc->processor.length = (u8) arg->value.integer;
-
- return (AE_OK);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_create_power_resource
- *
- * PARAMETERS: Op - Op containing the Power_resource definition
- * and args
- * Power_res_nTE - Node for the containing Node
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new Power_resource object and populate the fields
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_create_power_resource (
- ACPI_PARSE_OBJECT *op,
- ACPI_HANDLE power_res_nTE)
-{
- ACPI_STATUS status;
- ACPI_PARSE_OBJECT *arg;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_POWER);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- return (status);
- }
-
- /* Install the new power resource object in the parent Node */
-
- status = acpi_ns_attach_object (power_res_nTE, obj_desc,
- (u8) ACPI_TYPE_POWER);
- if (ACPI_FAILURE (status)) {
- return(status);
- }
-
- arg = op->value.arg;
-
- /* check existence */
-
- if (!arg) {
- status = AE_AML_NO_OPERAND;
- return (status);
- }
-
- /* First arg is the System_level */
-
- obj_desc->power_resource.system_level = (u8) arg->value.integer;
-
- /* Move to next arg and check existence */
-
- arg = arg->next;
- if (!arg) {
- status = AE_AML_NO_OPERAND;
- return (status);
- }
-
- /* Second arg is the PBlock Address */
-
- obj_desc->power_resource.resource_order = (u16) arg->value.integer;
-
- return (AE_OK);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_create_method
- *
- * PARAMETERS: Aml_ptr - First byte of the method's AML
- * Aml_length - AML byte count for this method
- * Method_flags - AML method flag byte
- * Method - Method Node
- *
- * RETURN: Status
- *
- * DESCRIPTION: Create a new method object
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_create_method (
- u8 *aml_ptr,
- u32 aml_length,
- u32 method_flags,
- ACPI_HANDLE method)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_STATUS status;
-
-
- /* Create a new method object */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_METHOD);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Get the method's AML pointer/length from the Op */
-
- obj_desc->method.pcode = aml_ptr;
- obj_desc->method.pcode_length = aml_length;
-
- /*
- * First argument is the Method Flags (contains parameter count for the
- * method)
- */
-
- obj_desc->method.method_flags = (u8) method_flags;
- obj_desc->method.param_count = (u8) (method_flags &
- METHOD_FLAGS_ARG_COUNT);
-
- /*
- * Get the concurrency count. If required, a semaphore will be
- * created for this method when it is parsed.
- */
- if (method_flags & METHOD_FLAGS_SERIALIZED) {
- /*
- * ACPI 1.0: Concurrency = 1
- * ACPI 2.0: Concurrency = (Sync_level (in method declaration) + 1)
- */
- obj_desc->method.concurrency = (u8)
- (((method_flags & METHOD_FLAGS_SYNCH_LEVEL) >> 4) + 1);
- }
-
- else {
- obj_desc->method.concurrency = INFINITE_CONCURRENCY;
- }
-
- /* Attach the new object to the method Node */
-
- status = acpi_ns_attach_object (method, obj_desc, (u8) ACPI_TYPE_METHOD);
- if (ACPI_FAILURE (status)) {
- acpi_cm_delete_object_desc (obj_desc);
- }
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amdump.c b/reactos/drivers/bus/acpi/executer/amdump.c
deleted file mode 100644
index 4f04ee97033..00000000000
--- a/reactos/drivers/bus/acpi/executer/amdump.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/******************************************************************************
- *
- * Module Name: amdump - Interpreter debug output routines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amdump")
-
-
-/*
- * The following routines are used for debug output only
- */
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amdyadic.c b/reactos/drivers/bus/acpi/executer/amdyadic.c
deleted file mode 100644
index 66744f89b6f..00000000000
--- a/reactos/drivers/bus/acpi/executer/amdyadic.c
+++ /dev/null
@@ -1,870 +0,0 @@
-/******************************************************************************
- *
- * Module Name: amdyadic - ACPI AML (p-code) execution for dyadic operators
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amdyadic")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_do_concatenate
- *
- * PARAMETERS: *Obj_desc - Object to be converted. Must be an
- * Integer, Buffer, or String
- *
- * RETURN: Status
- *
- * DESCRIPTION: Concatenate two objects OF THE SAME TYPE.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_do_concatenate (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_OPERAND_OBJECT *obj_desc2,
- ACPI_OPERAND_OBJECT **actual_ret_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
- u32 i;
- ACPI_INTEGER this_integer;
- ACPI_OPERAND_OBJECT *ret_desc;
- NATIVE_CHAR *new_buf;
- u32 integer_size = sizeof (ACPI_INTEGER);
-
-
- /*
- * There are three cases to handle:
- * 1) Two Integers concatenated to produce a buffer
- * 2) Two Strings concatenated to produce a string
- * 3) Two Buffers concatenated to produce a buffer
- */
- switch (obj_desc->common.type) {
- case ACPI_TYPE_INTEGER:
-
- /* Handle both ACPI 1.0 and ACPI 2.0 Integer widths */
-
- if (walk_state->method_node->flags & ANOBJ_DATA_WIDTH_32) {
- /*
- * We are running a method that exists in a 32-bit ACPI table.
- * Truncate the value to 32 bits by zeroing out the upper
- * 32-bit field
- */
- integer_size = sizeof (u32);
- }
-
- /* Result of two integers is a buffer */
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_BUFFER);
- if (!ret_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Need enough space for two integers */
-
- ret_desc->buffer.length = integer_size * 2;
- new_buf = acpi_cm_callocate (ret_desc->buffer.length);
- if (!new_buf) {
- REPORT_ERROR
- (("Aml_exec_dyadic2_r/Concat_op: Buffer allocation failure\n"));
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- ret_desc->buffer.pointer = (u8 *) new_buf;
-
- /* Convert the first integer */
-
- this_integer = obj_desc->integer.value;
- for (i = 0; i < integer_size; i++) {
- new_buf[i] = (u8) this_integer;
- this_integer >>= 8;
- }
-
- /* Convert the second integer */
-
- this_integer = obj_desc2->integer.value;
- for (; i < (integer_size * 2); i++) {
- new_buf[i] = (u8) this_integer;
- this_integer >>= 8;
- }
-
- break;
-
-
- case ACPI_TYPE_STRING:
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_STRING);
- if (!ret_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Operand1 is string */
-
- new_buf = acpi_cm_allocate (obj_desc->string.length +
- obj_desc2->string.length + 1);
- if (!new_buf) {
- REPORT_ERROR
- (("Aml_exec_dyadic2_r/Concat_op: String allocation failure\n"));
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- STRCPY (new_buf, obj_desc->string.pointer);
- STRCPY (new_buf + obj_desc->string.length,
- obj_desc2->string.pointer);
-
- /* Point the return object to the new string */
-
- ret_desc->string.pointer = new_buf;
- ret_desc->string.length = obj_desc->string.length +=
- obj_desc2->string.length;
- break;
-
-
- case ACPI_TYPE_BUFFER:
-
- /* Operand1 is a buffer */
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_BUFFER);
- if (!ret_desc) {
- return (AE_NO_MEMORY);
- }
-
- new_buf = acpi_cm_allocate (obj_desc->buffer.length +
- obj_desc2->buffer.length);
- if (!new_buf) {
- REPORT_ERROR
- (("Aml_exec_dyadic2_r/Concat_op: Buffer allocation failure\n"));
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- MEMCPY (new_buf, obj_desc->buffer.pointer,
- obj_desc->buffer.length);
- MEMCPY (new_buf + obj_desc->buffer.length, obj_desc2->buffer.pointer,
- obj_desc2->buffer.length);
-
- /*
- * Point the return object to the new buffer
- */
-
- ret_desc->buffer.pointer = (u8 *) new_buf;
- ret_desc->buffer.length = obj_desc->buffer.length +
- obj_desc2->buffer.length;
- break;
-
- default:
- status = AE_AML_INTERNAL;
- ret_desc = NULL;
- }
-
-
- *actual_ret_desc = ret_desc;
- return (AE_OK);
-
-
-cleanup:
-
- acpi_cm_remove_reference (ret_desc);
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_dyadic1
- *
- * PARAMETERS: Opcode - The opcode to be executed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Type 1 dyadic operator with numeric operands:
- * Notify_op
- *
- * ALLOCATION: Deletes both operands
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_dyadic1 (
- u16 opcode,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *obj_desc = NULL;
- ACPI_OPERAND_OBJECT *val_desc = NULL;
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status = AE_OK;
-
-
- /* Resolve all operands */
-
- status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state);
- /* Get the operands */
-
- status |= acpi_ds_obj_stack_pop_object (&val_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- /* Invalid parameters on object stack */
-
- goto cleanup;
- }
-
-
- /* Examine the opcode */
-
- switch (opcode) {
-
- /* Def_notify := Notify_op Notify_object Notify_value */
-
- case AML_NOTIFY_OP:
-
- /* The Obj_desc is actually an Node */
-
- node = (ACPI_NAMESPACE_NODE *) obj_desc;
- obj_desc = NULL;
-
- /* Object must be a device or thermal zone */
-
- if (node && val_desc) {
- switch (node->type) {
- case ACPI_TYPE_DEVICE:
- case ACPI_TYPE_THERMAL:
-
- /*
- * Dispatch the notify to the appropriate handler
- * NOTE: the request is queued for execution after this method
- * completes. The notify handlers are NOT invoked synchronously
- * from this thread -- because handlers may in turn run other
- * control methods.
- */
-
- status = acpi_ev_queue_notify_request (node,
- (u32) val_desc->integer.value);
- break;
-
- default:
- status = AE_AML_OPERAND_TYPE;
- break;
- }
- }
- break;
-
- default:
-
- REPORT_ERROR (("Acpi_aml_exec_dyadic1: Unknown dyadic opcode %X\n",
- opcode));
- status = AE_AML_BAD_OPCODE;
- }
-
-
-cleanup:
-
- /* Always delete both operands */
-
- acpi_cm_remove_reference (val_desc);
- acpi_cm_remove_reference (obj_desc);
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_dyadic2_r
- *
- * PARAMETERS: Opcode - The opcode to be executed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Type 2 dyadic operator with numeric operands and
- * one or two result operands.
- *
- * ALLOCATION: Deletes one operand descriptor -- other remains on stack
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_dyadic2_r (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc)
-{
- ACPI_OPERAND_OBJECT *obj_desc = NULL;
- ACPI_OPERAND_OBJECT *obj_desc2 = NULL;
- ACPI_OPERAND_OBJECT *res_desc = NULL;
- ACPI_OPERAND_OBJECT *res_desc2 = NULL;
- ACPI_OPERAND_OBJECT *ret_desc = NULL;
- ACPI_OPERAND_OBJECT *ret_desc2 = NULL;
- ACPI_STATUS status = AE_OK;
- u32 num_operands = 3;
-
-
- /* Resolve all operands */
-
- status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state);
- /* Get all operands */
-
- if (AML_DIVIDE_OP == opcode) {
- num_operands = 4;
- status |= acpi_ds_obj_stack_pop_object (&res_desc2, walk_state);
- }
-
- status |= acpi_ds_obj_stack_pop_object (&res_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&obj_desc2, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /* Create an internal return object if necessary */
-
- switch (opcode) {
- case AML_ADD_OP:
- case AML_BIT_AND_OP:
- case AML_BIT_NAND_OP:
- case AML_BIT_OR_OP:
- case AML_BIT_NOR_OP:
- case AML_BIT_XOR_OP:
- case AML_DIVIDE_OP:
- case AML_MULTIPLY_OP:
- case AML_SHIFT_LEFT_OP:
- case AML_SHIFT_RIGHT_OP:
- case AML_SUBTRACT_OP:
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- break;
- }
-
-
- /*
- * Execute the opcode
- */
-
- switch (opcode) {
-
- /* Def_add := Add_op Operand1 Operand2 Result */
-
- case AML_ADD_OP:
-
- ret_desc->integer.value = obj_desc->integer.value +
- obj_desc2->integer.value;
- break;
-
-
- /* Def_and := And_op Operand1 Operand2 Result */
-
- case AML_BIT_AND_OP:
-
- ret_desc->integer.value = obj_desc->integer.value &
- obj_desc2->integer.value;
- break;
-
-
- /* Def_nAnd := NAnd_op Operand1 Operand2 Result */
-
- case AML_BIT_NAND_OP:
-
- ret_desc->integer.value = ~(obj_desc->integer.value &
- obj_desc2->integer.value);
- break;
-
-
- /* Def_or := Or_op Operand1 Operand2 Result */
-
- case AML_BIT_OR_OP:
-
- ret_desc->integer.value = obj_desc->integer.value |
- obj_desc2->integer.value;
- break;
-
-
- /* Def_nOr := NOr_op Operand1 Operand2 Result */
-
- case AML_BIT_NOR_OP:
-
- ret_desc->integer.value = ~(obj_desc->integer.value |
- obj_desc2->integer.value);
- break;
-
-
- /* Def_xOr := XOr_op Operand1 Operand2 Result */
-
- case AML_BIT_XOR_OP:
-
- ret_desc->integer.value = obj_desc->integer.value ^
- obj_desc2->integer.value;
- break;
-
-
- /* Def_divide := Divide_op Dividend Divisor Remainder Quotient */
-
- case AML_DIVIDE_OP:
-
- if (!obj_desc2->integer.value) {
- REPORT_ERROR
- (("Aml_exec_dyadic2_r/Divide_op: Divide by zero\n"));
-
- status = AE_AML_DIVIDE_BY_ZERO;
- goto cleanup;
- }
-
- ret_desc2 = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc2) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /* Remainder (modulo) */
-
- ret_desc->integer.value = ACPI_MODULO (obj_desc->integer.value,
- obj_desc2->integer.value);
-
- /* Result (what we used to call the quotient) */
-
- ret_desc2->integer.value = ACPI_DIVIDE (obj_desc->integer.value,
- obj_desc2->integer.value);
- break;
-
-
- /* Def_multiply := Multiply_op Operand1 Operand2 Result */
-
- case AML_MULTIPLY_OP:
-
- ret_desc->integer.value = obj_desc->integer.value *
- obj_desc2->integer.value;
- break;
-
-
- /* Def_shift_left := Shift_left_op Operand Shift_count Result */
-
- case AML_SHIFT_LEFT_OP:
-
- ret_desc->integer.value = obj_desc->integer.value <<
- obj_desc2->integer.value;
- break;
-
-
- /* Def_shift_right := Shift_right_op Operand Shift_count Result */
-
- case AML_SHIFT_RIGHT_OP:
-
- ret_desc->integer.value = obj_desc->integer.value >>
- obj_desc2->integer.value;
- break;
-
-
- /* Def_subtract := Subtract_op Operand1 Operand2 Result */
-
- case AML_SUBTRACT_OP:
-
- ret_desc->integer.value = obj_desc->integer.value -
- obj_desc2->integer.value;
- break;
-
-
- /* Def_concat := Concat_op Data1 Data2 Result */
-
- case AML_CONCAT_OP:
-
-
- /*
- * Convert the second operand if necessary. The first operand
- * determines the type of the second operand, (See the Data Types
- * section of the ACPI specification.) Both object types are
- * guaranteed to be either Integer/String/Buffer by the operand
- * resolution mechanism above.
- */
-
- switch (obj_desc->common.type) {
- case ACPI_TYPE_INTEGER:
- status = acpi_aml_convert_to_integer (&obj_desc2, walk_state);
- break;
-
- case ACPI_TYPE_STRING:
- status = acpi_aml_convert_to_string (&obj_desc2, walk_state);
- break;
-
- case ACPI_TYPE_BUFFER:
- status = acpi_aml_convert_to_buffer (&obj_desc2, walk_state);
- break;
-
- default:
- status = AE_AML_INTERNAL;
- }
-
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /*
- * Both operands are now known to be the same object type
- * (Both are Integer, String, or Buffer), and we can now perform the
- * concatenation.
- */
- status = acpi_aml_do_concatenate (obj_desc, obj_desc2, &ret_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
- break;
-
-
- default:
-
- REPORT_ERROR (("Acpi_aml_exec_dyadic2_r: Unknown dyadic opcode %X\n",
- opcode));
- status = AE_AML_BAD_OPCODE;
- goto cleanup;
- }
-
-
- /*
- * Store the result of the operation (which is now in Obj_desc) into
- * the result descriptor, or the location pointed to by the result
- * descriptor (Res_desc).
- */
-
- status = acpi_aml_exec_store (ret_desc, res_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- if (AML_DIVIDE_OP == opcode) {
- status = acpi_aml_exec_store (ret_desc2, res_desc2, walk_state);
-
- /*
- * Since the remainder is not returned, remove a reference to
- * the object we created earlier
- */
-
- acpi_cm_remove_reference (ret_desc2);
- }
-
-
-cleanup:
-
- /* Always delete the operands */
-
- acpi_cm_remove_reference (obj_desc);
- acpi_cm_remove_reference (obj_desc2);
-
-
- /* Delete return object on error */
-
- if (ACPI_FAILURE (status)) {
- /* On failure, delete the result ops */
-
- acpi_cm_remove_reference (res_desc);
- acpi_cm_remove_reference (res_desc2);
-
- if (ret_desc) {
- /* And delete the internal return object */
-
- acpi_cm_remove_reference (ret_desc);
- ret_desc = NULL;
- }
- }
-
- /* Set the return object and exit */
-
- *return_desc = ret_desc;
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_dyadic2_s
- *
- * PARAMETERS: Opcode - The opcode to be executed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Type 2 dyadic synchronization operator
- *
- * ALLOCATION: Deletes one operand descriptor -- other remains on stack
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_dyadic2_s (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *time_desc;
- ACPI_OPERAND_OBJECT *ret_desc = NULL;
- ACPI_STATUS status;
-
-
- /* Resolve all operands */
-
- status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state);
- /* Get all operands */
-
- status |= acpi_ds_obj_stack_pop_object (&time_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- /* Invalid parameters on object stack */
-
- goto cleanup;
- }
-
-
- /* Create the internal return object */
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /* Default return value is FALSE, operation did not time out */
-
- ret_desc->integer.value = 0;
-
-
- /* Examine the opcode */
-
- switch (opcode) {
-
- /* Def_acquire := Acquire_op Mutex_object Timeout */
-
- case AML_ACQUIRE_OP:
-
- status = acpi_aml_acquire_mutex (time_desc, obj_desc, walk_state);
- break;
-
-
- /* Def_wait := Wait_op Acpi_event_object Timeout */
-
- case AML_WAIT_OP:
-
- status = acpi_aml_system_wait_event (time_desc, obj_desc);
- break;
-
-
- default:
-
- REPORT_ERROR (("Acpi_aml_exec_dyadic2_s: Unknown dyadic synchronization opcode %X\n", opcode));
- status = AE_AML_BAD_OPCODE;
- goto cleanup;
- }
-
-
- /*
- * Return a boolean indicating if operation timed out
- * (TRUE) or not (FALSE)
- */
-
- if (status == AE_TIME) {
- ret_desc->integer.value = ACPI_INTEGER_MAX; /* TRUE, op timed out */
- status = AE_OK;
- }
-
-
-cleanup:
-
- /* Delete params */
-
- acpi_cm_remove_reference (time_desc);
- acpi_cm_remove_reference (obj_desc);
-
- /* Delete return object on error */
-
- if (ACPI_FAILURE (status) &&
- (ret_desc)) {
- acpi_cm_remove_reference (ret_desc);
- ret_desc = NULL;
- }
-
-
- /* Set the return object and exit */
-
- *return_desc = ret_desc;
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_dyadic2
- *
- * PARAMETERS: Opcode - The opcode to be executed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Type 2 dyadic operator with numeric operands and
- * no result operands
- *
- * ALLOCATION: Deletes one operand descriptor -- other remains on stack
- * containing result value
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_dyadic2 (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *obj_desc2;
- ACPI_OPERAND_OBJECT *ret_desc = NULL;
- ACPI_STATUS status;
- u8 lboolean;
-
-
- /* Resolve all operands */
-
- status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state);
- /* Get all operands */
-
- status |= acpi_ds_obj_stack_pop_object (&obj_desc2, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- /* Invalid parameters on object stack */
-
- goto cleanup;
- }
-
-
- /* Create the internal return object */
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- /*
- * Execute the Opcode
- */
-
- lboolean = FALSE;
- switch (opcode) {
-
- /* Def_lAnd := LAnd_op Operand1 Operand2 */
-
- case AML_LAND_OP:
-
- lboolean = (u8) (obj_desc->integer.value &&
- obj_desc2->integer.value);
- break;
-
-
- /* Def_lEqual := LEqual_op Operand1 Operand2 */
-
- case AML_LEQUAL_OP:
-
- lboolean = (u8) (obj_desc->integer.value ==
- obj_desc2->integer.value);
- break;
-
-
- /* Def_lGreater := LGreater_op Operand1 Operand2 */
-
- case AML_LGREATER_OP:
-
- lboolean = (u8) (obj_desc->integer.value >
- obj_desc2->integer.value);
- break;
-
-
- /* Def_lLess := LLess_op Operand1 Operand2 */
-
- case AML_LLESS_OP:
-
- lboolean = (u8) (obj_desc->integer.value <
- obj_desc2->integer.value);
- break;
-
-
- /* Def_lOr := LOr_op Operand1 Operand2 */
-
- case AML_LOR_OP:
-
- lboolean = (u8) (obj_desc->integer.value ||
- obj_desc2->integer.value);
- break;
-
-
- default:
-
- REPORT_ERROR (("Acpi_aml_exec_dyadic2: Unknown dyadic opcode %X\n", opcode));
- status = AE_AML_BAD_OPCODE;
- goto cleanup;
- break;
- }
-
-
- /* Set return value to logical TRUE (all ones) or FALSE (zero) */
-
- if (lboolean) {
- ret_desc->integer.value = ACPI_INTEGER_MAX;
- }
- else {
- ret_desc->integer.value = 0;
- }
-
-
-cleanup:
-
- /* Always delete operands */
-
- acpi_cm_remove_reference (obj_desc);
- acpi_cm_remove_reference (obj_desc2);
-
-
- /* Delete return object on error */
-
- if (ACPI_FAILURE (status) &&
- (ret_desc)) {
- acpi_cm_remove_reference (ret_desc);
- ret_desc = NULL;
- }
-
-
- /* Set the return object and exit */
-
- *return_desc = ret_desc;
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amfield.c b/reactos/drivers/bus/acpi/executer/amfield.c
deleted file mode 100644
index cb3007c9b70..00000000000
--- a/reactos/drivers/bus/acpi/executer/amfield.c
+++ /dev/null
@@ -1,274 +0,0 @@
-/******************************************************************************
- *
- * Module Name: amfield - ACPI AML (p-code) execution - field manipulation
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amfield")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_setup_field
- *
- * PARAMETERS: *Obj_desc - Field to be read or written
- * *Rgn_desc - Region containing field
- * Field_bit_width - Field Width in bits (8, 16, or 32)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Common processing for Acpi_aml_read_field and Acpi_aml_write_field
- *
- * ACPI SPECIFICATION REFERENCES:
- * Each of the Type1_opcodes is defined as specified in in-line
- * comments below. For each one, use the following definitions.
- *
- * Def_bit_field := Bit_field_op Src_buf Bit_idx Destination
- * Def_byte_field := Byte_field_op Src_buf Byte_idx Destination
- * Def_create_field := Create_field_op Src_buf Bit_idx Num_bits Name_string
- * Def_dWord_field := DWord_field_op Src_buf Byte_idx Destination
- * Def_word_field := Word_field_op Src_buf Byte_idx Destination
- * Bit_index := Term_arg=>Integer
- * Byte_index := Term_arg=>Integer
- * Destination := Name_string
- * Num_bits := Term_arg=>Integer
- * Source_buf := Term_arg=>Buffer
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_setup_field (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_OPERAND_OBJECT *rgn_desc,
- u32 field_bit_width)
-{
- ACPI_STATUS status = AE_OK;
- u32 field_byte_width;
-
-
- /* Parameter validation */
-
- if (!obj_desc || !rgn_desc) {
- return (AE_AML_NO_OPERAND);
- }
-
- if (ACPI_TYPE_REGION != rgn_desc->common.type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
-
- /*
- * TBD: [Future] Acpi 2.0 supports Qword fields
- *
- * Init and validate Field width
- * Possible values are 1, 2, 4
- */
-
- field_byte_width = DIV_8 (field_bit_width);
-
- if ((field_bit_width != 8) &&
- (field_bit_width != 16) &&
- (field_bit_width != 32)) {
- return (AE_AML_OPERAND_VALUE);
- }
-
-
- /*
- * If the Region Address and Length have not been previously evaluated,
- * evaluate them and save the results.
- */
- if (!(rgn_desc->region.flags & AOPOBJ_DATA_VALID)) {
-
- status = acpi_ds_get_region_arguments (rgn_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
-
- if ((obj_desc->common.type == ACPI_TYPE_FIELD_UNIT) &&
- (!(obj_desc->common.flags & AOPOBJ_DATA_VALID))) {
- /*
- * Field Buffer and Index have not been previously evaluated,
- */
- return (AE_AML_INTERNAL);
- }
-
- if (rgn_desc->region.length <
- (obj_desc->field.offset & ~((u32) field_byte_width - 1)) +
- field_byte_width) {
- /*
- * Offset rounded up to next multiple of field width
- * exceeds region length, indicate an error
- */
-
- return (AE_AML_REGION_LIMIT);
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_access_named_field
- *
- * PARAMETERS: Mode - ACPI_READ or ACPI_WRITE
- * Named_field - Handle for field to be accessed
- * *Buffer - Value(s) to be read or written
- * Buffer_length - Number of bytes to transfer
- *
- * RETURN: Status
- *
- * DESCRIPTION: Read or write a named field
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_access_named_field (
- u32 mode,
- ACPI_HANDLE named_field,
- void *buffer,
- u32 buffer_length)
-{
- ACPI_OPERAND_OBJECT *obj_desc = NULL;
- ACPI_STATUS status = AE_OK;
- u8 locked = FALSE;
- u32 bit_granularity = 0;
- u32 byte_granularity;
- u32 datum_length;
- u32 actual_byte_length;
- u32 byte_field_length;
-
-
- /* Parameter validation */
-
- if ((!named_field) || (ACPI_READ == mode && !buffer)) {
- return (AE_AML_INTERNAL);
- }
-
- /* Get the attached field object */
-
- obj_desc = acpi_ns_get_attached_object (named_field);
- if (!obj_desc) {
- return (AE_AML_INTERNAL);
- }
-
- /* Check the type */
-
- if (INTERNAL_TYPE_DEF_FIELD != acpi_ns_get_type (named_field)) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /* Obj_desc valid and Named_field is a defined field */
-
-
- /* Double-check that the attached object is also a field */
-
- if (INTERNAL_TYPE_DEF_FIELD != obj_desc->common.type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
-
- /*
- * Granularity was decoded from the field access type
- * (Any_acc will be the same as Byte_acc)
- */
-
- bit_granularity = obj_desc->field_unit.granularity;
- byte_granularity = DIV_8 (bit_granularity);
-
- /*
- * Check if request is too large for the field, and silently truncate
- * if necessary
- */
-
- /* TBD: [Errors] should an error be returned in this case? */
-
- byte_field_length = (u32) DIV_8 (obj_desc->field_unit.length + 7);
-
-
- actual_byte_length = buffer_length;
- if (buffer_length > byte_field_length) {
- actual_byte_length = byte_field_length;
- }
-
- /* TBD: should these round down to a power of 2? */
-
- if (DIV_8 (bit_granularity) > byte_field_length) {
- bit_granularity = MUL_8(byte_field_length);
- }
-
- if (byte_granularity > byte_field_length) {
- byte_granularity = byte_field_length;
- }
-
-
- /* Convert byte count to datum count, round up if necessary */
-
- datum_length = (actual_byte_length + (byte_granularity-1)) / byte_granularity;
-
-
- /* Get the global lock if needed */
-
- locked = acpi_aml_acquire_global_lock (obj_desc->field_unit.lock_rule);
-
-
- /* Perform the actual read or write of the buffer */
-
- switch (mode) {
- case ACPI_READ:
-
- status = acpi_aml_read_field (obj_desc, buffer, buffer_length,
- actual_byte_length, datum_length,
- bit_granularity, byte_granularity);
- break;
-
-
- case ACPI_WRITE:
-
- status = acpi_aml_write_field (obj_desc, buffer, buffer_length,
- actual_byte_length, datum_length,
- bit_granularity, byte_granularity);
- break;
-
-
- default:
-
- status = AE_BAD_PARAMETER;
- break;
- }
-
-
- /* Release global lock if we acquired it earlier */
-
- acpi_aml_release_global_lock (locked);
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/executer/amfldio.c b/reactos/drivers/bus/acpi/executer/amfldio.c
deleted file mode 100644
index 6804692d6ed..00000000000
--- a/reactos/drivers/bus/acpi/executer/amfldio.c
+++ /dev/null
@@ -1,668 +0,0 @@
-/******************************************************************************
- *
- * Module Name: amfldio - Aml Field I/O
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amfldio")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_read_field_data
- *
- * PARAMETERS: *Obj_desc - Field to be read
- * *Value - Where to store value
- * Field_bit_width - Field Width in bits (8, 16, or 32)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Retrieve the value of the given field
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_read_field_data (
- ACPI_OPERAND_OBJECT *obj_desc,
- u32 field_byte_offset,
- u32 field_bit_width,
- u32 *value)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *rgn_desc = NULL;
- ACPI_PHYSICAL_ADDRESS address;
- u32 local_value = 0;
- u32 field_byte_width;
-
-
- /* Obj_desc is validated by callers */
-
- if (obj_desc) {
- rgn_desc = obj_desc->field.container;
- }
-
-
- field_byte_width = DIV_8 (field_bit_width);
- status = acpi_aml_setup_field (obj_desc, rgn_desc, field_bit_width);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Setup_field validated Rgn_desc and Field_bit_width */
-
- if (!value) {
- value = &local_value; /* support reads without saving value */
- }
-
-
- /*
- * Set offset to next multiple of field width,
- * add region base address and offset within the field
- */
- address = rgn_desc->region.address +
- (obj_desc->field.offset * field_byte_width) +
- field_byte_offset;
-
-
- /* Invoke the appropriate Address_space/Op_region handler */
-
- status = acpi_ev_address_space_dispatch (rgn_desc, ADDRESS_SPACE_READ,
- address, field_bit_width, value);
-
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_read_field
- *
- * PARAMETERS: *Obj_desc - Field to be read
- * *Value - Where to store value
- * Field_bit_width - Field Width in bits (8, 16, or 32)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Retrieve the value of the given field
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_read_field (
- ACPI_OPERAND_OBJECT *obj_desc,
- void *buffer,
- u32 buffer_length,
- u32 byte_length,
- u32 datum_length,
- u32 bit_granularity,
- u32 byte_granularity)
-{
- ACPI_STATUS status;
- u32 this_field_byte_offset;
- u32 this_field_datum_offset;
- u32 previous_raw_datum;
- u32 this_raw_datum = 0;
- u32 valid_field_bits;
- u32 mask;
- u32 merged_datum = 0;
-
-
- /*
- * Clear the caller's buffer (the whole buffer length as given)
- * This is very important, especially in the cases where a byte is read,
- * but the buffer is really a u32 (4 bytes).
- */
-
- MEMSET (buffer, 0, buffer_length);
-
- /* Read the first raw datum to prime the loop */
-
- this_field_byte_offset = 0;
- this_field_datum_offset= 0;
-
- status = acpi_aml_read_field_data (obj_desc, this_field_byte_offset, bit_granularity,
- &previous_raw_datum);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /* We might actually be done if the request fits in one datum */
-
- if ((datum_length == 1) &&
- ((obj_desc->field.bit_offset + obj_desc->field_unit.length) <=
- (u16) bit_granularity)) {
- merged_datum = previous_raw_datum;
-
- merged_datum = (merged_datum >> obj_desc->field.bit_offset);
-
- valid_field_bits = obj_desc->field_unit.length % bit_granularity;
- if (valid_field_bits) {
- mask = (((u32) 1 << valid_field_bits) - (u32) 1);
- merged_datum &= mask;
- }
-
-
- /*
- * Place the Merged_datum into the proper format and return buffer
- * field
- */
-
- switch (byte_granularity) {
- case 1:
- ((u8 *) buffer) [this_field_datum_offset] = (u8) merged_datum;
- break;
-
- case 2:
- MOVE_UNALIGNED16_TO_16 (&(((u16 *) buffer)[this_field_datum_offset]), &merged_datum);
- break;
-
- case 4:
- MOVE_UNALIGNED32_TO_32 (&(((u32 *) buffer)[this_field_datum_offset]), &merged_datum);
- break;
- }
-
- this_field_byte_offset = 1;
- this_field_datum_offset = 1;
- }
-
- else {
- /* We need to get more raw data to complete one or more field data */
-
- while (this_field_datum_offset < datum_length) {
- /*
- * If the field is aligned on a byte boundary, we don't want
- * to perform a final read, since this would potentially read
- * past the end of the region.
- *
- * TBD: [Investigate] It may make more sense to just split the aligned
- * and non-aligned cases since the aligned case is so very simple,
- */
- if ((obj_desc->field.bit_offset != 0) ||
- ((obj_desc->field.bit_offset == 0) &&
- (this_field_datum_offset < (datum_length -1)))) {
- /*
- * Get the next raw datum, it contains some or all bits
- * of the current field datum
- */
-
- status = acpi_aml_read_field_data (obj_desc,
- this_field_byte_offset + byte_granularity,
- bit_granularity, &this_raw_datum);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /* Before merging the data, make sure the unused bits are clear */
-
- switch (byte_granularity) {
- case 1:
- this_raw_datum &= 0x000000FF;
- previous_raw_datum &= 0x000000FF;
- break;
-
- case 2:
- this_raw_datum &= 0x0000FFFF;
- previous_raw_datum &= 0x0000FFFF;
- break;
- }
- }
-
-
- /*
- * Put together bits of the two raw data to make a complete
- * field datum
- */
-
-
- if (obj_desc->field.bit_offset != 0) {
- merged_datum =
- (previous_raw_datum >> obj_desc->field.bit_offset) |
- (this_raw_datum << (bit_granularity - obj_desc->field.bit_offset));
- }
-
- else {
- merged_datum = previous_raw_datum;
- }
-
- /*
- * Prepare the merged datum for storing into the caller's
- * buffer. It is possible to have a 32-bit buffer
- * (Byte_granularity == 4), but a Obj_desc->Field.Length
- * of 8 or 16, meaning that the upper bytes of merged data
- * are undesired. This section fixes that.
- */
- switch (obj_desc->field.length) {
- case 8:
- merged_datum &= 0x000000FF;
- break;
-
- case 16:
- merged_datum &= 0x0000FFFF;
- break;
- }
-
- /*
- * Now store the datum in the caller's buffer, according to
- * the data type
- */
- switch (byte_granularity) {
- case 1:
- ((u8 *) buffer) [this_field_datum_offset] = (u8) merged_datum;
- break;
-
- case 2:
- MOVE_UNALIGNED16_TO_16 (&(((u16 *) buffer) [this_field_datum_offset]), &merged_datum);
- break;
-
- case 4:
- MOVE_UNALIGNED32_TO_32 (&(((u32 *) buffer) [this_field_datum_offset]), &merged_datum);
- break;
- }
-
- /*
- * Save the most recent datum since it contains bits of
- * the *next* field datum
- */
-
- previous_raw_datum = this_raw_datum;
-
- this_field_byte_offset += byte_granularity;
- this_field_datum_offset++;
-
- } /* while */
- }
-
-cleanup:
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_write_field_data
- *
- * PARAMETERS: *Obj_desc - Field to be set
- * Value - Value to store
- * Field_bit_width - Field Width in bits (8, 16, or 32)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Store the value into the given field
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-acpi_aml_write_field_data (
- ACPI_OPERAND_OBJECT *obj_desc,
- u32 field_byte_offset,
- u32 field_bit_width,
- u32 value)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *rgn_desc = NULL;
- ACPI_PHYSICAL_ADDRESS address;
- u32 field_byte_width;
-
-
- /* Obj_desc is validated by callers */
-
- if (obj_desc) {
- rgn_desc = obj_desc->field.container;
- }
-
- field_byte_width = DIV_8 (field_bit_width);
- status = acpi_aml_setup_field (obj_desc, rgn_desc, field_bit_width);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /*
- * Set offset to next multiple of field width,
- * add region base address and offset within the field
- */
- address = rgn_desc->region.address +
- (obj_desc->field.offset * field_byte_width) +
- field_byte_offset;
-
- /* Invoke the appropriate Address_space/Op_region handler */
-
- status = acpi_ev_address_space_dispatch (rgn_desc, ADDRESS_SPACE_WRITE,
- address, field_bit_width, &value);
-
-
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_write_field_data_with_update_rule
- *
- * PARAMETERS: *Obj_desc - Field to be set
- * Value - Value to store
- * Field_bit_width - Field Width in bits (8, 16, or 32)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Apply the field update rule to a field write
- *
- ****************************************************************************/
-
-static ACPI_STATUS
-acpi_aml_write_field_data_with_update_rule (
- ACPI_OPERAND_OBJECT *obj_desc,
- u32 mask,
- u32 field_value,
- u32 this_field_byte_offset,
- u32 bit_granularity)
-{
- ACPI_STATUS status = AE_OK;
- u32 merged_value;
- u32 current_value;
-
-
- /* Start with the new bits */
-
- merged_value = field_value;
-
-
- /* Decode the update rule */
-
- switch (obj_desc->field.update_rule) {
-
- case UPDATE_PRESERVE:
-
- /* Check if update rule needs to be applied (not if mask is all ones) */
-
- /* The left shift drops the bits we want to ignore. */
- if ((~mask << (sizeof(mask)*8 - bit_granularity)) != 0) {
- /*
- * Read the current contents of the byte/word/dword containing
- * the field, and merge with the new field value.
- */
- status = acpi_aml_read_field_data (obj_desc, this_field_byte_offset,
- bit_granularity, ¤t_value);
- merged_value |= (current_value & ~mask);
- }
- break;
-
-
- case UPDATE_WRITE_AS_ONES:
-
- /* Set positions outside the field to all ones */
-
- merged_value |= ~mask;
- break;
-
-
- case UPDATE_WRITE_AS_ZEROS:
-
- /* Set positions outside the field to all zeros */
-
- merged_value &= mask;
- break;
-
-
- default:
- status = AE_AML_OPERAND_VALUE;
- }
-
-
- /* Write the merged value */
-
- if (ACPI_SUCCESS (status)) {
- status = acpi_aml_write_field_data (obj_desc, this_field_byte_offset,
- bit_granularity, merged_value);
- }
-
- return (status);
-}
-
-
-/*****************************************************************************
- *
- * FUNCTION: Acpi_aml_write_field
- *
- * PARAMETERS: *Obj_desc - Field to be set
- * Value - Value to store
- * Field_bit_width - Field Width in bits (8, 16, or 32)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Store the value into the given field
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_aml_write_field (
- ACPI_OPERAND_OBJECT *obj_desc,
- void *buffer,
- u32 buffer_length,
- u32 byte_length,
- u32 datum_length,
- u32 bit_granularity,
- u32 byte_granularity)
-{
- ACPI_STATUS status;
- u32 this_field_byte_offset;
- u32 this_field_datum_offset;
- u32 mask;
- u32 merged_datum;
- u32 previous_raw_datum;
- u32 this_raw_datum;
- u32 field_value;
- u32 valid_field_bits;
-
-
- /*
- * Break the request into up to three parts:
- * non-aligned part at start, aligned part in middle, non-aligned part
- * at end --- Just like an I/O request ---
- */
-
- this_field_byte_offset = 0;
- this_field_datum_offset= 0;
-
- /* Get a datum */
-
- switch (byte_granularity) {
- case 1:
- previous_raw_datum = ((u8 *) buffer) [this_field_datum_offset];
- break;
-
- case 2:
- MOVE_UNALIGNED16_TO_32 (&previous_raw_datum, &(((u16 *) buffer) [this_field_datum_offset]));
- break;
-
- case 4:
- MOVE_UNALIGNED32_TO_32 (&previous_raw_datum, &(((u32 *) buffer) [this_field_datum_offset]));
- break;
-
- default:
- status = AE_AML_OPERAND_VALUE;
- goto cleanup;
- }
-
-
- /*
- * Write a partial field datum if field does not begin on a datum boundary
- *
- * Construct Mask with 1 bits where the field is, 0 bits elsewhere
- *
- * 1) Bits above the field
- */
-
- mask = (((u32)(-1)) << (u32)obj_desc->field.bit_offset);
-
- /* 2) Only the bottom 5 bits are valid for a shift operation. */
-
- if ((obj_desc->field.bit_offset + obj_desc->field_unit.length) < 32) {
- /* Bits above the field */
-
- mask &= (~(((u32)(-1)) << ((u32)obj_desc->field.bit_offset +
- (u32)obj_desc->field_unit.length)));
- }
-
- /* 3) Shift and mask the value into the field position */
-
- field_value = (previous_raw_datum << obj_desc->field.bit_offset) & mask;
-
- status = acpi_aml_write_field_data_with_update_rule (obj_desc, mask, field_value,
- this_field_byte_offset,
- bit_granularity);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /* If the field fits within one datum, we are done. */
-
- if ((datum_length == 1) &&
- ((obj_desc->field.bit_offset + obj_desc->field_unit.length) <=
- (u16) bit_granularity)) {
- goto cleanup;
- }
-
- /*
- * We don't need to worry about the update rule for these data, because
- * all of the bits are part of the field.
- *
- * Can't write the last datum, however, because it might contain bits that
- * are not part of the field -- the update rule must be applied.
- */
-
- while (this_field_datum_offset < (datum_length - 1)) {
- this_field_datum_offset++;
-
- /* Get the next raw datum, it contains bits of the current field datum... */
-
- switch (byte_granularity) {
- case 1:
- this_raw_datum = ((u8 *) buffer) [this_field_datum_offset];
- break;
-
- case 2:
- MOVE_UNALIGNED16_TO_32 (&this_raw_datum, &(((u16 *) buffer) [this_field_datum_offset]));
- break;
-
- case 4:
- MOVE_UNALIGNED32_TO_32 (&this_raw_datum, &(((u32 *) buffer) [this_field_datum_offset]));
- break;
-
- default:
- status = AE_AML_OPERAND_VALUE;
- goto cleanup;
- }
-
- /*
- * Put together bits of the two raw data to make a complete field
- * datum
- */
-
- if (obj_desc->field.bit_offset != 0) {
- merged_datum =
- (previous_raw_datum >> (bit_granularity - obj_desc->field.bit_offset)) |
- (this_raw_datum << obj_desc->field.bit_offset);
- }
-
- else {
- merged_datum = this_raw_datum;
- }
-
- /* Now write the completed datum */
-
-
- status = acpi_aml_write_field_data (obj_desc,
- this_field_byte_offset + byte_granularity,
- bit_granularity, merged_datum);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /*
- * Save the most recent datum since it contains bits of
- * the *next* field datum
- */
-
- previous_raw_datum = this_raw_datum;
-
- this_field_byte_offset += byte_granularity;
-
- } /* while */
-
-
- /* Write a partial field datum if field does not end on a datum boundary */
-
- if ((obj_desc->field_unit.length + obj_desc->field_unit.bit_offset) %
- bit_granularity) {
- switch (byte_granularity) {
- case 1:
- this_raw_datum = ((u8 *) buffer) [this_field_datum_offset];
- break;
-
- case 2:
- MOVE_UNALIGNED16_TO_32 (&this_raw_datum, &(((u16 *) buffer) [this_field_datum_offset]));
- break;
-
- case 4:
- MOVE_UNALIGNED32_TO_32 (&this_raw_datum, &(((u32 *) buffer) [this_field_datum_offset]));
- break;
- }
-
- /* Construct Mask with 1 bits where the field is, 0 bits elsewhere */
-
- valid_field_bits = ((obj_desc->field_unit.length % bit_granularity) +
- obj_desc->field.bit_offset);
-
- mask = (((u32) 1 << valid_field_bits) - (u32) 1);
-
- /* Shift and mask the value into the field position */
-
- field_value = (previous_raw_datum >>
- (bit_granularity - obj_desc->field.bit_offset)) & mask;
-
- status = acpi_aml_write_field_data_with_update_rule (obj_desc, mask, field_value,
- this_field_byte_offset + byte_granularity,
- bit_granularity);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
- }
-
-
-cleanup:
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/ammisc.c b/reactos/drivers/bus/acpi/executer/ammisc.c
deleted file mode 100644
index b4adaf1c0df..00000000000
--- a/reactos/drivers/bus/acpi/executer/ammisc.c
+++ /dev/null
@@ -1,510 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: ammisc - ACPI AML (p-code) execution - specific opcodes
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("ammisc")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_fatal
- *
- * PARAMETERS: none
- *
- * RETURN: Status. If the OS returns from the OSD call, we just keep
- * on going.
- *
- * DESCRIPTION: Execute Fatal operator
- *
- * ACPI SPECIFICATION REFERENCES:
- * Def_fatal := Fatal_op Fatal_type Fatal_code Fatal_arg
- * Fatal_type := Byte_data
- * Fatal_code := DWord_data
- * Fatal_arg := Term_arg=>Integer
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_fatal (
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *type_desc;
- ACPI_OPERAND_OBJECT *code_desc;
- ACPI_OPERAND_OBJECT *arg_desc;
- ACPI_STATUS status;
-
-
- /* Resolve operands */
-
- status = acpi_aml_resolve_operands (AML_FATAL_OP, WALK_OPERANDS, walk_state);
- /* Get operands */
-
- status |= acpi_ds_obj_stack_pop_object (&arg_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&code_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&type_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- /* Invalid parameters on object stack */
-
- goto cleanup;
- }
-
-
- /* Def_fatal := Fatal_op Fatal_type Fatal_code Fatal_arg */
-
-
- /*
- * TBD: [Unhandled] call OSD interface to notify OS of fatal error
- * requiring shutdown!
- */
-
-
-cleanup:
-
- /* Free the operands */
-
- acpi_cm_remove_reference (arg_desc);
- acpi_cm_remove_reference (code_desc);
- acpi_cm_remove_reference (type_desc);
-
-
- /* If we get back from the OS call, we might as well keep going. */
-
- REPORT_WARNING (("An AML \"fatal\" Opcode (Fatal_op) was executed\n"));
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_index
- *
- * PARAMETERS: none
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Index operator
- *
- * ALLOCATION: Deletes one operand descriptor -- other remains on stack
- *
- * ACPI SPECIFICATION REFERENCES:
- * Def_index := Index_op Buff_pkg_obj Index_value Result
- * Index_value := Term_arg=>Integer
- * Name_string := |
- * Result := Super_name
- * Super_name := Name_string | Arg_obj | Local_obj | Debug_obj | Def_index
- * Local4_op | Local5_op | Local6_op | Local7_op
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_index (
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *idx_desc;
- ACPI_OPERAND_OBJECT *res_desc;
- ACPI_OPERAND_OBJECT *ret_desc = NULL;
- ACPI_OPERAND_OBJECT *tmp_desc;
- ACPI_STATUS status;
-
-
- /* Resolve operands */
- /* First operand can be either a package or a buffer */
-
- status = acpi_aml_resolve_operands (AML_INDEX_OP, WALK_OPERANDS, walk_state);
- /* Get all operands */
-
- status |= acpi_ds_obj_stack_pop_object (&res_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&idx_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- /* Invalid parameters on object stack */
-
- goto cleanup;
- }
-
-
- /* Create the internal return object */
-
- ret_desc = acpi_cm_create_internal_object (INTERNAL_TYPE_REFERENCE);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
-
- /*
- * At this point, the Obj_desc operand is either a Package or a Buffer
- */
-
- if (obj_desc->common.type == ACPI_TYPE_PACKAGE) {
- /* Object to be indexed is a Package */
-
- if (idx_desc->integer.value >= obj_desc->package.count) {
- status = AE_AML_PACKAGE_LIMIT;
- goto cleanup;
- }
-
- if ((res_desc->common.type == INTERNAL_TYPE_REFERENCE) &&
- (res_desc->reference.opcode == AML_ZERO_OP)) {
- /*
- * There is no actual result descriptor (the Zero_op Result
- * descriptor is a placeholder), so just delete the placeholder and
- * return a reference to the package element
- */
-
- acpi_cm_remove_reference (res_desc);
- }
-
- else {
- /*
- * Each element of the package is an internal object. Get the one
- * we are after.
- */
-
- tmp_desc = obj_desc->package.elements[idx_desc->integer.value];
- ret_desc->reference.opcode = AML_INDEX_OP;
- ret_desc->reference.target_type = tmp_desc->common.type;
- ret_desc->reference.object = tmp_desc;
-
- status = acpi_aml_exec_store (ret_desc, res_desc, walk_state);
- ret_desc->reference.object = NULL;
- }
-
- /*
- * The local return object must always be a reference to the package element,
- * not the element itself.
- */
- ret_desc->reference.opcode = AML_INDEX_OP;
- ret_desc->reference.target_type = ACPI_TYPE_PACKAGE;
- ret_desc->reference.where = &obj_desc->package.elements[idx_desc->integer.value];
- }
-
- else {
- /* Object to be indexed is a Buffer */
-
- if (idx_desc->integer.value >= obj_desc->buffer.length) {
- status = AE_AML_BUFFER_LIMIT;
- goto cleanup;
- }
-
- ret_desc->reference.opcode = AML_INDEX_OP;
- ret_desc->reference.target_type = ACPI_TYPE_BUFFER_FIELD;
- ret_desc->reference.object = obj_desc;
- ret_desc->reference.offset = (u32) idx_desc->integer.value;
-
- status = acpi_aml_exec_store (ret_desc, res_desc, walk_state);
- }
-
-
-cleanup:
-
- /* Always delete operands */
-
- acpi_cm_remove_reference (obj_desc);
- acpi_cm_remove_reference (idx_desc);
-
- /* Delete return object on error */
-
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (res_desc);
-
- if (ret_desc) {
- acpi_cm_remove_reference (ret_desc);
- ret_desc = NULL;
- }
- }
-
- /* Set the return object and exit */
-
- *return_desc = ret_desc;
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_match
- *
- * PARAMETERS: none
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Match operator
- *
- * ACPI SPECIFICATION REFERENCES:
- * Def_match := Match_op Search_pkg Opcode1 Operand1
- * Opcode2 Operand2 Start_index
- * Opcode1 := Byte_data: MTR, MEQ, MLE, MLT, MGE, or MGT
- * Opcode2 := Byte_data: MTR, MEQ, MLE, MLT, MGE, or MGT
- * Operand1 := Term_arg=>Integer
- * Operand2 := Term_arg=>Integer
- * Search_pkg := Term_arg=>Package_object
- * Start_index := Term_arg=>Integer
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_match (
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc)
-{
- ACPI_OPERAND_OBJECT *pkg_desc;
- ACPI_OPERAND_OBJECT *op1_desc;
- ACPI_OPERAND_OBJECT *V1_desc;
- ACPI_OPERAND_OBJECT *op2_desc;
- ACPI_OPERAND_OBJECT *V2_desc;
- ACPI_OPERAND_OBJECT *start_desc;
- ACPI_OPERAND_OBJECT *ret_desc = NULL;
- ACPI_STATUS status;
- u32 index;
- u32 match_value = (u32) -1;
-
-
- /* Resolve all operands */
-
- status = acpi_aml_resolve_operands (AML_MATCH_OP, WALK_OPERANDS, walk_state);
- /* Get all operands */
-
- status |= acpi_ds_obj_stack_pop_object (&start_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&V2_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&op2_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&V1_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&op1_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&pkg_desc, walk_state);
-
- if (ACPI_FAILURE (status)) {
- /* Invalid parameters on object stack */
-
- goto cleanup;
- }
-
- /* Validate match comparison sub-opcodes */
-
- if ((op1_desc->integer.value > MAX_MATCH_OPERATOR) ||
- (op2_desc->integer.value > MAX_MATCH_OPERATOR)) {
- status = AE_AML_OPERAND_VALUE;
- goto cleanup;
- }
-
- index = (u32) start_desc->integer.value;
- if (index >= (u32) pkg_desc->package.count) {
- status = AE_AML_PACKAGE_LIMIT;
- goto cleanup;
- }
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
-
- }
-
- /*
- * Examine each element until a match is found. Within the loop,
- * "continue" signifies that the current element does not match
- * and the next should be examined.
- * Upon finding a match, the loop will terminate via "break" at
- * the bottom. If it terminates "normally", Match_value will be -1
- * (its initial value) indicating that no match was found. When
- * returned as a Number, this will produce the Ones value as specified.
- */
-
- for ( ; index < pkg_desc->package.count; ++index) {
- /*
- * Treat any NULL or non-numeric elements as non-matching.
- * TBD [Unhandled] - if an element is a Name,
- * should we examine its value?
- */
- if (!pkg_desc->package.elements[index] ||
- ACPI_TYPE_INTEGER != pkg_desc->package.elements[index]->common.type) {
- continue;
- }
-
- /*
- * Within these switch statements:
- * "break" (exit from the switch) signifies a match;
- * "continue" (proceed to next iteration of enclosing
- * "for" loop) signifies a non-match.
- */
- switch (op1_desc->integer.value) {
-
- case MATCH_MTR: /* always true */
-
- break;
-
-
- case MATCH_MEQ: /* true if equal */
-
- if (pkg_desc->package.elements[index]->integer.value
- != V1_desc->integer.value) {
- continue;
- }
- break;
-
-
- case MATCH_MLE: /* true if less than or equal */
-
- if (pkg_desc->package.elements[index]->integer.value
- > V1_desc->integer.value) {
- continue;
- }
- break;
-
-
- case MATCH_MLT: /* true if less than */
-
- if (pkg_desc->package.elements[index]->integer.value
- >= V1_desc->integer.value) {
- continue;
- }
- break;
-
-
- case MATCH_MGE: /* true if greater than or equal */
-
- if (pkg_desc->package.elements[index]->integer.value
- < V1_desc->integer.value) {
- continue;
- }
- break;
-
-
- case MATCH_MGT: /* true if greater than */
-
- if (pkg_desc->package.elements[index]->integer.value
- <= V1_desc->integer.value) {
- continue;
- }
- break;
-
-
- default: /* undefined */
-
- continue;
- }
-
-
- switch(op2_desc->integer.value) {
-
- case MATCH_MTR:
-
- break;
-
-
- case MATCH_MEQ:
-
- if (pkg_desc->package.elements[index]->integer.value
- != V2_desc->integer.value) {
- continue;
- }
- break;
-
-
- case MATCH_MLE:
-
- if (pkg_desc->package.elements[index]->integer.value
- > V2_desc->integer.value) {
- continue;
- }
- break;
-
-
- case MATCH_MLT:
-
- if (pkg_desc->package.elements[index]->integer.value
- >= V2_desc->integer.value) {
- continue;
- }
- break;
-
-
- case MATCH_MGE:
-
- if (pkg_desc->package.elements[index]->integer.value
- < V2_desc->integer.value) {
- continue;
- }
- break;
-
-
- case MATCH_MGT:
-
- if (pkg_desc->package.elements[index]->integer.value
- <= V2_desc->integer.value) {
- continue;
- }
- break;
-
-
- default:
-
- continue;
- }
-
- /* Match found: exit from loop */
-
- match_value = index;
- break;
- }
-
- /* Match_value is the return value */
-
- ret_desc->integer.value = match_value;
-
-
-cleanup:
-
- /* Free the operands */
-
- acpi_cm_remove_reference (start_desc);
- acpi_cm_remove_reference (V2_desc);
- acpi_cm_remove_reference (op2_desc);
- acpi_cm_remove_reference (V1_desc);
- acpi_cm_remove_reference (op1_desc);
- acpi_cm_remove_reference (pkg_desc);
-
-
- /* Delete return object on error */
-
- if (ACPI_FAILURE (status) &&
- (ret_desc)) {
- acpi_cm_remove_reference (ret_desc);
- ret_desc = NULL;
- }
-
-
- /* Set the return object and exit */
-
- *return_desc = ret_desc;
- return (status);
-}
diff --git a/reactos/drivers/bus/acpi/executer/ammonad.c b/reactos/drivers/bus/acpi/executer/ammonad.c
deleted file mode 100644
index e37e27d6905..00000000000
--- a/reactos/drivers/bus/acpi/executer/ammonad.c
+++ /dev/null
@@ -1,957 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: ammonad - ACPI AML (p-code) execution for monadic operators
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("ammonad")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_get_object_reference
- *
- * PARAMETERS: Obj_desc - Create a reference to this object
- * Ret_desc - Where to store the reference
- *
- * RETURN: Status
- *
- * DESCRIPTION: Obtain and return a "reference" to the target object
- * Common code for the Ref_of_op and the Cond_ref_of_op.
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-acpi_aml_get_object_reference (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_OPERAND_OBJECT **ret_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_OK;
-
-
- if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) {
- if (obj_desc->common.type != INTERNAL_TYPE_REFERENCE) {
- *ret_desc = NULL;
- status = AE_TYPE;
- goto cleanup;
- }
-
- /*
- * Not a Name -- an indirect name pointer would have
- * been converted to a direct name pointer in Acpi_aml_resolve_operands
- */
- switch (obj_desc->reference.opcode) {
- case AML_LOCAL_OP:
- case AML_ARG_OP:
-
- *ret_desc = (void *) acpi_ds_method_data_get_node (obj_desc->reference.opcode,
- obj_desc->reference.offset, walk_state);
- break;
-
- default:
-
- *ret_desc = NULL;
- status = AE_AML_INTERNAL;
- goto cleanup;
- }
-
- }
-
- else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
- /* Must be a named object; Just return the Node */
-
- *ret_desc = obj_desc;
- }
-
- else {
- *ret_desc = NULL;
- status = AE_TYPE;
- }
-
-
-cleanup:
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_monadic1
- *
- * PARAMETERS: Opcode - The opcode to be executed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Type 1 monadic operator with numeric operand on
- * object stack
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_monadic1 (
- u16 opcode,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_STATUS status;
-
-
- /* Resolve all operands */
-
- status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state);
- /* Get all operands */
-
- status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /* Examine the opcode */
-
- switch (opcode) {
-
- /* Def_release := Release_op Mutex_object */
-
- case AML_RELEASE_OP:
-
- status = acpi_aml_release_mutex (obj_desc, walk_state);
- break;
-
-
- /* Def_reset := Reset_op Acpi_event_object */
-
- case AML_RESET_OP:
-
- status = acpi_aml_system_reset_event (obj_desc);
- break;
-
-
- /* Def_signal := Signal_op Acpi_event_object */
-
- case AML_SIGNAL_OP:
-
- status = acpi_aml_system_signal_event (obj_desc);
- break;
-
-
- /* Def_sleep := Sleep_op Msec_time */
-
- case AML_SLEEP_OP:
-
- acpi_aml_system_do_suspend ((u32) obj_desc->integer.value);
- break;
-
-
- /* Def_stall := Stall_op Usec_time */
-
- case AML_STALL_OP:
-
- acpi_aml_system_do_stall ((u32) obj_desc->integer.value);
- break;
-
-
- /* Unknown opcode */
-
- default:
-
- REPORT_ERROR (("Acpi_aml_exec_monadic1: Unknown monadic opcode %X\n",
- opcode));
- status = AE_AML_BAD_OPCODE;
- break;
-
- } /* switch */
-
-
-cleanup:
-
- /* Always delete the operand */
-
- acpi_cm_remove_reference (obj_desc);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_monadic2_r
- *
- * PARAMETERS: Opcode - The opcode to be executed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Type 2 monadic operator with numeric operand and
- * result operand on operand stack
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_monadic2_r (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *res_desc;
- ACPI_OPERAND_OBJECT *ret_desc = NULL;
- ACPI_OPERAND_OBJECT *ret_desc2 = NULL;
- u32 res_val;
- ACPI_STATUS status;
- u32 i;
- u32 j;
- ACPI_INTEGER digit;
-
-
- /* Resolve all operands */
-
- status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state);
- /* Get all operands */
-
- status |= acpi_ds_obj_stack_pop_object (&res_desc, walk_state);
- status |= acpi_ds_obj_stack_pop_object (&obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /* Create a return object of type NUMBER for most opcodes */
-
- switch (opcode) {
- case AML_BIT_NOT_OP:
- case AML_FIND_SET_LEFT_BIT_OP:
- case AML_FIND_SET_RIGHT_BIT_OP:
- case AML_FROM_BCD_OP:
- case AML_TO_BCD_OP:
- case AML_COND_REF_OF_OP:
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- break;
- }
-
-
- switch (opcode) {
- /* Def_not := Not_op Operand Result */
-
- case AML_BIT_NOT_OP:
-
- ret_desc->integer.value = ~obj_desc->integer.value;
- break;
-
-
- /* Def_find_set_left_bit := Find_set_left_bit_op Operand Result */
-
- case AML_FIND_SET_LEFT_BIT_OP:
-
- ret_desc->integer.value = obj_desc->integer.value;
-
- /*
- * Acpi specification describes Integer type as a little
- * endian unsigned value, so this boundry condition is valid.
- */
- for (res_val = 0; ret_desc->integer.value && res_val < ACPI_INTEGER_BIT_SIZE; ++res_val) {
- ret_desc->integer.value >>= 1;
- }
-
- ret_desc->integer.value = res_val;
- break;
-
-
- /* Def_find_set_right_bit := Find_set_right_bit_op Operand Result */
-
- case AML_FIND_SET_RIGHT_BIT_OP:
-
- ret_desc->integer.value = obj_desc->integer.value;
-
- /*
- * Acpi specification describes Integer type as a little
- * endian unsigned value, so this boundry condition is valid.
- */
- for (res_val = 0; ret_desc->integer.value && res_val < ACPI_INTEGER_BIT_SIZE; ++res_val) {
- ret_desc->integer.value <<= 1;
- }
-
- /* Since returns must be 1-based, subtract from 33 (65) */
-
- ret_desc->integer.value = res_val == 0 ? 0 : (ACPI_INTEGER_BIT_SIZE + 1) - res_val;
- break;
-
-
- /* Def_from_bDC := From_bCDOp BCDValue Result */
-
- case AML_FROM_BCD_OP:
-
- /*
- * The 64-bit ACPI integer can hold 16 4-bit BCD integers
- */
- ret_desc->integer.value = 0;
- for (i = 0; i < ACPI_MAX_BCD_DIGITS; i++) {
- /* Get one BCD digit */
-
- digit = (ACPI_INTEGER) ((obj_desc->integer.value >> (i * 4)) & 0xF);
-
- /* Check the range of the digit */
-
- if (digit > 9) {
- status = AE_AML_NUMERIC_OVERFLOW;
- goto cleanup;
- }
-
- if (digit > 0) {
- /* Sum into the result with the appropriate power of 10 */
-
- for (j = 0; j < i; j++) {
- digit *= 10;
- }
-
- ret_desc->integer.value += digit;
- }
- }
- break;
-
-
- /* Def_to_bDC := To_bCDOp Operand Result */
-
- case AML_TO_BCD_OP:
-
-
- if (obj_desc->integer.value > ACPI_MAX_BCD_VALUE) {
- status = AE_AML_NUMERIC_OVERFLOW;
- goto cleanup;
- }
-
- ret_desc->integer.value = 0;
- for (i = 0; i < ACPI_MAX_BCD_DIGITS; i++) {
- /* Divide by nth factor of 10 */
-
- digit = obj_desc->integer.value;
- for (j = 0; j < i; j++) {
- digit /= 10;
- }
-
- /* Create the BCD digit */
-
- if (digit > 0) {
- ret_desc->integer.value += (ACPI_MODULO (digit, 10) << (i * 4));
- }
- }
- break;
-
-
- /* Def_cond_ref_of := Cond_ref_of_op Source_object Result */
-
- case AML_COND_REF_OF_OP:
-
- /*
- * This op is a little strange because the internal return value is
- * different than the return value stored in the result descriptor
- * (There are really two return values)
- */
-
- if ((ACPI_NAMESPACE_NODE *) obj_desc == acpi_gbl_root_node) {
- /*
- * This means that the object does not exist in the namespace,
- * return FALSE
- */
-
- ret_desc->integer.value = 0;
-
- /*
- * Must delete the result descriptor since there is no reference
- * being returned
- */
-
- acpi_cm_remove_reference (res_desc);
- goto cleanup;
- }
-
- /* Get the object reference and store it */
-
- status = acpi_aml_get_object_reference (obj_desc, &ret_desc2, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- status = acpi_aml_exec_store (ret_desc2, res_desc, walk_state);
-
- /* The object exists in the namespace, return TRUE */
-
- ret_desc->integer.value = ACPI_INTEGER_MAX;
- goto cleanup;
- break;
-
-
- case AML_STORE_OP:
-
- /*
- * A store operand is typically a number, string, buffer or lvalue
- * TBD: [Unhandled] What about a store to a package?
- */
-
- /*
- * Do the store, and be careful about deleting the source object,
- * since the object itself may have been stored.
- */
-
- status = acpi_aml_exec_store (obj_desc, res_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- /* On failure, just delete the Obj_desc */
-
- acpi_cm_remove_reference (obj_desc);
- }
-
- else {
- /*
- * Normally, we would remove a reference on the Obj_desc parameter;
- * But since it is being used as the internal return object
- * (meaning we would normally increment it), the two cancel out,
- * and we simply don't do anything.
- */
- *return_desc = obj_desc;
- }
-
- obj_desc = NULL;
- return (status);
-
- break;
-
-
- case AML_DEBUG_OP:
-
- /* Reference, returning an Reference */
-
- return (AE_OK);
- break;
-
-
- /*
- * These are obsolete opcodes
- */
-
- /* Def_shift_left_bit := Shift_left_bit_op Source Bit_num */
- /* Def_shift_right_bit := Shift_right_bit_op Source Bit_num */
-
- case AML_SHIFT_LEFT_BIT_OP:
- case AML_SHIFT_RIGHT_BIT_OP:
-
- status = AE_SUPPORT;
- goto cleanup;
- break;
-
-
- default:
-
- REPORT_ERROR (("Acpi_aml_exec_monadic2_r: Unknown monadic opcode %X\n",
- opcode));
- status = AE_AML_BAD_OPCODE;
- goto cleanup;
- }
-
-
- status = acpi_aml_exec_store (ret_desc, res_desc, walk_state);
-
-
-cleanup:
- /* Always delete the operand object */
-
- acpi_cm_remove_reference (obj_desc);
-
- /* Delete return object(s) on error */
-
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (res_desc); /* Result descriptor */
- if (ret_desc) {
- acpi_cm_remove_reference (ret_desc);
- ret_desc = NULL;
- }
- }
-
- /* Set the return object and exit */
-
- *return_desc = ret_desc;
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_monadic2
- *
- * PARAMETERS: Opcode - The opcode to be executed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute Type 2 monadic operator with numeric operand:
- * Deref_of_op, Ref_of_op, Size_of_op, Type_op, Increment_op,
- * Decrement_op, LNot_op,
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_monadic2 (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *tmp_desc;
- ACPI_OPERAND_OBJECT *ret_desc = NULL;
- ACPI_STATUS resolve_status;
- ACPI_STATUS status;
- u32 type;
- ACPI_INTEGER value;
-
-
- /* Attempt to resolve the operands */
-
- resolve_status = acpi_aml_resolve_operands (opcode, WALK_OPERANDS, walk_state);
- /* Always get all operands */
-
- status = acpi_ds_obj_stack_pop_object (&obj_desc, walk_state);
-
-
- /* Now we can check the status codes */
-
- if (ACPI_FAILURE (resolve_status)) {
- goto cleanup;
- }
-
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
-
- /* Get the operand and decode the opcode */
-
-
- switch (opcode) {
-
- /* Def_lNot := LNot_op Operand */
-
- case AML_LNOT_OP:
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- ret_desc->integer.value = !obj_desc->integer.value;
- break;
-
-
- /* Def_decrement := Decrement_op Target */
- /* Def_increment := Increment_op Target */
-
- case AML_DECREMENT_OP:
- case AML_INCREMENT_OP:
-
- /*
- * Since we are expecting an Reference on the top of the stack, it
- * can be either an Node or an internal object.
- *
- * TBD: [Future] This may be the prototype code for all cases where
- * an Reference is expected!! 10/99
- */
-
- if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
- ret_desc = obj_desc;
- }
-
- else {
- /*
- * Duplicate the Reference in a new object so that we can resolve it
- * without destroying the original Reference object
- */
-
- ret_desc = acpi_cm_create_internal_object (INTERNAL_TYPE_REFERENCE);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- ret_desc->reference.opcode = obj_desc->reference.opcode;
- ret_desc->reference.offset = obj_desc->reference.offset;
- ret_desc->reference.object = obj_desc->reference.object;
- }
-
-
- /*
- * Convert the Ret_desc Reference to a Number
- * (This deletes the original Ret_desc)
- */
-
- status = acpi_aml_resolve_operands (AML_LNOT_OP, &ret_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /* Do the actual increment or decrement */
-
- if (AML_INCREMENT_OP == opcode) {
- ret_desc->integer.value++;
- }
- else {
- ret_desc->integer.value--;
- }
-
- /* Store the result back in the original descriptor */
-
- status = acpi_aml_exec_store (ret_desc, obj_desc, walk_state);
-
- /* Objdesc was just deleted (because it is an Reference) */
-
- obj_desc = NULL;
-
- break;
-
-
- /* Def_object_type := Object_type_op Source_object */
-
- case AML_TYPE_OP:
-
- if (INTERNAL_TYPE_REFERENCE == obj_desc->common.type) {
- /*
- * Not a Name -- an indirect name pointer would have
- * been converted to a direct name pointer in Resolve_operands
- */
- switch (obj_desc->reference.opcode) {
- case AML_ZERO_OP:
- case AML_ONE_OP:
- case AML_ONES_OP:
-
- /* Constants are of type Number */
-
- type = ACPI_TYPE_INTEGER;
- break;
-
-
- case AML_DEBUG_OP:
-
- /* Per 1.0b spec, Debug object is of type Debug_object */
-
- type = ACPI_TYPE_DEBUG_OBJECT;
- break;
-
-
- case AML_INDEX_OP:
-
- /* Get the type of this reference (index into another object) */
-
- type = obj_desc->reference.target_type;
- if (type == ACPI_TYPE_PACKAGE) {
- /*
- * The main object is a package, we want to get the type
- * of the individual package element that is referenced by
- * the index.
- */
- type = (*(obj_desc->reference.where))->common.type;
- }
-
- break;
-
-
- case AML_LOCAL_OP:
- case AML_ARG_OP:
-
- type = acpi_ds_method_data_get_type (obj_desc->reference.opcode,
- obj_desc->reference.offset, walk_state);
- break;
-
-
- default:
-
- REPORT_ERROR (("Acpi_aml_exec_monadic2/Type_op: Internal error - Unknown Reference subtype %X\n",
- obj_desc->reference.opcode));
- status = AE_AML_INTERNAL;
- goto cleanup;
- }
- }
-
- else {
- /*
- * It's not a Reference, so it must be a direct name pointer.
- */
- type = acpi_ns_get_type ((ACPI_HANDLE) obj_desc);
- }
-
- /* Allocate a descriptor to hold the type. */
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- ret_desc->integer.value = type;
- break;
-
-
- /* Def_size_of := Size_of_op Source_object */
-
- case AML_SIZE_OF_OP:
-
- if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
- obj_desc = acpi_ns_get_attached_object (obj_desc);
- }
-
- if (!obj_desc) {
- value = 0;
- }
-
- else {
- switch (obj_desc->common.type) {
-
- case ACPI_TYPE_BUFFER:
-
- value = obj_desc->buffer.length;
- break;
-
-
- case ACPI_TYPE_STRING:
-
- value = obj_desc->string.length;
- break;
-
-
- case ACPI_TYPE_PACKAGE:
-
- value = obj_desc->package.count;
- break;
-
- case INTERNAL_TYPE_REFERENCE:
-
- value = 4;
- break;
-
- default:
-
- status = AE_AML_OPERAND_TYPE;
- goto cleanup;
- }
- }
-
- /*
- * Now that we have the size of the object, create a result
- * object to hold the value
- */
-
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- ret_desc->integer.value = value;
- break;
-
-
- /* Def_ref_of := Ref_of_op Source_object */
-
- case AML_REF_OF_OP:
-
- status = acpi_aml_get_object_reference (obj_desc, &ret_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
- break;
-
-
- /* Def_deref_of := Deref_of_op Obj_reference */
-
- case AML_DEREF_OF_OP:
-
-
- /* Check for a method local or argument */
-
- if (!VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
- /*
- * Must resolve/dereference the local/arg reference first
- */
- switch (obj_desc->reference.opcode) {
- /* Set Obj_desc to the value of the local/arg */
-
- case AML_LOCAL_OP:
- case AML_ARG_OP:
-
- acpi_ds_method_data_get_value (obj_desc->reference.opcode,
- obj_desc->reference.offset, walk_state, &tmp_desc);
-
- /*
- * Delete our reference to the input object and
- * point to the object just retrieved
- */
- acpi_cm_remove_reference (obj_desc);
- obj_desc = tmp_desc;
- break;
-
- default:
-
- /* Index op - handled below */
- break;
- }
- }
-
-
- /* Obj_desc may have changed from the code above */
-
- if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
- /* Get the actual object from the Node (This is the dereference) */
-
- ret_desc = ((ACPI_NAMESPACE_NODE *) obj_desc)->object;
-
- /* Returning a pointer to the object, add another reference! */
-
- acpi_cm_add_reference (ret_desc);
- }
-
- else {
- /*
- * This must be a reference object produced by the Index
- * ASL operation -- check internal opcode
- */
-
- if ((obj_desc->reference.opcode != AML_INDEX_OP) &&
- (obj_desc->reference.opcode != AML_REF_OF_OP)) {
- status = AE_TYPE;
- goto cleanup;
- }
-
-
- switch (obj_desc->reference.opcode) {
- case AML_INDEX_OP:
-
- /*
- * Supported target types for the Index operator are
- * 1) A Buffer
- * 2) A Package
- */
-
- if (obj_desc->reference.target_type == ACPI_TYPE_BUFFER_FIELD) {
- /*
- * The target is a buffer, we must create a new object that
- * contains one element of the buffer, the element pointed
- * to by the index.
- *
- * NOTE: index into a buffer is NOT a pointer to a
- * sub-buffer of the main buffer, it is only a pointer to a
- * single element (byte) of the buffer!
- */
- ret_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!ret_desc) {
- status = AE_NO_MEMORY;
- goto cleanup;
- }
-
- tmp_desc = obj_desc->reference.object;
- ret_desc->integer.value =
- tmp_desc->buffer.pointer[obj_desc->reference.offset];
-
- /* TBD: [Investigate] (see below) Don't add an additional
- * ref!
- */
- }
-
- else if (obj_desc->reference.target_type == ACPI_TYPE_PACKAGE) {
- /*
- * The target is a package, we want to return the referenced
- * element of the package. We must add another reference to
- * this object, however.
- */
-
- ret_desc = *(obj_desc->reference.where);
- if (!ret_desc) {
- /*
- * We can't return a NULL dereferenced value. This is
- * an uninitialized package element and is thus a
- * severe error.
- */
-
- status = AE_AML_UNINITIALIZED_ELEMENT;
- goto cleanup;
- }
-
- acpi_cm_add_reference (ret_desc);
- }
-
- else {
- status = AE_AML_OPERAND_TYPE;
- goto cleanup;
- }
-
- break;
-
-
- case AML_REF_OF_OP:
-
- ret_desc = obj_desc->reference.object;
-
- /* Add another reference to the object! */
-
- acpi_cm_add_reference (ret_desc);
- break;
- }
- }
-
- break;
-
-
- default:
-
- REPORT_ERROR (("Acpi_aml_exec_monadic2: Unknown monadic opcode %X\n",
- opcode));
- status = AE_AML_BAD_OPCODE;
- goto cleanup;
- }
-
-
-cleanup:
-
- if (obj_desc) {
- acpi_cm_remove_reference (obj_desc);
- }
-
- /* Delete return object on error */
-
- if (ACPI_FAILURE (status) &&
- (ret_desc)) {
- acpi_cm_remove_reference (ret_desc);
- ret_desc = NULL;
- }
-
- *return_desc = ret_desc;
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/executer/ammutex.c b/reactos/drivers/bus/acpi/executer/ammutex.c
deleted file mode 100644
index 2a4091083b5..00000000000
--- a/reactos/drivers/bus/acpi/executer/ammutex.c
+++ /dev/null
@@ -1,278 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: ammutex - ASL Mutex Acquire/Release functions
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("ammutex")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_unlink_mutex
- *
- * PARAMETERS: *Obj_desc - The mutex to be unlinked
- *
- * RETURN: Status
- *
- * DESCRIPTION: Remove a mutex from the "Acquired_mutex" list
- *
- ******************************************************************************/
-
-void
-acpi_aml_unlink_mutex (
- ACPI_OPERAND_OBJECT *obj_desc)
-{
-
- if (obj_desc->mutex.next) {
- (obj_desc->mutex.next)->mutex.prev = obj_desc->mutex.prev;
- }
- if (obj_desc->mutex.prev) {
- (obj_desc->mutex.prev)->mutex.next = obj_desc->mutex.next;
- }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_link_mutex
- *
- * PARAMETERS: *Obj_desc - The mutex to be linked
- * *List_head - head of the "Acquired_mutex" list
- *
- * RETURN: Status
- *
- * DESCRIPTION: Add a mutex to the "Acquired_mutex" list for this walk
- *
- ******************************************************************************/
-
-static void
-acpi_aml_link_mutex (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_OPERAND_OBJECT *list_head)
-{
-
- /* This object will be the first object in the list */
-
- obj_desc->mutex.prev = list_head;
- obj_desc->mutex.next = list_head->mutex.next;
-
- /* Update old first object to point back to this object */
-
- if (list_head->mutex.next) {
- (list_head->mutex.next)->mutex.prev = obj_desc;
- }
-
- /* Update list head */
-
- list_head->mutex.next = obj_desc;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_acquire_mutex
- *
- * PARAMETERS: *Time_desc - The 'time to delay' object descriptor
- * *Obj_desc - The object descriptor for this op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Acquire an AML mutex
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_acquire_mutex (
- ACPI_OPERAND_OBJECT *time_desc,
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
-
-
- if (!obj_desc) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Current Sync must be less than or equal to the sync level of the
- * mutex. This mechanism provides some deadlock prevention
- */
- if (walk_state->current_sync_level > obj_desc->mutex.sync_level) {
- return (AE_AML_MUTEX_ORDER);
- }
-
- /*
- * If the mutex is already owned by this thread,
- * just increment the acquisition depth
- */
- if (obj_desc->mutex.owner == walk_state) {
- obj_desc->mutex.acquisition_depth++;
- return (AE_OK);
- }
-
- /* Acquire the mutex, wait if necessary */
-
- status = acpi_aml_system_acquire_mutex (time_desc, obj_desc);
- if (ACPI_FAILURE (status)) {
- /* Includes failure from a timeout on Time_desc */
-
- return (status);
- }
-
- /* Have the mutex, update mutex and walk info */
-
- obj_desc->mutex.owner = walk_state;
- obj_desc->mutex.acquisition_depth = 1;
- walk_state->current_sync_level = obj_desc->mutex.sync_level;
-
- /* Link the mutex to the walk state for force-unlock at method exit */
-
- acpi_aml_link_mutex (obj_desc, (ACPI_OPERAND_OBJECT *)
- &(walk_state->walk_list->acquired_mutex_list));
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_release_mutex
- *
- * PARAMETERS: *Obj_desc - The object descriptor for this op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Release a previously acquired Mutex.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_release_mutex (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status;
-
-
- if (!obj_desc) {
- return (AE_BAD_PARAMETER);
- }
-
- /* The mutex must have been previously acquired in order to release it */
-
- if (!obj_desc->mutex.owner) {
- return (AE_AML_MUTEX_NOT_ACQUIRED);
- }
-
- /* The Mutex is owned, but this thread must be the owner */
-
- if (obj_desc->mutex.owner != walk_state) {
- return (AE_AML_NOT_OWNER);
- }
-
- /*
- * The sync level of the mutex must be less than or
- * equal to the current sync level
- */
- if (obj_desc->mutex.sync_level > walk_state->current_sync_level) {
- return (AE_AML_MUTEX_ORDER);
- }
-
- /*
- * Match multiple Acquires with multiple Releases
- */
- obj_desc->mutex.acquisition_depth--;
- if (obj_desc->mutex.acquisition_depth != 0) {
- /* Just decrement the depth and return */
-
- return (AE_OK);
- }
-
-
- /* Release the mutex */
-
- status = acpi_aml_system_release_mutex (obj_desc);
-
- /* Update the mutex and walk state */
-
- obj_desc->mutex.owner = NULL;
- walk_state->current_sync_level = obj_desc->mutex.sync_level;
-
- /* Unlink the mutex from the owner's list */
-
- acpi_aml_unlink_mutex (obj_desc);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_release_all_mutexes
- *
- * PARAMETERS: *Mutex_list - Head of the mutex list
- *
- * RETURN: Status
- *
- * DESCRIPTION: Release all mutexes in the list
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_release_all_mutexes (
- ACPI_OPERAND_OBJECT *list_head)
-{
- ACPI_OPERAND_OBJECT *next = list_head->mutex.next;
- ACPI_OPERAND_OBJECT *this;
-
-
- /*
- * Traverse the list of owned mutexes, releasing each one.
- */
- while (next) {
- this = next;
- next = this->mutex.next;
-
- /* Mark mutex un-owned */
-
- this->mutex.owner = NULL;
- this->mutex.prev = NULL;
- this->mutex.next = NULL;
- this->mutex.acquisition_depth = 0;
-
- /* Release the mutex */
-
- acpi_aml_system_release_mutex (this);
- }
-
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amnames.c b/reactos/drivers/bus/acpi/executer/amnames.c
deleted file mode 100644
index 269631f49f0..00000000000
--- a/reactos/drivers/bus/acpi/executer/amnames.c
+++ /dev/null
@@ -1,387 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amnames - interpreter/scanner name load/execute
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amnames")
-
-
-/* AML Package Length encodings */
-
-#define ACPI_AML_PACKAGE_TYPE1 0x40
-#define ACPI_AML_PACKAGE_TYPE2 0x4000
-#define ACPI_AML_PACKAGE_TYPE3 0x400000
-#define ACPI_AML_PACKAGE_TYPE4 0x40000000
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_allocate_name_string
- *
- * PARAMETERS: Prefix_count - Count of parent levels. Special cases:
- * (-1) = root, 0 = none
- * Num_name_segs - count of 4-character name segments
- *
- * RETURN: A pointer to the allocated string segment. This segment must
- * be deleted by the caller.
- *
- * DESCRIPTION: Allocate a buffer for a name string. Ensure allocated name
- * string is long enough, and set up prefix if any.
- *
- ******************************************************************************/
-
-NATIVE_CHAR *
-acpi_aml_allocate_name_string (
- u32 prefix_count,
- u32 num_name_segs)
-{
- NATIVE_CHAR *temp_ptr;
- NATIVE_CHAR *name_string;
- u32 size_needed;
-
-
- /*
- * Allow room for all \ and ^ prefixes, all segments, and a Multi_name_prefix.
- * Also, one byte for the null terminator.
- * This may actually be somewhat longer than needed.
- */
-
- if (prefix_count == (u32) -1) {
- /* Special case for root */
-
- size_needed = 1 + (ACPI_NAME_SIZE * num_name_segs) + 2 + 1;
- }
- else {
- size_needed = prefix_count + (ACPI_NAME_SIZE * num_name_segs) + 2 + 1;
- }
-
- /*
- * Allocate a buffer for the name.
- * This buffer must be deleted by the caller!
- */
-
- name_string = acpi_cm_allocate (size_needed);
- if (!name_string) {
- REPORT_ERROR (("Aml_allocate_name_string: name allocation failure\n"));
- return (NULL);
- }
-
- temp_ptr = name_string;
-
- /* Set up Root or Parent prefixes if needed */
-
- if (prefix_count == (u32) -1) {
- *temp_ptr++ = AML_ROOT_PREFIX;
- }
-
- else {
- while (prefix_count--) {
- *temp_ptr++ = AML_PARENT_PREFIX;
- }
- }
-
-
- /* Set up Dual or Multi prefixes if needed */
-
- if (num_name_segs > 2) {
- /* Set up multi prefixes */
-
- *temp_ptr++ = AML_MULTI_NAME_PREFIX_OP;
- *temp_ptr++ = (char) num_name_segs;
- }
-
- else if (2 == num_name_segs) {
- /* Set up dual prefixes */
-
- *temp_ptr++ = AML_DUAL_NAME_PREFIX;
- }
-
- /*
- * Terminate string following prefixes. Acpi_aml_exec_name_segment() will
- * append the segment(s)
- */
-
- *temp_ptr = 0;
-
- return (name_string);
-}
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_name_segment
- *
- * PARAMETERS: Interpreter_mode - Current running mode (load1/Load2/Exec)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute a name segment (4 bytes)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_name_segment (
- u8 **in_aml_address,
- NATIVE_CHAR *name_string)
-{
- u8 *aml_address = *in_aml_address;
- ACPI_STATUS status = AE_OK;
- u32 index;
- NATIVE_CHAR char_buf[5];
-
-
- /*
- * If first character is a digit, then we know that we aren't looking at a
- * valid name segment
- */
-
- char_buf[0] = *aml_address;
-
- if ('0' <= char_buf[0] && char_buf[0] <= '9') {
- return (AE_CTRL_PENDING);
- }
-
- for (index = 4;
- (index > 0) && (acpi_cm_valid_acpi_character (*aml_address));
- --index) {
- char_buf[4 - index] = *aml_address++;
- }
-
-
- /* Valid name segment */
-
- if (0 == index) {
- /* Found 4 valid characters */
-
- char_buf[4] = '\0';
-
- if (name_string) {
- STRCAT (name_string, char_buf);
- }
-
- }
-
- else if (4 == index) {
- /*
- * First character was not a valid name character,
- * so we are looking at something other than a name.
- */
- status = AE_CTRL_PENDING;
- }
-
- else {
- /* Segment started with one or more valid characters, but fewer than 4 */
-
- status = AE_AML_BAD_NAME;
- }
-
- *in_aml_address = aml_address;
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_get_name_string
- *
- * PARAMETERS: Data_type - Data type to be associated with this name
- *
- * RETURN: Status
- *
- * DESCRIPTION: Get a name, including any prefixes.
- *
- ******************************************************************************/
-
-
-ACPI_STATUS
-acpi_aml_get_name_string (
- OBJECT_TYPE_INTERNAL data_type,
- u8 *in_aml_address,
- NATIVE_CHAR **out_name_string,
- u32 *out_name_length)
-{
- ACPI_STATUS status = AE_OK;
- u8 *aml_address = in_aml_address;
- NATIVE_CHAR *name_string = NULL;
- u32 num_segments;
- u32 prefix_count = 0;
- u8 prefix = 0;
- u8 has_prefix = FALSE;
-
-
- if (INTERNAL_TYPE_DEF_FIELD == data_type ||
- INTERNAL_TYPE_BANK_FIELD == data_type ||
- INTERNAL_TYPE_INDEX_FIELD == data_type) {
- /* Disallow prefixes for types associated with field names */
-
- name_string = acpi_aml_allocate_name_string (0, 1);
- if (!name_string) {
- status = AE_NO_MEMORY;
- }
- else {
- status = acpi_aml_exec_name_segment (&aml_address, name_string);
- }
- }
-
- else {
- /*
- * Data_type is not a field name.
- * Examine first character of name for root or parent prefix operators
- */
-
- switch (*aml_address) {
-
- case AML_ROOT_PREFIX:
-
- prefix = *aml_address++;
- /*
- * Remember that we have a Root_prefix --
- * see comment in Acpi_aml_allocate_name_string()
- */
- prefix_count = (u32) -1;
- has_prefix = TRUE;
- break;
-
-
- case AML_PARENT_PREFIX:
-
- /* Increment past possibly multiple parent prefixes */
-
- do {
- prefix = *aml_address++;
- ++prefix_count;
-
- } while (*aml_address == AML_PARENT_PREFIX);
- has_prefix = TRUE;
- break;
-
-
- default:
-
- break;
- }
-
-
- /* Examine first character of name for name segment prefix operator */
-
- switch (*aml_address) {
-
- case AML_DUAL_NAME_PREFIX:
-
- prefix = *aml_address++;
- name_string = acpi_aml_allocate_name_string (prefix_count, 2);
- if (!name_string) {
- status = AE_NO_MEMORY;
- break;
- }
-
- /* Indicate that we processed a prefix */
- has_prefix = TRUE;
-
- status = acpi_aml_exec_name_segment (&aml_address, name_string);
- if (ACPI_SUCCESS (status)) {
- status = acpi_aml_exec_name_segment (&aml_address, name_string);
- }
- break;
-
-
- case AML_MULTI_NAME_PREFIX_OP:
-
- prefix = *aml_address++;
- /* Fetch count of segments remaining in name path */
-
- num_segments = *aml_address++;
-
- name_string = acpi_aml_allocate_name_string (prefix_count, num_segments);
- if (!name_string) {
- status = AE_NO_MEMORY;
- break;
- }
-
- /* Indicate that we processed a prefix */
- has_prefix = TRUE;
-
- while (num_segments &&
- (status = acpi_aml_exec_name_segment (&aml_address, name_string)) == AE_OK) {
- --num_segments;
- }
-
- break;
-
-
- case 0:
-
- /* Null_name valid as of 8-12-98 ASL/AML Grammar Update */
-
-
- /* Consume the NULL byte */
-
- aml_address++;
- name_string = acpi_aml_allocate_name_string (prefix_count, 0);
- if (!name_string) {
- status = AE_NO_MEMORY;
- break;
- }
-
- break;
-
-
- default:
-
- /* Name segment string */
-
- name_string = acpi_aml_allocate_name_string (prefix_count, 1);
- if (!name_string) {
- status = AE_NO_MEMORY;
- break;
- }
-
- status = acpi_aml_exec_name_segment (&aml_address, name_string);
- break;
-
- } /* Switch (Peek_op ()) */
- }
-
-
- if (AE_CTRL_PENDING == status && has_prefix) {
- /* Ran out of segments after processing a prefix */
-
- REPORT_ERROR (
- ("Aml_do_name: Malformed Name at %p\n", name_string));
- status = AE_AML_BAD_NAME;
- }
-
-
- *out_name_string = name_string;
- *out_name_length = (u32) (aml_address - in_aml_address);
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amprep.c b/reactos/drivers/bus/acpi/executer/amprep.c
deleted file mode 100644
index 351fb2bffe1..00000000000
--- a/reactos/drivers/bus/acpi/executer/amprep.c
+++ /dev/null
@@ -1,400 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amprep - ACPI AML (p-code) execution - field prep utilities
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amprep")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_decode_field_access_type
- *
- * PARAMETERS: Access - Encoded field access bits
- *
- * RETURN: Field granularity (8, 16, or 32)
- *
- * DESCRIPTION: Decode the Access_type bits of a field definition.
- *
- ******************************************************************************/
-
-static u32
-acpi_aml_decode_field_access_type (
- u32 access,
- u16 length)
-{
-
- switch (access) {
- case ACCESS_ANY_ACC:
- if (length <= 8) {
- return (8);
- }
- else if (length <= 16) {
- return (16);
- }
- else if (length <= 32) {
- return (32);
- }
- else {
- return (8);
- }
- break;
-
- case ACCESS_BYTE_ACC:
- return (8);
- break;
-
- case ACCESS_WORD_ACC:
- return (16);
- break;
-
- case ACCESS_DWORD_ACC:
- return (32);
- break;
-
- default:
- /* Invalid field access type */
-
- return (0);
- }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_prep_common_field_objec
- *
- * PARAMETERS: Obj_desc - The field object
- * Field_flags - Access, Lock_rule, or Update_rule.
- * The format of a Field_flag is described
- * in the ACPI specification
- * Field_position - Field position
- * Field_length - Field length
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initialize the areas of the field object that are common
- * to the various types of fields.
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-acpi_aml_prep_common_field_object (
- ACPI_OPERAND_OBJECT *obj_desc,
- u8 field_flags,
- u8 field_attribute,
- u32 field_position,
- u32 field_length)
-{
- u32 granularity;
-
-
- /*
- * Note: the structure being initialized is the
- * ACPI_COMMON_FIELD_INFO; Therefore, we can just use the Field union to
- * access this common area. No structure fields outside of the common area
- * are initialized by this procedure.
- */
-
- /* Decode the Field_flags */
-
- obj_desc->field.access = (u8) ((field_flags & ACCESS_TYPE_MASK)
- >> ACCESS_TYPE_SHIFT);
- obj_desc->field.lock_rule = (u8) ((field_flags & LOCK_RULE_MASK)
- >> LOCK_RULE_SHIFT);
- obj_desc->field.update_rule = (u8) ((field_flags & UPDATE_RULE_MASK)
- >> UPDATE_RULE_SHIFT);
-
- /* Other misc fields */
-
- obj_desc->field.length = (u16) field_length;
- obj_desc->field.access_attribute = field_attribute;
-
- /* Decode the access type so we can compute offsets */
-
- granularity = acpi_aml_decode_field_access_type (obj_desc->field.access, obj_desc->field.length);
- if (!granularity) {
- return (AE_AML_OPERAND_VALUE);
- }
-
- /* Access granularity based fields */
-
- obj_desc->field.granularity = (u8) granularity;
- obj_desc->field.bit_offset = (u8) (field_position % granularity);
- obj_desc->field.offset = (u32) field_position / granularity;
-
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_prep_def_field_value
- *
- * PARAMETERS: Node - Owning Node
- * Region - Region in which field is being defined
- * Field_flags - Access, Lock_rule, or Update_rule.
- * The format of a Field_flag is described
- * in the ACPI specification
- * Field_position - Field position
- * Field_length - Field length
- *
- * RETURN: Status
- *
- * DESCRIPTION: Construct an ACPI_OPERAND_OBJECT of type Def_field and
- * connect it to the parent Node.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_prep_def_field_value (
- ACPI_NAMESPACE_NODE *node,
- ACPI_HANDLE region,
- u8 field_flags,
- u8 field_attribute,
- u32 field_position,
- u32 field_length)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- u32 type;
- ACPI_STATUS status;
-
-
- /* Parameter validation */
-
- if (!region) {
- return (AE_AML_NO_OPERAND);
- }
-
- type = acpi_ns_get_type (region);
- if (type != ACPI_TYPE_REGION) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /* Allocate a new object */
-
- obj_desc = acpi_cm_create_internal_object (INTERNAL_TYPE_DEF_FIELD);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
-
- /* Obj_desc and Region valid */
-
- /* Initialize areas of the object that are common to all fields */
-
- status = acpi_aml_prep_common_field_object (obj_desc, field_flags, field_attribute,
- field_position, field_length);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Initialize areas of the object that are specific to this field type */
-
- obj_desc->field.container = acpi_ns_get_attached_object (region);
-
- /* An additional reference for the container */
-
- acpi_cm_add_reference (obj_desc->field.container);
-
-
- /* Debug info */
-
- /*
- * Store the constructed descriptor (Obj_desc) into the Named_obj whose
- * handle is on TOS, preserving the current type of that Named_obj.
- */
- status = acpi_ns_attach_object ((ACPI_HANDLE) node, obj_desc,
- (u8) acpi_ns_get_type ((ACPI_HANDLE) node));
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_prep_bank_field_value
- *
- * PARAMETERS: Node - Owning Node
- * Region - Region in which field is being defined
- * Bank_reg - Bank selection register
- * Bank_val - Value to store in selection register
- * Field_flags - Access, Lock_rule, or Update_rule
- * Field_position - Field position
- * Field_length - Field length
- *
- * RETURN: Status
- *
- * DESCRIPTION: Construct an ACPI_OPERAND_OBJECT of type Bank_field and
- * connect it to the parent Node.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_prep_bank_field_value (
- ACPI_NAMESPACE_NODE *node,
- ACPI_HANDLE region,
- ACPI_HANDLE bank_reg,
- u32 bank_val,
- u8 field_flags,
- u8 field_attribute,
- u32 field_position,
- u32 field_length)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- u32 type;
- ACPI_STATUS status;
-
-
- /* Parameter validation */
-
- if (!region) {
- return (AE_AML_NO_OPERAND);
- }
-
- type = acpi_ns_get_type (region);
- if (type != ACPI_TYPE_REGION) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /* Allocate a new object */
-
- obj_desc = acpi_cm_create_internal_object (INTERNAL_TYPE_BANK_FIELD);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Obj_desc and Region valid */
-
- /* Initialize areas of the object that are common to all fields */
-
- status = acpi_aml_prep_common_field_object (obj_desc, field_flags, field_attribute,
- field_position, field_length);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Initialize areas of the object that are specific to this field type */
-
- obj_desc->bank_field.value = bank_val;
- obj_desc->bank_field.container = acpi_ns_get_attached_object (region);
- obj_desc->bank_field.bank_select = acpi_ns_get_attached_object (bank_reg);
-
- /* An additional reference for the container and bank select */
- /* TBD: [Restructure] is "Bank_select" ever a real internal object?? */
-
- acpi_cm_add_reference (obj_desc->bank_field.container);
- acpi_cm_add_reference (obj_desc->bank_field.bank_select);
-
- /* Debug info */
-
- /*
- * Store the constructed descriptor (Obj_desc) into the Named_obj whose
- * handle is on TOS, preserving the current type of that Named_obj.
- */
- status = acpi_ns_attach_object ((ACPI_HANDLE) node, obj_desc,
- (u8) acpi_ns_get_type ((ACPI_HANDLE) node));
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_prep_index_field_value
- *
- * PARAMETERS: Node - Owning Node
- * Index_reg - Index register
- * Data_reg - Data register
- * Field_flags - Access, Lock_rule, or Update_rule
- * Field_position - Field position
- * Field_length - Field length
- *
- * RETURN: Status
- *
- * DESCRIPTION: Construct an ACPI_OPERAND_OBJECT of type Index_field and
- * connect it to the parent Node.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_prep_index_field_value (
- ACPI_NAMESPACE_NODE *node,
- ACPI_HANDLE index_reg,
- ACPI_HANDLE data_reg,
- u8 field_flags,
- u8 field_attribute,
- u32 field_position,
- u32 field_length)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_STATUS status;
-
-
- /* Parameter validation */
-
- if (!index_reg || !data_reg) {
- return (AE_AML_NO_OPERAND);
- }
-
- /* Allocate a new object descriptor */
-
- obj_desc = acpi_cm_create_internal_object (INTERNAL_TYPE_INDEX_FIELD);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Initialize areas of the object that are common to all fields */
-
- status = acpi_aml_prep_common_field_object (obj_desc, field_flags, field_attribute,
- field_position, field_length);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Initialize areas of the object that are specific to this field type */
-
- obj_desc->index_field.value = (u32) (field_position /
- obj_desc->field.granularity);
- obj_desc->index_field.index = index_reg;
- obj_desc->index_field.data = data_reg;
-
- /* Debug info */
-
- /*
- * Store the constructed descriptor (Obj_desc) into the Named_obj whose
- * handle is on TOS, preserving the current type of that Named_obj.
- */
- status = acpi_ns_attach_object ((ACPI_HANDLE) node, obj_desc,
- (u8) acpi_ns_get_type ((ACPI_HANDLE) node));
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/executer/amregion.c b/reactos/drivers/bus/acpi/executer/amregion.c
deleted file mode 100644
index a3e9e0a4a5f..00000000000
--- a/reactos/drivers/bus/acpi/executer/amregion.c
+++ /dev/null
@@ -1,405 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amregion - ACPI default Op_region (address space) handlers
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amregion")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_memory_space_handler
- *
- * PARAMETERS: Function - Read or Write operation
- * Address - Where in the space to read or write
- * Bit_width - Field width in bits (8, 16, or 32)
- * Value - Pointer to in or out value
- * Handler_context - Pointer to Handler's context
- * Region_context - Pointer to context specific to the
- * accessed region
- *
- * RETURN: Status
- *
- * DESCRIPTION: Handler for the System Memory address space (Op Region)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_system_memory_space_handler (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context)
-{
- ACPI_STATUS status = AE_OK;
- void *logical_addr_ptr = NULL;
- MEM_HANDLER_CONTEXT *mem_info = region_context;
- u32 length;
-
-
- /* Validate and translate the bit width */
-
- switch (bit_width) {
- case 8:
- length = 1;
- break;
-
- case 16:
- length = 2;
- break;
-
- case 32:
- length = 4;
- break;
-
- default:
- return (AE_AML_OPERAND_VALUE);
- break;
- }
-
-
- /*
- * Does the request fit into the cached memory mapping?
- * Is 1) Address below the current mapping? OR
- * 2) Address beyond the current mapping?
- */
-
- if ((address < mem_info->mapped_physical_address) ||
- (((ACPI_INTEGER) address + length) >
- ((ACPI_INTEGER) mem_info->mapped_physical_address + mem_info->mapped_length))) {
- /*
- * The request cannot be resolved by the current memory mapping;
- * Delete the existing mapping and create a new one.
- */
-
- if (mem_info->mapped_length) {
- /* Valid mapping, delete it */
-
- acpi_os_unmap_memory (mem_info->mapped_logical_address,
- mem_info->mapped_length);
- }
-
- mem_info->mapped_length = 0; /* In case of failure below */
-
- /* Create a new mapping starting at the address given */
-
- status = acpi_os_map_memory (address, SYSMEM_REGION_WINDOW_SIZE,
- (void **) &mem_info->mapped_logical_address);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* TBD: should these pointers go to 64-bit in all cases ? */
-
- mem_info->mapped_physical_address = address;
- mem_info->mapped_length = SYSMEM_REGION_WINDOW_SIZE;
- }
-
-
- /*
- * Generate a logical pointer corresponding to the address we want to
- * access
- */
-
- /* TBD: should these pointers go to 64-bit in all cases ? */
-
- logical_addr_ptr = mem_info->mapped_logical_address +
- ((ACPI_INTEGER) address - (ACPI_INTEGER) mem_info->mapped_physical_address);
-
- /* Perform the memory read or write */
-
- switch (function) {
-
- case ADDRESS_SPACE_READ:
-
- switch (bit_width) {
- case 8:
- *value = (u32)* (u8 *) logical_addr_ptr;
- break;
-
- case 16:
- MOVE_UNALIGNED16_TO_32 (value, logical_addr_ptr);
- break;
-
- case 32:
- MOVE_UNALIGNED32_TO_32 (value, logical_addr_ptr);
- break;
- }
-
- break;
-
-
- case ADDRESS_SPACE_WRITE:
-
- switch (bit_width) {
- case 8:
- *(u8 *) logical_addr_ptr = (u8) *value;
- break;
-
- case 16:
- MOVE_UNALIGNED16_TO_16 (logical_addr_ptr, value);
- break;
-
- case 32:
- MOVE_UNALIGNED32_TO_32 (logical_addr_ptr, value);
- break;
- }
-
- break;
-
-
- default:
- status = AE_BAD_PARAMETER;
- break;
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_io_space_handler
- *
- * PARAMETERS: Function - Read or Write operation
- * Address - Where in the space to read or write
- * Bit_width - Field width in bits (8, 16, or 32)
- * Value - Pointer to in or out value
- * Handler_context - Pointer to Handler's context
- * Region_context - Pointer to context specific to the
- * accessed region
- *
- * RETURN: Status
- *
- * DESCRIPTION: Handler for the System IO address space (Op Region)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_system_io_space_handler (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context)
-{
- ACPI_STATUS status = AE_OK;
-
-
- /* Decode the function parameter */
-
- switch (function) {
-
- case ADDRESS_SPACE_READ:
-
- switch (bit_width) {
- /* I/O Port width */
-
- case 8:
- *value = (u32) acpi_os_in8 ((ACPI_IO_ADDRESS) address);
- break;
-
- case 16:
- *value = (u32) acpi_os_in16 ((ACPI_IO_ADDRESS) address);
- break;
-
- case 32:
- *value = acpi_os_in32 ((ACPI_IO_ADDRESS) address);
- break;
-
- default:
- status = AE_AML_OPERAND_VALUE;
- }
-
- break;
-
-
- case ADDRESS_SPACE_WRITE:
-
- switch (bit_width) {
- /* I/O Port width */
- case 8:
- acpi_os_out8 ((ACPI_IO_ADDRESS) address, (u8) *value);
- break;
-
- case 16:
- acpi_os_out16 ((ACPI_IO_ADDRESS) address, (u16) *value);
- break;
-
- case 32:
- acpi_os_out32 ((ACPI_IO_ADDRESS) address, *value);
- break;
-
- default:
- status = AE_AML_OPERAND_VALUE;
- }
-
- break;
-
-
- default:
- status = AE_BAD_PARAMETER;
- break;
- }
-
- return (status);
-}
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_pci_config_space_handler
- *
- * PARAMETERS: Function - Read or Write operation
- * Address - Where in the space to read or write
- * Bit_width - Field width in bits (8, 16, or 32)
- * Value - Pointer to in or out value
- * Handler_context - Pointer to Handler's context
- * Region_context - Pointer to context specific to the
- * accessed region
- *
- * RETURN: Status
- *
- * DESCRIPTION: Handler for the PCI Config address space (Op Region)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_pci_config_space_handler (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context)
-{
- ACPI_STATUS status = AE_OK;
- u32 pci_bus;
- u32 dev_func;
- u8 pci_reg;
- PCI_HANDLER_CONTEXT *PCIcontext;
-
-
- /*
- * The arguments to Acpi_os(Read|Write)Pci_cfg(Byte|Word|Dword) are:
- *
- * Seg_bus - 0xSSSSBBBB - SSSS is the PCI bus segment
- * BBBB is the PCI bus number
- *
- * Dev_func - 0xDDDDFFFF - DDDD is the PCI device number
- * FFFF is the PCI device function number
- *
- * Reg_num - Config space register must be < 40h
- *
- * Value - input value for write, output for read
- *
- */
-
- PCIcontext = (PCI_HANDLER_CONTEXT *) region_context;
-
- pci_bus = LOWORD(PCIcontext->seg) << 16;
- pci_bus |= LOWORD(PCIcontext->bus);
-
- dev_func = PCIcontext->dev_func;
-
- pci_reg = (u8) address;
-
- switch (function) {
-
- case ADDRESS_SPACE_READ:
-
- *value = 0;
-
- switch (bit_width) {
- /* PCI Register width */
-
- case 8:
- status = acpi_os_read_pci_cfg_byte (pci_bus, dev_func, pci_reg,
- (u8 *) value);
- break;
-
- case 16:
- status = acpi_os_read_pci_cfg_word (pci_bus, dev_func, pci_reg,
- (u16 *) value);
- break;
-
- case 32:
- status = acpi_os_read_pci_cfg_dword (pci_bus, dev_func, pci_reg,
- value);
- break;
-
- default:
- status = AE_AML_OPERAND_VALUE;
-
- } /* Switch bit_width */
-
- break;
-
-
- case ADDRESS_SPACE_WRITE:
-
- switch (bit_width) {
- /* PCI Register width */
-
- case 8:
- status = acpi_os_write_pci_cfg_byte (pci_bus, dev_func, pci_reg,
- *(u8 *) value);
- break;
-
- case 16:
- status = acpi_os_write_pci_cfg_word (pci_bus, dev_func, pci_reg,
- *(u16 *) value);
- break;
-
- case 32:
- status = acpi_os_write_pci_cfg_dword (pci_bus, dev_func, pci_reg,
- *value);
- break;
-
- default:
- status = AE_AML_OPERAND_VALUE;
-
- } /* Switch bit_width */
-
- break;
-
-
- default:
-
- status = AE_BAD_PARAMETER;
- break;
-
- }
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/executer/amresnte.c b/reactos/drivers/bus/acpi/executer/amresnte.c
deleted file mode 100644
index 9ddbc841728..00000000000
--- a/reactos/drivers/bus/acpi/executer/amresnte.c
+++ /dev/null
@@ -1,500 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amresnte - AML Interpreter object resolution
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amresnte")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_resolve_node_to_value
- *
- * PARAMETERS: Stack_ptr - Pointer to a location on a stack that contains
- * a pointer to an Node
- *
- * RETURN: Status
- *
- * DESCRIPTION: Resolve a ACPI_NAMESPACE_NODE (Node,
- * A.K.A. a "direct name pointer")
- *
- * Note: for some of the data types, the pointer attached to the Node
- * can be either a pointer to an actual internal object or a pointer into the
- * AML stream itself. These types are currently:
- *
- * ACPI_TYPE_INTEGER
- * ACPI_TYPE_STRING
- * ACPI_TYPE_BUFFER
- * ACPI_TYPE_MUTEX
- * ACPI_TYPE_PACKAGE
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_resolve_node_to_value (
- ACPI_NAMESPACE_NODE **stack_ptr,
- ACPI_WALK_STATE *walk_state)
-
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *val_desc = NULL;
- ACPI_OPERAND_OBJECT *obj_desc = NULL;
- ACPI_NAMESPACE_NODE *node;
- u8 *aml_pointer = NULL;
- OBJECT_TYPE_INTERNAL entry_type;
- u8 locked;
- u8 attached_aml_pointer = FALSE;
- u8 aml_opcode = 0;
- ACPI_INTEGER temp_val;
- OBJECT_TYPE_INTERNAL object_type;
-
-
- node = *stack_ptr;
-
-
- /*
- * The stack pointer is a "Direct name ptr", and points to a
- * a ACPI_NAMESPACE_NODE (Node). Get the pointer that is attached to
- * the Node.
- */
-
- val_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) node);
- entry_type = acpi_ns_get_type ((ACPI_HANDLE) node);
-
- /*
- * The Val_desc attached to the Node can be either:
- * 1) An internal ACPI object
- * 2) A pointer into the AML stream (into one of the ACPI system tables)
- */
-
- if (acpi_tb_system_table_pointer (val_desc)) {
- attached_aml_pointer = TRUE;
- aml_opcode = *((u8 *) val_desc);
- aml_pointer = ((u8 *) val_desc) + 1;
-
- }
-
-
- /*
- * Several Entry_types do not require further processing, so
- * we will return immediately
- */
- /* Devices rarely have an attached object, return the Node
- * and Method locals and arguments have a pseudo-Node
- */
- if (entry_type == ACPI_TYPE_DEVICE ||
- (node->flags & (ANOBJ_METHOD_ARG | ANOBJ_METHOD_LOCAL))) {
- return (AE_OK);
- }
-
- if (!val_desc) {
- return (AE_AML_NO_OPERAND);
- }
-
- /*
- * Action is based on the type of the Node, which indicates the type
- * of the attached object or pointer
- */
- switch (entry_type) {
-
- case ACPI_TYPE_PACKAGE:
-
- if (attached_aml_pointer) {
- /*
- * This means that the package initialization is not parsed
- * -- should not happen
- */
- return (AE_NOT_IMPLEMENTED);
- }
-
- /* Val_desc is an internal object in all cases by the time we get here */
-
- if (ACPI_TYPE_PACKAGE != val_desc->common.type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /* Return an additional reference to the object */
-
- obj_desc = val_desc;
- acpi_cm_add_reference (obj_desc);
- break;
-
-
- case ACPI_TYPE_BUFFER:
-
- if (attached_aml_pointer) {
- /*
- * This means that the buffer initialization is not parsed
- * -- should not happen
- */
- return (AE_NOT_IMPLEMENTED);
- }
-
- /* Val_desc is an internal object in all cases by the time we get here */
-
- if (ACPI_TYPE_BUFFER != val_desc->common.type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /* Return an additional reference to the object */
-
- obj_desc = val_desc;
- acpi_cm_add_reference (obj_desc);
- break;
-
-
- case ACPI_TYPE_STRING:
-
- if (attached_aml_pointer) {
- /* Allocate a new string object */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_STRING);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- /* Init the internal object */
-
- obj_desc->string.pointer = (NATIVE_CHAR *) aml_pointer;
- obj_desc->string.length = STRLEN (obj_desc->string.pointer);
- }
-
- else {
- if (ACPI_TYPE_STRING != val_desc->common.type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /* Return an additional reference to the object */
-
- obj_desc = val_desc;
- acpi_cm_add_reference (obj_desc);
- }
-
- break;
-
-
- case ACPI_TYPE_INTEGER:
-
- /*
- * The Node has an attached internal object, make sure that it's a
- * number
- */
-
- if (ACPI_TYPE_INTEGER != val_desc->common.type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /* Return an additional reference to the object */
-
- obj_desc = val_desc;
- acpi_cm_add_reference (obj_desc);
- break;
-
-
- case INTERNAL_TYPE_DEF_FIELD:
-
- /*
- * TBD: [Investigate] Is this the correct solution?
- *
- * This section was extended to convert to generic buffer if
- * the return length is greater than 32 bits, but still allows
- * for returning a type Number for smaller values because the
- * caller can then apply arithmetic operators on those fields.
- *
- * XXX - Implementation limitation: Fields are implemented as type
- * XXX - Number, but they really are supposed to be type Buffer.
- * XXX - The two are interchangeable only for lengths <= 32 bits.
- */
- if(val_desc->field.length > 32) {
- object_type = ACPI_TYPE_BUFFER;
- }
- else {
- object_type = ACPI_TYPE_INTEGER;
- }
-
- /*
- * Create the destination buffer object and the buffer space.
- */
- obj_desc = acpi_cm_create_internal_object (object_type);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- /*
- * Fill in the object specific details
- */
- if (ACPI_TYPE_BUFFER == object_type) {
- obj_desc->buffer.pointer = acpi_cm_callocate (val_desc->field.length);
- if (!obj_desc->buffer.pointer) {
- acpi_cm_remove_reference(obj_desc);
- return (AE_NO_MEMORY);
- }
-
- obj_desc->buffer.length = val_desc->field.length;
-
- status = acpi_aml_access_named_field (ACPI_READ, (ACPI_HANDLE) node,
- obj_desc->buffer.pointer, obj_desc->buffer.length);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
- else {
- status = acpi_aml_access_named_field (ACPI_READ, (ACPI_HANDLE) node,
- &temp_val, sizeof (temp_val));
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- obj_desc->integer.value = temp_val;
- }
-
-
- break;
-
-
- case INTERNAL_TYPE_BANK_FIELD:
-
- if (attached_aml_pointer) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- if (INTERNAL_TYPE_BANK_FIELD != val_desc->common.type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
-
- /* Get the global lock if needed */
-
- obj_desc = (ACPI_OPERAND_OBJECT *) *stack_ptr;
- locked = acpi_aml_acquire_global_lock (obj_desc->field_unit.lock_rule);
-
- /* Set Index value to select proper Data register */
- /* perform the update */
-
- status = acpi_aml_access_named_field (ACPI_WRITE,
- val_desc->bank_field.bank_select, &val_desc->bank_field.value,
- sizeof (val_desc->bank_field.value));
-
- acpi_aml_release_global_lock (locked);
-
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Read Data value */
-
- status = acpi_aml_access_named_field (ACPI_READ,
- (ACPI_HANDLE) val_desc->bank_field.container,
- &temp_val, sizeof (temp_val));
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Create an object for the result */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- obj_desc->integer.value = temp_val;
- break;
-
-
- case INTERNAL_TYPE_INDEX_FIELD:
-
- if (attached_aml_pointer) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- if (INTERNAL_TYPE_INDEX_FIELD != val_desc->common.type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
-
- /* Set Index value to select proper Data register */
- /* Get the global lock if needed */
-
- obj_desc = (ACPI_OPERAND_OBJECT *) *stack_ptr;
- locked = acpi_aml_acquire_global_lock (obj_desc->field_unit.lock_rule);
-
- /* Perform the update */
-
- status = acpi_aml_access_named_field (ACPI_WRITE,
- val_desc->index_field.index, &val_desc->index_field.value,
- sizeof (val_desc->index_field.value));
-
- acpi_aml_release_global_lock (locked);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Read Data value */
-
- status = acpi_aml_access_named_field (ACPI_READ, val_desc->index_field.data,
- &temp_val, sizeof (temp_val));
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Create an object for the result */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- obj_desc->integer.value = temp_val;
- break;
-
-
- case ACPI_TYPE_FIELD_UNIT:
-
- if (attached_aml_pointer) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- if (val_desc->common.type != (u8) entry_type) {
- return (AE_AML_OPERAND_TYPE);
- break;
- }
-
- /* Create object for result */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_ANY);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- status = acpi_aml_get_field_unit_value (val_desc, obj_desc);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (obj_desc);
- return (status);
- }
-
- break;
-
-
- /*
- * For these objects, just return the object attached to the Node
- */
-
- case ACPI_TYPE_MUTEX:
- case ACPI_TYPE_METHOD:
- case ACPI_TYPE_POWER:
- case ACPI_TYPE_PROCESSOR:
- case ACPI_TYPE_THERMAL:
- case ACPI_TYPE_EVENT:
- case ACPI_TYPE_REGION:
-
-
- /* Return an additional reference to the object */
-
- obj_desc = val_desc;
- acpi_cm_add_reference (obj_desc);
- break;
-
-
- /* TYPE_Any is untyped, and thus there is no object associated with it */
-
- case ACPI_TYPE_ANY:
-
- return (AE_AML_OPERAND_TYPE); /* Cannot be AE_TYPE */
- break;
-
-
- /*
- * The only named references allowed are named constants
- *
- * e.g. Name (\OSFL, Ones)
- */
- case INTERNAL_TYPE_REFERENCE:
-
- switch (val_desc->reference.opcode) {
-
- case AML_ZERO_OP:
-
- temp_val = 0;
- break;
-
-
- case AML_ONE_OP:
-
- temp_val = 1;
- break;
-
-
- case AML_ONES_OP:
-
- temp_val = ACPI_INTEGER_MAX;
- break;
-
-
- default:
-
- return (AE_AML_BAD_OPCODE);
- }
-
- /* Create object for result */
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_INTEGER);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- obj_desc->integer.value = temp_val;
-
- /* Truncate value if we are executing from a 32-bit ACPI table */
-
- acpi_aml_truncate_for32bit_table (obj_desc, walk_state);
- break;
-
-
- /* Default case is for unknown types */
-
- default:
-
- return (AE_AML_OPERAND_TYPE);
-
- } /* switch (Entry_type) */
-
-
- /* Put the object descriptor on the stack */
-
- *stack_ptr = (void *) obj_desc;
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amresolv.c b/reactos/drivers/bus/acpi/executer/amresolv.c
deleted file mode 100644
index bdbaed6c3a6..00000000000
--- a/reactos/drivers/bus/acpi/executer/amresolv.c
+++ /dev/null
@@ -1,420 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amresolv - AML Interpreter object resolution
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amresolv")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_get_field_unit_value
- *
- * PARAMETERS: *Field_desc - Pointer to a Field_unit
- * *Result_desc - Pointer to an empty descriptor
- * which will become a Number
- * containing the field's value.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Retrieve the value from a Field_unit
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_get_field_unit_value (
- ACPI_OPERAND_OBJECT *field_desc,
- ACPI_OPERAND_OBJECT *result_desc)
-{
- ACPI_STATUS status = AE_OK;
- u32 mask;
- u8 *location = NULL;
- u8 locked = FALSE;
-
-
- if (!field_desc) {
- status = AE_AML_NO_OPERAND;
- }
-
- if (!(field_desc->common.flags & AOPOBJ_DATA_VALID)) {
- status = acpi_ds_get_field_unit_arguments (field_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- if (!field_desc->field_unit.container) {
- status = AE_AML_INTERNAL;
- }
-
- else if (ACPI_TYPE_BUFFER != field_desc->field_unit.container->common.type) {
- status = AE_AML_OPERAND_TYPE;
- }
-
- else if (!result_desc) {
- status = AE_AML_INTERNAL;
- }
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /* Get the global lock if needed */
-
- locked = acpi_aml_acquire_global_lock (field_desc->field_unit.lock_rule);
-
- /* Field location is (base of buffer) + (byte offset) */
-
- location = field_desc->field_unit.container->buffer.pointer
- + field_desc->field_unit.offset;
-
- /*
- * Construct Mask with as many 1 bits as the field width
- *
- * NOTE: Only the bottom 5 bits are valid for a shift operation, so
- * special care must be taken for any shift greater than 31 bits.
- *
- * TBD: [Unhandled] Fields greater than 32-bits will not work.
- */
-
- if (field_desc->field_unit.length < 32) {
- mask = ((u32) 1 << field_desc->field_unit.length) - (u32) 1;
- }
- else {
- mask = ACPI_UINT32_MAX;
- }
-
- result_desc->integer.type = (u8) ACPI_TYPE_INTEGER;
-
- /* Get the 32 bit value at the location */
-
- MOVE_UNALIGNED32_TO_32 (&result_desc->integer.value, location);
-
- /*
- * Shift the 32-bit word containing the field, and mask off the
- * resulting value
- */
-
- result_desc->integer.value =
- (result_desc->integer.value >> field_desc->field_unit.bit_offset) & mask;
-
- /* Release global lock if we acquired it earlier */
-
- acpi_aml_release_global_lock (locked);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_resolve_to_value
- *
- * PARAMETERS: **Stack_ptr - Points to entry on Obj_stack, which can
- * be either an (ACPI_OPERAND_OBJECT *)
- * or an ACPI_HANDLE.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Convert Reference objects to values
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_resolve_to_value (
- ACPI_OPERAND_OBJECT **stack_ptr,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_OK;
-
-
- if (!stack_ptr || !*stack_ptr) {
- return (AE_AML_NO_OPERAND);
- }
-
-
- /*
- * The entity pointed to by the Stack_ptr can be either
- * 1) A valid ACPI_OPERAND_OBJECT, or
- * 2) A ACPI_NAMESPACE_NODE (Named_obj)
- */
-
- if (VALID_DESCRIPTOR_TYPE (*stack_ptr, ACPI_DESC_TYPE_INTERNAL)) {
-
- status = acpi_aml_resolve_object_to_value (stack_ptr, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- /*
- * Object on the stack may have changed if Acpi_aml_resolve_object_to_value()
- * was called (i.e., we can't use an _else_ here.)
- */
-
- if (VALID_DESCRIPTOR_TYPE (*stack_ptr, ACPI_DESC_TYPE_NAMED)) {
- status = acpi_aml_resolve_node_to_value ((ACPI_NAMESPACE_NODE **) stack_ptr, walk_state);
- }
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_resolve_object_to_value
- *
- * PARAMETERS: Stack_ptr - Pointer to a stack location that contains a
- * ptr to an internal object.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Retrieve the value from an internal object. The Reference type
- * uses the associated AML opcode to determine the value.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_resolve_object_to_value (
- ACPI_OPERAND_OBJECT **stack_ptr,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *stack_desc;
- ACPI_STATUS status = AE_OK;
- ACPI_HANDLE temp_handle = NULL;
- ACPI_OPERAND_OBJECT *obj_desc = NULL;
- u32 index = 0;
- u16 opcode;
-
-
- stack_desc = *stack_ptr;
-
- /* This is an ACPI_OPERAND_OBJECT */
-
- switch (stack_desc->common.type) {
-
- case INTERNAL_TYPE_REFERENCE:
-
- opcode = stack_desc->reference.opcode;
-
- switch (opcode) {
-
- case AML_NAME_OP:
-
- /*
- * Convert indirect name ptr to a direct name ptr.
- * Then, Acpi_aml_resolve_node_to_value can be used to get the value
- */
-
- temp_handle = stack_desc->reference.object;
-
- /* Delete the Reference Object */
-
- acpi_cm_remove_reference (stack_desc);
-
- /* Put direct name pointer onto stack and exit */
-
- (*stack_ptr) = temp_handle;
- status = AE_OK;
- break;
-
-
- case AML_LOCAL_OP:
- case AML_ARG_OP:
-
- index = stack_desc->reference.offset;
-
- /*
- * Get the local from the method's state info
- * Note: this increments the local's object reference count
- */
-
- status = acpi_ds_method_data_get_value (opcode, index,
- walk_state, &obj_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * Now we can delete the original Reference Object and
- * replace it with the resolve value
- */
-
- acpi_cm_remove_reference (stack_desc);
- *stack_ptr = obj_desc;
-
- break;
-
-
- /*
- * TBD: [Restructure] These next three opcodes change the type of
- * the object, which is actually a no-no.
- */
-
- case AML_ZERO_OP:
-
- stack_desc->common.type = (u8) ACPI_TYPE_INTEGER;
- stack_desc->integer.value = 0;
- break;
-
-
- case AML_ONE_OP:
-
- stack_desc->common.type = (u8) ACPI_TYPE_INTEGER;
- stack_desc->integer.value = 1;
- break;
-
-
- case AML_ONES_OP:
-
- stack_desc->common.type = (u8) ACPI_TYPE_INTEGER;
- stack_desc->integer.value = ACPI_INTEGER_MAX;
-
- /* Truncate value if we are executing from a 32-bit ACPI table */
-
- acpi_aml_truncate_for32bit_table (stack_desc, walk_state);
- break;
-
-
- case AML_INDEX_OP:
-
- switch (stack_desc->reference.target_type) {
- case ACPI_TYPE_BUFFER_FIELD:
-
- /* Just return - leave the Reference on the stack */
- break;
-
-
- case ACPI_TYPE_PACKAGE:
- obj_desc = *stack_desc->reference.where;
- if (obj_desc) {
- /*
- * Valid obj descriptor, copy pointer to return value
- * (i.e., dereference the package index)
- * Delete the ref object, increment the returned object
- */
- acpi_cm_remove_reference (stack_desc);
- acpi_cm_add_reference (obj_desc);
- *stack_ptr = obj_desc;
- }
-
- else {
- /*
- * A NULL object descriptor means an unitialized element of
- * the package, can't deref it
- */
-
- status = AE_AML_UNINITIALIZED_ELEMENT;
- }
- break;
-
- default:
- /* Invalid reference OBJ*/
-
- status = AE_AML_INTERNAL;
- break;
- }
-
- break;
-
-
- case AML_DEBUG_OP:
-
- /* Just leave the object as-is */
- break;
-
-
- default:
-
- status = AE_AML_INTERNAL;
-
- } /* switch (Opcode) */
-
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- break; /* case INTERNAL_TYPE_REFERENCE */
-
-
- case ACPI_TYPE_FIELD_UNIT:
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_ANY);
- if (!obj_desc) {
- /* Descriptor allocation failure */
-
- return (AE_NO_MEMORY);
- }
-
- status = acpi_aml_get_field_unit_value (stack_desc, obj_desc);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (obj_desc);
- obj_desc = NULL;
- }
-
- *stack_ptr = (void *) obj_desc;
- break;
-
-
- case INTERNAL_TYPE_BANK_FIELD:
-
- obj_desc = acpi_cm_create_internal_object (ACPI_TYPE_ANY);
- if (!obj_desc) {
- /* Descriptor allocation failure */
-
- return (AE_NO_MEMORY);
- }
-
- status = acpi_aml_get_field_unit_value (stack_desc, obj_desc);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (obj_desc);
- obj_desc = NULL;
- }
-
- *stack_ptr = (void *) obj_desc;
- break;
-
-
- /* TBD: [Future] - may need to handle Index_field, and Def_field someday */
-
- default:
-
- break;
-
- } /* switch (Stack_desc->Common.Type) */
-
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amresop.c b/reactos/drivers/bus/acpi/executer/amresop.c
deleted file mode 100644
index 58e9feb94de..00000000000
--- a/reactos/drivers/bus/acpi/executer/amresop.c
+++ /dev/null
@@ -1,475 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amresop - AML Interpreter operand/object resolution
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amresop")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_check_object_type
- *
- * PARAMETERS: Type_needed Object type needed
- * This_type Actual object type
- * Object Object pointer
- *
- * RETURN: Status
- *
- * DESCRIPTION: Check required type against actual type
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-acpi_aml_check_object_type (
- ACPI_OBJECT_TYPE type_needed,
- ACPI_OBJECT_TYPE this_type,
- void *object)
-{
-
-
- if (type_needed == ACPI_TYPE_ANY) {
- /* All types OK, so we don't perform any typechecks */
-
- return (AE_OK);
- }
-
-
- if (type_needed != this_type) {
- return (AE_AML_OPERAND_TYPE);
- }
-
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_resolve_operands
- *
- * PARAMETERS: Opcode Opcode being interpreted
- * Stack_ptr Top of operand stack
- *
- * RETURN: Status
- *
- * DESCRIPTION: Convert stack entries to required types
- *
- * Each nibble in Arg_types represents one required operand
- * and indicates the required Type:
- *
- * The corresponding stack entry will be converted to the
- * required type if possible, else return an exception
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_resolve_operands (
- u16 opcode,
- ACPI_OPERAND_OBJECT **stack_ptr,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_STATUS status = AE_OK;
- u8 object_type;
- ACPI_HANDLE temp_handle;
- u32 arg_types;
- ACPI_OPCODE_INFO *op_info;
- u32 this_arg_type;
- ACPI_OBJECT_TYPE type_needed;
-
-
- op_info = acpi_ps_get_opcode_info (opcode);
- if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) {
- return (AE_AML_BAD_OPCODE);
- }
-
-
- arg_types = op_info->runtime_args;
- if (arg_types == ARGI_INVALID_OPCODE) {
- return (AE_AML_INTERNAL);
- }
-
-
- /*
- * Normal exit is with *Types == '\0' at end of string.
- * Function will return an exception from within the loop upon
- * finding an entry which is not, and cannot be converted
- * to, the required type; if stack underflows; or upon
- * finding a NULL stack entry (which "should never happen").
- */
-
- while (GET_CURRENT_ARG_TYPE (arg_types)) {
- if (!stack_ptr || !*stack_ptr) {
- return (AE_AML_INTERNAL);
- }
-
- /* Extract useful items */
-
- obj_desc = *stack_ptr;
-
- /* Decode the descriptor type */
-
- if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) {
- /* Node */
-
- object_type = ((ACPI_NAMESPACE_NODE *) obj_desc)->type;
- }
-
- else if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_INTERNAL)) {
- /* ACPI internal object */
-
- object_type = obj_desc->common.type;
-
- /* Check for bad ACPI_OBJECT_TYPE */
-
- if (!acpi_aml_validate_object_type (object_type)) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- if (object_type == (u8) INTERNAL_TYPE_REFERENCE) {
- /*
- * Decode the Reference
- */
-
- op_info = acpi_ps_get_opcode_info (opcode);
- if (ACPI_GET_OP_TYPE (op_info) != ACPI_OP_TYPE_OPCODE) {
- return (AE_AML_BAD_OPCODE);
- }
-
-
- switch (obj_desc->reference.opcode) {
- case AML_ZERO_OP:
- case AML_ONE_OP:
- case AML_ONES_OP:
- case AML_DEBUG_OP:
- case AML_NAME_OP:
- case AML_INDEX_OP:
- case AML_ARG_OP:
- case AML_LOCAL_OP:
-
- break;
-
- default:
- return (AE_AML_OPERAND_TYPE);
- break;
- }
- }
- }
-
- else {
- /* Invalid descriptor */
-
- return (AE_AML_OPERAND_TYPE);
- }
-
-
- /*
- * Get one argument type, point to the next
- */
-
- this_arg_type = GET_CURRENT_ARG_TYPE (arg_types);
- INCREMENT_ARG_LIST (arg_types);
-
-
- /*
- * Handle cases where the object does not need to be
- * resolved to a value
- */
-
- switch (this_arg_type) {
-
- case ARGI_REFERENCE: /* References */
- case ARGI_INTEGER_REF:
- case ARGI_OBJECT_REF:
- case ARGI_DEVICE_REF:
- case ARGI_TARGETREF: /* TBD: must implement implicit conversion rules before store */
- case ARGI_FIXED_TARGET: /* No implicit conversion before store to target */
- case ARGI_SIMPLE_TARGET: /* Name, Local, or Arg - no implicit conversion */
-
- /* Need an operand of type INTERNAL_TYPE_REFERENCE */
-
- if (VALID_DESCRIPTOR_TYPE (obj_desc, ACPI_DESC_TYPE_NAMED)) /* direct name ptr OK as-is */ {
- goto next_operand;
- }
-
- status = acpi_aml_check_object_type (INTERNAL_TYPE_REFERENCE,
- object_type, obj_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- if (AML_NAME_OP == obj_desc->reference.opcode) {
- /*
- * Convert an indirect name ptr to direct name ptr and put
- * it on the stack
- */
-
- temp_handle = obj_desc->reference.object;
- acpi_cm_remove_reference (obj_desc);
- (*stack_ptr) = temp_handle;
- }
-
- goto next_operand;
- break;
-
-
- case ARGI_ANYTYPE:
-
- /*
- * We don't want to resolve Index_op reference objects during
- * a store because this would be an implicit De_ref_of operation.
- * Instead, we just want to store the reference object.
- * -- All others must be resolved below.
- */
-
- if ((opcode == AML_STORE_OP) &&
- ((*stack_ptr)->common.type == INTERNAL_TYPE_REFERENCE) &&
- ((*stack_ptr)->reference.opcode == AML_INDEX_OP)) {
- goto next_operand;
- }
- break;
- }
-
-
- /*
- * Resolve this object to a value
- */
-
- status = acpi_aml_resolve_to_value (stack_ptr, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /*
- * Check the resulting object (value) type
- */
- switch (this_arg_type) {
- /*
- * For the simple cases, only one type of resolved object
- * is allowed
- */
- case ARGI_MUTEX:
-
- /* Need an operand of type ACPI_TYPE_MUTEX */
-
- type_needed = ACPI_TYPE_MUTEX;
- break;
-
- case ARGI_EVENT:
-
- /* Need an operand of type ACPI_TYPE_EVENT */
-
- type_needed = ACPI_TYPE_EVENT;
- break;
-
- case ARGI_REGION:
-
- /* Need an operand of type ACPI_TYPE_REGION */
-
- type_needed = ACPI_TYPE_REGION;
- break;
-
- case ARGI_IF: /* If */
-
- /* Need an operand of type INTERNAL_TYPE_IF */
-
- type_needed = INTERNAL_TYPE_IF;
- break;
-
- case ARGI_PACKAGE: /* Package */
-
- /* Need an operand of type ACPI_TYPE_PACKAGE */
-
- type_needed = ACPI_TYPE_PACKAGE;
- break;
-
- case ARGI_ANYTYPE:
-
- /* Any operand type will do */
-
- type_needed = ACPI_TYPE_ANY;
- break;
-
-
- /*
- * The more complex cases allow multiple resolved object types
- */
-
- case ARGI_INTEGER: /* Number */
-
- /*
- * Need an operand of type ACPI_TYPE_INTEGER,
- * But we can implicitly convert from a STRING or BUFFER
- */
- status = acpi_aml_convert_to_integer (stack_ptr, walk_state);
- if (ACPI_FAILURE (status)) {
- if (status == AE_TYPE) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- return (status);
- }
-
- goto next_operand;
- break;
-
-
- case ARGI_BUFFER:
-
- /*
- * Need an operand of type ACPI_TYPE_BUFFER,
- * But we can implicitly convert from a STRING or INTEGER
- */
- status = acpi_aml_convert_to_buffer (stack_ptr, walk_state);
- if (ACPI_FAILURE (status)) {
- if (status == AE_TYPE) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- return (status);
- }
-
- goto next_operand;
- break;
-
-
- case ARGI_STRING:
-
- /*
- * Need an operand of type ACPI_TYPE_STRING,
- * But we can implicitly convert from a BUFFER or INTEGER
- */
- status = acpi_aml_convert_to_string (stack_ptr, walk_state);
- if (ACPI_FAILURE (status)) {
- if (status == AE_TYPE) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- return (status);
- }
-
- goto next_operand;
- break;
-
-
- case ARGI_COMPUTEDATA:
-
- /* Need an operand of type INTEGER, STRING or BUFFER */
-
- if ((ACPI_TYPE_INTEGER != (*stack_ptr)->common.type) &&
- (ACPI_TYPE_STRING != (*stack_ptr)->common.type) &&
- (ACPI_TYPE_BUFFER != (*stack_ptr)->common.type)) {
- return (AE_AML_OPERAND_TYPE);
- }
- goto next_operand;
- break;
-
-
- case ARGI_DATAOBJECT:
- /*
- * ARGI_DATAOBJECT is only used by the Size_of operator.
- *
- * The ACPI specification allows Size_of to return the size of
- * a Buffer, String or Package. However, the MS ACPI.SYS AML
- * Interpreter also allows an Node reference to return without
- * error with a size of 4.
- */
-
- /* Need a buffer, string, package or Node reference */
-
- if (((*stack_ptr)->common.type != ACPI_TYPE_BUFFER) &&
- ((*stack_ptr)->common.type != ACPI_TYPE_STRING) &&
- ((*stack_ptr)->common.type != ACPI_TYPE_PACKAGE) &&
- ((*stack_ptr)->common.type != INTERNAL_TYPE_REFERENCE)) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /*
- * If this is a reference, only allow a reference to an Node.
- */
- if ((*stack_ptr)->common.type == INTERNAL_TYPE_REFERENCE) {
- if (!(*stack_ptr)->reference.node) {
- return (AE_AML_OPERAND_TYPE);
- }
- }
- goto next_operand;
- break;
-
-
- case ARGI_COMPLEXOBJ:
-
- /* Need a buffer or package */
-
- if (((*stack_ptr)->common.type != ACPI_TYPE_BUFFER) &&
- ((*stack_ptr)->common.type != ACPI_TYPE_PACKAGE)) {
- return (AE_AML_OPERAND_TYPE);
- }
- goto next_operand;
- break;
-
-
- default:
-
- /* Unknown type */
-
- return (AE_BAD_PARAMETER);
- }
-
-
- /*
- * Make sure that the original object was resolved to the
- * required object type (Simple cases only).
- */
- status = acpi_aml_check_object_type (type_needed,
- (*stack_ptr)->common.type, *stack_ptr);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
-next_operand:
- /*
- * If more operands needed, decrement Stack_ptr to point
- * to next operand on stack
- */
- if (GET_CURRENT_ARG_TYPE (arg_types)) {
- stack_ptr--;
- }
-
- } /* while (*Types) */
-
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amstore.c b/reactos/drivers/bus/acpi/executer/amstore.c
deleted file mode 100644
index 136373a0c63..00000000000
--- a/reactos/drivers/bus/acpi/executer/amstore.c
+++ /dev/null
@@ -1,563 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amstore - AML Interpreter object store support
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amstore")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exec_store
- *
- * PARAMETERS: *Val_desc - Value to be stored
- * *Dest_desc - Where to store it 0 Must be (ACPI_HANDLE)
- * or an ACPI_OPERAND_OBJECT of type
- * Reference; if the latter the descriptor
- * will be either reused or deleted.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Store the value described by Val_desc into the location
- * described by Dest_desc. Called by various interpreter
- * functions to store the result of an operation into
- * the destination operand.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_exec_store (
- ACPI_OPERAND_OBJECT *val_desc,
- ACPI_OPERAND_OBJECT *dest_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *ref_desc = dest_desc;
-
-
- /* Validate parameters */
-
- if (!val_desc || !dest_desc) {
- return (AE_AML_NO_OPERAND);
- }
-
- /* Dest_desc can be either a namespace node or an ACPI object */
-
- if (VALID_DESCRIPTOR_TYPE (dest_desc, ACPI_DESC_TYPE_NAMED)) {
- /*
- * Dest is a namespace node,
- * Storing an object into a Name "container"
- */
- status = acpi_aml_store_object_to_node (val_desc,
- (ACPI_NAMESPACE_NODE *) dest_desc, walk_state);
-
- /* All done, that's it */
-
- return (status);
- }
-
-
- /* Destination object must be an object of type Reference */
-
- if (dest_desc->common.type != INTERNAL_TYPE_REFERENCE) {
- /* Destination is not an Reference */
-
- return (AE_AML_OPERAND_TYPE);
- }
-
-
- /*
- * Examine the Reference opcode. These cases are handled:
- *
- * 1) Store to Name (Change the object associated with a name)
- * 2) Store to an indexed area of a Buffer or Package
- * 3) Store to a Method Local or Arg
- * 4) Store to the debug object
- * 5) Store to a constant -- a noop
- */
-
- switch (ref_desc->reference.opcode) {
-
- case AML_NAME_OP:
-
- /* Storing an object into a Name "container" */
-
- status = acpi_aml_store_object_to_node (val_desc, ref_desc->reference.object,
- walk_state);
- break;
-
-
- case AML_INDEX_OP:
-
- /* Storing to an Index (pointer into a packager or buffer) */
-
- status = acpi_aml_store_object_to_index (val_desc, ref_desc, walk_state);
- break;
-
-
- case AML_LOCAL_OP:
- case AML_ARG_OP:
-
- /* Store to a method local/arg */
-
- status = acpi_ds_store_object_to_local (ref_desc->reference.opcode,
- ref_desc->reference.offset, val_desc, walk_state);
- break;
-
-
- case AML_DEBUG_OP:
-
- /*
- * Storing to the Debug object causes the value stored to be
- * displayed and otherwise has no effect -- see ACPI Specification
- *
- * TBD: print known object types "prettier".
- */
-
- break;
-
-
- case AML_ZERO_OP:
- case AML_ONE_OP:
- case AML_ONES_OP:
-
- /*
- * Storing to a constant is a no-op -- see ACPI Specification
- * Delete the reference descriptor, however
- */
- break;
-
-
- default:
-
- /* TBD: [Restructure] use object dump routine !! */
-
- status = AE_AML_INTERNAL;
- break;
-
- } /* switch (Ref_desc->Reference.Opcode) */
-
-
- /* Always delete the reference descriptor object */
-
- if (ref_desc) {
- acpi_cm_remove_reference (ref_desc);
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_store_object_to_index
- *
- * PARAMETERS: *Val_desc - Value to be stored
- * *Node - Named object to receive the value
- *
- * RETURN: Status
- *
- * DESCRIPTION: Store the object to the named object.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_store_object_to_index (
- ACPI_OPERAND_OBJECT *val_desc,
- ACPI_OPERAND_OBJECT *dest_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *obj_desc;
- u32 length;
- u32 i;
- u8 value = 0;
-
-
- /*
- * Destination must be a reference pointer, and
- * must point to either a buffer or a package
- */
-
- switch (dest_desc->reference.target_type) {
- case ACPI_TYPE_PACKAGE:
- /*
- * Storing to a package element is not simple. The source must be
- * evaluated and converted to the type of the destination and then the
- * source is copied into the destination - we can't just point to the
- * source object.
- */
- if (dest_desc->reference.target_type == ACPI_TYPE_PACKAGE) {
- /*
- * The object at *(Dest_desc->Reference.Where) is the
- * element within the package that is to be modified.
- */
- obj_desc = *(dest_desc->reference.where);
- if (obj_desc) {
- /*
- * If the Destination element is a package, we will delete
- * that object and construct a new one.
- *
- * TBD: [Investigate] Should both the src and dest be required
- * to be packages?
- * && (Val_desc->Common.Type == ACPI_TYPE_PACKAGE)
- */
- if (obj_desc->common.type == ACPI_TYPE_PACKAGE) {
- /*
- * Take away the reference for being part of a package and
- * delete
- */
- acpi_cm_remove_reference (obj_desc);
- acpi_cm_remove_reference (obj_desc);
-
- obj_desc = NULL;
- }
- }
-
- if (!obj_desc) {
- /*
- * If the Obj_desc is NULL, it means that an uninitialized package
- * element has been used as a destination (this is OK), therefore,
- * we must create the destination element to match the type of the
- * source element NOTE: Val_desc can be of any type.
- */
- obj_desc = acpi_cm_create_internal_object (val_desc->common.type);
- if (!obj_desc) {
- return (AE_NO_MEMORY);
- }
-
- /*
- * If the source is a package, copy the source to the new dest
- */
- if (ACPI_TYPE_PACKAGE == obj_desc->common.type) {
- status = acpi_cm_copy_ipackage_to_ipackage (val_desc, obj_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- acpi_cm_remove_reference (obj_desc);
- return (status);
- }
- }
-
- /*
- * Install the new descriptor into the package and add a
- * reference to the newly created descriptor for now being
- * part of the parent package
- */
-
- *(dest_desc->reference.where) = obj_desc;
- acpi_cm_add_reference (obj_desc);
- }
-
- if (ACPI_TYPE_PACKAGE != obj_desc->common.type) {
- /*
- * The destination element is not a package, so we need to
- * convert the contents of the source (Val_desc) and copy into
- * the destination (Obj_desc)
- */
- status = acpi_aml_store_object_to_object (val_desc, obj_desc,
- walk_state);
- if (ACPI_FAILURE (status)) {
- /*
- * An error occurrered when copying the internal object
- * so delete the reference.
- */
- return (AE_AML_OPERAND_TYPE);
- }
- }
- }
- break;
-
-
- case ACPI_TYPE_BUFFER_FIELD:
- /*
- * Storing into a buffer at a location defined by an Index.
- *
- * Each 8-bit element of the source object is written to the
- * 8-bit Buffer Field of the Index destination object.
- */
-
- /*
- * Set the Obj_desc to the destination object and type check.
- */
- obj_desc = dest_desc->reference.object;
- if (obj_desc->common.type != ACPI_TYPE_BUFFER) {
- return (AE_AML_OPERAND_TYPE);
- }
-
- /*
- * The assignment of the individual elements will be slightly
- * different for each source type.
- */
-
- switch (val_desc->common.type) {
- /*
- * If the type is Integer, assign bytewise
- * This loop to assign each of the elements is somewhat
- * backward because of the Big Endian-ness of IA-64
- */
- case ACPI_TYPE_INTEGER:
- length = sizeof (ACPI_INTEGER);
- for (i = length; i != 0; i--) {
- value = (u8)(val_desc->integer.value >> (MUL_8 (i - 1)));
- obj_desc->buffer.pointer[dest_desc->reference.offset] = value;
- }
- break;
-
- /*
- * If the type is Buffer, the Length is in the structure.
- * Just loop through the elements and assign each one in turn.
- */
- case ACPI_TYPE_BUFFER:
- length = val_desc->buffer.length;
- for (i = 0; i < length; i++) {
- value = *(val_desc->buffer.pointer + i);
- obj_desc->buffer.pointer[dest_desc->reference.offset] = value;
- }
- break;
-
- /*
- * If the type is String, the Length is in the structure.
- * Just loop through the elements and assign each one in turn.
- */
- case ACPI_TYPE_STRING:
- length = val_desc->string.length;
- for (i = 0; i < length; i++) {
- value = *(val_desc->string.pointer + i);
- obj_desc->buffer.pointer[dest_desc->reference.offset] = value;
- }
- break;
-
- /*
- * If source is not a valid type so return an error.
- */
- default:
- status = AE_AML_OPERAND_TYPE;
- break;
- }
- break;
-
-
- default:
- status = AE_AML_OPERAND_TYPE;
- break;
- }
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_store_object_to_node
- *
- * PARAMETERS: *Source_desc - Value to be stored
- * *Node - Named object to receive the value
- *
- * RETURN: Status
- *
- * DESCRIPTION: Store the object to the named object.
- *
- * The Assignment of an object to a named object is handled here
- * The val passed in will replace the current value (if any)
- * with the input value.
- *
- * When storing into an object the data is converted to the
- * target object type then stored in the object. This means
- * that the target object type (for an initialized target) will
- * not be changed by a store operation.
- *
- * NOTE: the global lock is acquired early. This will result
- * in the global lock being held a bit longer. Also, if the
- * function fails during set up we may get the lock when we
- * don't really need it. I don't think we care.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_store_object_to_node (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_NAMESPACE_NODE *node,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *target_desc;
- OBJECT_TYPE_INTERNAL target_type = ACPI_TYPE_ANY;
-
-
- /*
- * Assuming the parameters were already validated
- */
- ACPI_ASSERT((node) && (source_desc));
-
-
- /*
- * Get current type of the node, and object attached to Node
- */
- target_type = acpi_ns_get_type (node);
- target_desc = acpi_ns_get_attached_object (node);
-
-
- /*
- * Resolve the source object to an actual value
- * (If it is a reference object)
- */
- status = acpi_aml_resolve_object (&source_desc, target_type, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /*
- * Do the actual store operation
- */
- switch (target_type) {
- case INTERNAL_TYPE_DEF_FIELD:
-
- /* Raw data copy for target types Integer/String/Buffer */
-
- status = acpi_aml_copy_data_to_named_field (source_desc, node);
- break;
-
-
- case ACPI_TYPE_INTEGER:
- case ACPI_TYPE_STRING:
- case ACPI_TYPE_BUFFER:
- case INTERNAL_TYPE_BANK_FIELD:
- case INTERNAL_TYPE_INDEX_FIELD:
- case ACPI_TYPE_FIELD_UNIT:
-
- /*
- * These target types are all of type Integer/String/Buffer, and
- * therefore support implicit conversion before the store.
- *
- * Copy and/or convert the source object to a new target object
- */
- status = acpi_aml_store_object (source_desc, target_type, &target_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * Store the new Target_desc as the new value of the Name, and set
- * the Name's type to that of the value being stored in it.
- * Source_desc reference count is incremented by Attach_object.
- */
- status = acpi_ns_attach_object (node, target_desc, target_type);
- break;
-
-
- default:
-
- /* No conversions for all other types. Just attach the source object */
-
- status = acpi_ns_attach_object (node, source_desc, source_desc->common.type);
-
- break;
- }
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_store_object_to_object
- *
- * PARAMETERS: *Source_desc - Value to be stored
- * *Dest_desc - Object to receive the value
- *
- * RETURN: Status
- *
- * DESCRIPTION: Store an object to another object.
- *
- * The Assignment of an object to another (not named) object
- * is handled here.
- * The val passed in will replace the current value (if any)
- * with the input value.
- *
- * When storing into an object the data is converted to the
- * target object type then stored in the object. This means
- * that the target object type (for an initialized target) will
- * not be changed by a store operation.
- *
- * This module allows destination types of Number, String,
- * and Buffer.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_store_object_to_object (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *dest_desc,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_STATUS status = AE_OK;
- OBJECT_TYPE_INTERNAL destination_type = dest_desc->common.type;
-
-
- /*
- * Assuming the parameters are valid!
- */
- ACPI_ASSERT((dest_desc) && (source_desc));
-
-
- /*
- * From this interface, we only support Integers/Strings/Buffers
- */
- switch (destination_type) {
- case ACPI_TYPE_INTEGER:
- case ACPI_TYPE_STRING:
- case ACPI_TYPE_BUFFER:
- break;
-
- default:
- return (AE_NOT_IMPLEMENTED);
- }
-
-
- /*
- * Resolve the source object to an actual value
- * (If it is a reference object)
- */
- status = acpi_aml_resolve_object (&source_desc, destination_type, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /*
- * Copy and/or convert the source object to the destination object
- */
- status = acpi_aml_store_object (source_desc, destination_type, &dest_desc, walk_state);
-
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/executer/amstoren.c b/reactos/drivers/bus/acpi/executer/amstoren.c
deleted file mode 100644
index aacf99e24f4..00000000000
--- a/reactos/drivers/bus/acpi/executer/amstoren.c
+++ /dev/null
@@ -1,252 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amstoren - AML Interpreter object store support,
- * Store to Node (namespace object)
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amstoren")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_resolve_object
- *
- * PARAMETERS: Source_desc_ptr - Pointer to the source object
- * Target_type - Current type of the target
- * Walk_state - Current walk state
- *
- * RETURN: Status, resolved object in Source_desc_ptr.
- *
- * DESCRIPTION: Resolve an object. If the object is a reference, dereference
- * it and return the actual object in the Source_desc_ptr.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_resolve_object (
- ACPI_OPERAND_OBJECT **source_desc_ptr,
- OBJECT_TYPE_INTERNAL target_type,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *source_desc = *source_desc_ptr;
- ACPI_STATUS status = AE_OK;
-
-
- /*
- * Ensure we have a Source that can be stored in the target
- */
- switch (target_type) {
-
- /* This case handles the "interchangeable" types Integer, String, and Buffer. */
-
- /*
- * These cases all require only Integers or values that
- * can be converted to Integers (Strings or Buffers)
- */
- case ACPI_TYPE_INTEGER:
- case ACPI_TYPE_FIELD_UNIT:
- case INTERNAL_TYPE_BANK_FIELD:
- case INTERNAL_TYPE_INDEX_FIELD:
-
- /*
- * Stores into a Field/Region or into a Buffer/String
- * are all essentially the same.
- */
- case ACPI_TYPE_STRING:
- case ACPI_TYPE_BUFFER:
- case INTERNAL_TYPE_DEF_FIELD:
-
- /*
- * If Source_desc is not a valid type, try to resolve it to one.
- */
- if ((source_desc->common.type != ACPI_TYPE_INTEGER) &&
- (source_desc->common.type != ACPI_TYPE_BUFFER) &&
- (source_desc->common.type != ACPI_TYPE_STRING)) {
- /*
- * Initially not a valid type, convert
- */
- status = acpi_aml_resolve_to_value (source_desc_ptr, walk_state);
- if (ACPI_SUCCESS (status) &&
- (source_desc->common.type != ACPI_TYPE_INTEGER) &&
- (source_desc->common.type != ACPI_TYPE_BUFFER) &&
- (source_desc->common.type != ACPI_TYPE_STRING)) {
- /*
- * Conversion successful but still not a valid type
- */
- status = AE_AML_OPERAND_TYPE;
- }
- }
- break;
-
-
- case INTERNAL_TYPE_ALIAS:
-
- /*
- * Aliases are resolved by Acpi_aml_prep_operands
- */
- status = AE_AML_INTERNAL;
- break;
-
-
- case ACPI_TYPE_PACKAGE:
- default:
-
- /*
- * All other types than Alias and the various Fields come here,
- * including the untyped case - ACPI_TYPE_ANY.
- */
- break;
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_store_object
- *
- * PARAMETERS: Source_desc - Object to store
- * Target_type - Current type of the target
- * Target_desc_ptr - Pointer to the target
- * Walk_state - Current walk state
- *
- * RETURN: Status
- *
- * DESCRIPTION: "Store" an object to another object. This may include
- * converting the source type to the target type (implicit
- * conversion), and a copy of the value of the source to
- * the target.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_store_object (
- ACPI_OPERAND_OBJECT *source_desc,
- OBJECT_TYPE_INTERNAL target_type,
- ACPI_OPERAND_OBJECT **target_desc_ptr,
- ACPI_WALK_STATE *walk_state)
-{
- ACPI_OPERAND_OBJECT *target_desc = *target_desc_ptr;
- ACPI_STATUS status = AE_OK;
-
-
- /*
- * Perform the "implicit conversion" of the source to the current type
- * of the target - As per the ACPI specification.
- *
- * If no conversion performed, Source_desc is left alone, otherwise it
- * is updated with a new object.
- */
- status = acpi_aml_convert_to_target_type (target_type, &source_desc, walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * We now have two objects of identical types, and we can perform a
- * copy of the *value* of the source object.
- */
- switch (target_type) {
- case ACPI_TYPE_ANY:
- case INTERNAL_TYPE_DEF_ANY:
-
- /*
- * The target namespace node is uninitialized (has no target object),
- * and will take on the type of the source object
- */
-
- *target_desc_ptr = source_desc;
- break;
-
-
- case ACPI_TYPE_INTEGER:
-
- target_desc->integer.value = source_desc->integer.value;
-
- /* Truncate value if we are executing from a 32-bit ACPI table */
-
- acpi_aml_truncate_for32bit_table (target_desc, walk_state);
- break;
-
-
- case ACPI_TYPE_FIELD_UNIT:
-
- status = acpi_aml_copy_integer_to_field_unit (source_desc, target_desc);
- break;
-
-
- case INTERNAL_TYPE_BANK_FIELD:
-
- status = acpi_aml_copy_integer_to_bank_field (source_desc, target_desc);
- break;
-
-
- case INTERNAL_TYPE_INDEX_FIELD:
-
- status = acpi_aml_copy_integer_to_index_field (source_desc, target_desc);
- break;
-
-
- case ACPI_TYPE_STRING:
-
- status = acpi_aml_copy_string_to_string (source_desc, target_desc);
- break;
-
-
- case ACPI_TYPE_BUFFER:
-
- status = acpi_aml_copy_buffer_to_buffer (source_desc, target_desc);
- break;
-
-
- case ACPI_TYPE_PACKAGE:
-
- /*
- * TBD: [Unhandled] Not real sure what to do here
- */
- status = AE_NOT_IMPLEMENTED;
- break;
-
-
- default:
-
- /*
- * All other types come here.
- */
- status = AE_NOT_IMPLEMENTED;
- break;
- }
-
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amstorob.c b/reactos/drivers/bus/acpi/executer/amstorob.c
deleted file mode 100644
index a0d25c731e4..00000000000
--- a/reactos/drivers/bus/acpi/executer/amstorob.c
+++ /dev/null
@@ -1,427 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amstorob - AML Interpreter object store support, store to object
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amstorob")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_copy_buffer_to_buffer
- *
- * PARAMETERS: Source_desc - Source object to copy
- * Target_desc - Destination object of the copy
- *
- * RETURN: Status
- *
- * DESCRIPTION: Copy a buffer object to another buffer object.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_copy_buffer_to_buffer (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc)
-{
- u32 length;
- u8 *buffer;
-
-
- /*
- * We know that Source_desc is a buffer by now
- */
- buffer = (u8 *) source_desc->buffer.pointer;
- length = source_desc->buffer.length;
-
- /*
- * If target is a buffer of length zero, allocate a new
- * buffer of the proper length
- */
- if (target_desc->buffer.length == 0) {
- target_desc->buffer.pointer = acpi_cm_allocate (length);
- if (!target_desc->buffer.pointer) {
- return (AE_NO_MEMORY);
- }
-
- target_desc->buffer.length = length;
- }
-
- /*
- * Buffer is a static allocation,
- * only place what will fit in the buffer.
- */
- if (length <= target_desc->buffer.length) {
- /* Clear existing buffer and copy in the new one */
-
- MEMSET(target_desc->buffer.pointer, 0, target_desc->buffer.length);
- MEMCPY(target_desc->buffer.pointer, buffer, length);
- }
-
- else {
- /*
- * Truncate the source, copy only what will fit
- */
- MEMCPY(target_desc->buffer.pointer, buffer, target_desc->buffer.length);
-
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_copy_string_to_string
- *
- * PARAMETERS: Source_desc - Source object to copy
- * Target_desc - Destination object of the copy
- *
- * RETURN: Status
- *
- * DESCRIPTION: Copy a String object to another String object
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_copy_string_to_string (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc)
-{
- u32 length;
- u8 *buffer;
-
-
- /*
- * We know that Source_desc is a string by now.
- */
- buffer = (u8 *) source_desc->string.pointer;
- length = source_desc->string.length;
-
- /*
- * Setting a string value replaces the old string
- */
- if (length < target_desc->string.length) {
- /* Clear old string and copy in the new one */
-
- MEMSET(target_desc->string.pointer, 0, target_desc->string.length);
- MEMCPY(target_desc->string.pointer, buffer, length);
- }
-
- else {
- /*
- * Free the current buffer, then allocate a buffer
- * large enough to hold the value
- */
- if (target_desc->string.pointer &&
- !acpi_tb_system_table_pointer (target_desc->string.pointer)) {
- /*
- * Only free if not a pointer into the DSDT
- */
- acpi_cm_free(target_desc->string.pointer);
- }
-
- target_desc->string.pointer = acpi_cm_allocate (length + 1);
- if (!target_desc->string.pointer) {
- return (AE_NO_MEMORY);
- }
- target_desc->string.length = length;
-
-
- MEMCPY(target_desc->string.pointer, buffer, length);
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_copy_integer_to_index_field
- *
- * PARAMETERS: Source_desc - Source object to copy
- * Target_desc - Destination object of the copy
- *
- * RETURN: Status
- *
- * DESCRIPTION: Write an Integer to an Index Field
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_copy_integer_to_index_field (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc)
-{
- ACPI_STATUS status;
- u8 locked;
-
-
- /*
- * Get the global lock if needed
- */
- locked = acpi_aml_acquire_global_lock (target_desc->index_field.lock_rule);
-
- /*
- * Set Index value to select proper Data register
- * perform the update (Set index)
- */
- status = acpi_aml_access_named_field (ACPI_WRITE,
- target_desc->index_field.index,
- &target_desc->index_field.value,
- sizeof (target_desc->index_field.value));
- if (ACPI_SUCCESS (status)) {
- /* Set_index was successful, next set Data value */
-
- status = acpi_aml_access_named_field (ACPI_WRITE,
- target_desc->index_field.data,
- &source_desc->integer.value,
- sizeof (source_desc->integer.value));
-
- }
-
-
-
- /*
- * Release global lock if we acquired it earlier
- */
- acpi_aml_release_global_lock (locked);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_copy_integer_to_bank_field
- *
- * PARAMETERS: Source_desc - Source object to copy
- * Target_desc - Destination object of the copy
- *
- * RETURN: Status
- *
- * DESCRIPTION: Write an Integer to a Bank Field
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_copy_integer_to_bank_field (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc)
-{
- ACPI_STATUS status;
- u8 locked;
-
-
- /*
- * Get the global lock if needed
- */
- locked = acpi_aml_acquire_global_lock (target_desc->index_field.lock_rule);
-
-
- /*
- * Set Bank value to select proper Bank
- * Perform the update (Set Bank Select)
- */
-
- status = acpi_aml_access_named_field (ACPI_WRITE,
- target_desc->bank_field.bank_select,
- &target_desc->bank_field.value,
- sizeof (target_desc->bank_field.value));
- if (ACPI_SUCCESS (status)) {
- /* Set bank select successful, set data value */
-
- status = acpi_aml_access_named_field (ACPI_WRITE,
- target_desc->bank_field.bank_select,
- &source_desc->bank_field.value,
- sizeof (source_desc->bank_field.value));
- }
-
-
-
- /*
- * Release global lock if we acquired it earlier
- */
- acpi_aml_release_global_lock (locked);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_copy_data_to_named_field
- *
- * PARAMETERS: Source_desc - Source object to copy
- * Node - Destination Namespace node
- *
- * RETURN: Status
- *
- * DESCRIPTION: Copy raw data to a Named Field. No implicit conversion
- * is performed on the source object
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_copy_data_to_named_field (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_NAMESPACE_NODE *node)
-{
- ACPI_STATUS status;
- u8 locked;
- u32 length;
- u8 *buffer;
-
-
- /*
- * Named fields (Create_xxx_field) - We don't perform any conversions on the
- * source operand, just use the raw data
- */
- switch (source_desc->common.type) {
- case ACPI_TYPE_INTEGER:
- buffer = (u8 *) &source_desc->integer.value;
- length = sizeof (source_desc->integer.value);
- break;
-
- case ACPI_TYPE_BUFFER:
- buffer = (u8 *) source_desc->buffer.pointer;
- length = source_desc->buffer.length;
- break;
-
- case ACPI_TYPE_STRING:
- buffer = (u8 *) source_desc->string.pointer;
- length = source_desc->string.length;
- break;
-
- default:
- return (AE_TYPE);
- }
-
- /*
- * Get the global lock if needed before the update
- * TBD: not needed!
- */
- locked = acpi_aml_acquire_global_lock (source_desc->field.lock_rule);
-
- status = acpi_aml_access_named_field (ACPI_WRITE,
- node, buffer, length);
-
- acpi_aml_release_global_lock (locked);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_copy_integer_to_field_unit
- *
- * PARAMETERS: Source_desc - Source object to copy
- * Target_desc - Destination object of the copy
- *
- * RETURN: Status
- *
- * DESCRIPTION: Write an Integer to a Field Unit.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_copy_integer_to_field_unit (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc)
-{
- ACPI_STATUS status = AE_OK;
- u8 *location = NULL;
- u32 mask;
- u32 new_value;
- u8 locked = FALSE;
-
-
- /*
- * If the Field Buffer and Index have not been previously evaluated,
- * evaluate them and save the results.
- */
- if (!(target_desc->common.flags & AOPOBJ_DATA_VALID)) {
- status = acpi_ds_get_field_unit_arguments (target_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
- }
-
- if ((!target_desc->field_unit.container ||
- ACPI_TYPE_BUFFER != target_desc->field_unit.container->common.type)) {
- return (AE_AML_INTERNAL);
- }
-
- /*
- * Get the global lock if needed
- */
- locked = acpi_aml_acquire_global_lock (target_desc->field_unit.lock_rule);
-
- /*
- * TBD: [Unhandled] REMOVE this limitation
- * Make sure the operation is within the limits of our implementation
- * this is not a Spec limitation!!
- */
- if (target_desc->field_unit.length + target_desc->field_unit.bit_offset > 32) {
- return (AE_NOT_IMPLEMENTED);
- }
-
- /* Field location is (base of buffer) + (byte offset) */
-
- location = target_desc->field_unit.container->buffer.pointer
- + target_desc->field_unit.offset;
-
- /*
- * Construct Mask with 1 bits where the field is,
- * 0 bits elsewhere
- */
- mask = ((u32) 1 << target_desc->field_unit.length) - ((u32)1
- << target_desc->field_unit.bit_offset);
-
- /* Zero out the field in the buffer */
-
- MOVE_UNALIGNED32_TO_32 (&new_value, location);
- new_value &= ~mask;
-
- /*
- * Shift and mask the new value into position,
- * and or it into the buffer.
- */
- new_value |= (source_desc->integer.value << target_desc->field_unit.bit_offset) &
- mask;
-
- /* Store back the value */
-
- MOVE_UNALIGNED32_TO_32 (location, &new_value);
-
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amsystem.c b/reactos/drivers/bus/acpi/executer/amsystem.c
deleted file mode 100644
index aff86885139..00000000000
--- a/reactos/drivers/bus/acpi/executer/amsystem.c
+++ /dev/null
@@ -1,323 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amsystem - Interface to OS services
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amsystem")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_wait_semaphore
- *
- * PARAMETERS: Semaphore - OSD semaphore to wait on
- * Timeout - Max time to wait
- *
- * RETURN: Status
- *
- * DESCRIPTION: Implements a semaphore wait with a check to see if the
- * semaphore is available immediately. If it is not, the
- * interpreter is released.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_system_wait_semaphore (
- ACPI_HANDLE semaphore,
- u32 timeout)
-{
- ACPI_STATUS status;
-
-
- status = acpi_os_wait_semaphore (semaphore, 1, 0);
- if (ACPI_SUCCESS (status)) {
- return (status);
- }
-
- if (status == AE_TIME) {
- /* We must wait, so unlock the interpreter */
-
- acpi_aml_exit_interpreter ();
-
- status = acpi_os_wait_semaphore (semaphore, 1, timeout);
-
- /* Reacquire the interpreter */
-
- status = acpi_aml_enter_interpreter ();
- if (ACPI_SUCCESS (status)) {
- /* Restore the timeout exception */
-
- status = AE_TIME;
- }
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_do_stall
- *
- * PARAMETERS: How_long - The amount of time to stall
- *
- * RETURN: None
- *
- * DESCRIPTION: Suspend running thread for specified amount of time.
- *
- ******************************************************************************/
-
-void
-acpi_aml_system_do_stall (
- u32 how_long)
-{
-
- if (how_long > 1000) /* 1 millisecond */ {
- /* Since this thread will sleep, we must release the interpreter */
-
- acpi_aml_exit_interpreter ();
-
- acpi_os_sleep_usec (how_long);
-
- /* And now we must get the interpreter again */
-
- acpi_aml_enter_interpreter ();
- }
-
- else {
- acpi_os_sleep_usec (how_long);
- }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_do_suspend
- *
- * PARAMETERS: How_long - The amount of time to suspend
- *
- * RETURN: None
- *
- * DESCRIPTION: Suspend running thread for specified amount of time.
- *
- ******************************************************************************/
-
-void
-acpi_aml_system_do_suspend (
- u32 how_long)
-{
- /* Since this thread will sleep, we must release the interpreter */
-
- acpi_aml_exit_interpreter ();
-
- acpi_os_sleep ((u16) (how_long / (u32) 1000),
- (u16) (how_long % (u32) 1000));
-
- /* And now we must get the interpreter again */
-
- acpi_aml_enter_interpreter ();
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_acquire_mutex
- *
- * PARAMETERS: *Time_desc - The 'time to delay' object descriptor
- * *Obj_desc - The object descriptor for this op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Provides an access point to perform synchronization operations
- * within the AML. This function will cause a lock to be generated
- * for the Mutex pointed to by Obj_desc.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_system_acquire_mutex (
- ACPI_OPERAND_OBJECT *time_desc,
- ACPI_OPERAND_OBJECT *obj_desc)
-{
- ACPI_STATUS status = AE_OK;
-
-
- if (!obj_desc) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Support for the _GL_ Mutex object -- go get the global lock
- */
-
- if (obj_desc->mutex.semaphore == acpi_gbl_global_lock_semaphore) {
- status = acpi_ev_acquire_global_lock ();
- return (status);
- }
-
- status = acpi_aml_system_wait_semaphore (obj_desc->mutex.semaphore,
- (u32) time_desc->integer.value);
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_release_mutex
- *
- * PARAMETERS: *Obj_desc - The object descriptor for this op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Provides an access point to perform synchronization operations
- * within the AML. This operation is a request to release a
- * previously acquired Mutex. If the Mutex variable is set then
- * it will be decremented.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_system_release_mutex (
- ACPI_OPERAND_OBJECT *obj_desc)
-{
- ACPI_STATUS status = AE_OK;
-
-
- if (!obj_desc) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Support for the _GL_ Mutex object -- release the global lock
- */
- if (obj_desc->mutex.semaphore == acpi_gbl_global_lock_semaphore) {
- acpi_ev_release_global_lock ();
- return (AE_OK);
- }
-
- status = acpi_os_signal_semaphore (obj_desc->mutex.semaphore, 1);
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_signal_event
- *
- * PARAMETERS: *Obj_desc - The object descriptor for this op
- *
- * RETURN: AE_OK
- *
- * DESCRIPTION: Provides an access point to perform synchronization operations
- * within the AML.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_system_signal_event (
- ACPI_OPERAND_OBJECT *obj_desc)
-{
- ACPI_STATUS status = AE_OK;
-
-
- if (obj_desc) {
- status = acpi_os_signal_semaphore (obj_desc->event.semaphore, 1);
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_wait_event
- *
- * PARAMETERS: *Time_desc - The 'time to delay' object descriptor
- * *Obj_desc - The object descriptor for this op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Provides an access point to perform synchronization operations
- * within the AML. This operation is a request to wait for an
- * event.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_system_wait_event (
- ACPI_OPERAND_OBJECT *time_desc,
- ACPI_OPERAND_OBJECT *obj_desc)
-{
- ACPI_STATUS status = AE_OK;
-
-
- if (obj_desc) {
- status = acpi_aml_system_wait_semaphore (obj_desc->event.semaphore,
- (u32) time_desc->integer.value);
- }
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_system_reset_event
- *
- * PARAMETERS: *Obj_desc - The object descriptor for this op
- *
- * RETURN: Status
- *
- * DESCRIPTION: Reset an event to a known state.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_system_reset_event (
- ACPI_OPERAND_OBJECT *obj_desc)
-{
- ACPI_STATUS status = AE_OK;
- void *temp_semaphore;
-
-
- /*
- * We are going to simply delete the existing semaphore and
- * create a new one!
- */
-
- status = acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT, 0, &temp_semaphore);
- if (ACPI_SUCCESS (status)) {
- acpi_os_delete_semaphore (obj_desc->event.semaphore);
- obj_desc->event.semaphore = temp_semaphore;
- }
-
- return (status);
-}
-
diff --git a/reactos/drivers/bus/acpi/executer/amutils.c b/reactos/drivers/bus/acpi/executer/amutils.c
deleted file mode 100644
index 28333f8c1d9..00000000000
--- a/reactos/drivers/bus/acpi/executer/amutils.c
+++ /dev/null
@@ -1,359 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amutils - interpreter/scanner utilities
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amutils")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_enter_interpreter
- *
- * PARAMETERS: None
- *
- * DESCRIPTION: Enter the interpreter execution region
- * TBD: should be a macro
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_enter_interpreter (void)
-{
- ACPI_STATUS status;
-
-
- status = acpi_cm_acquire_mutex (ACPI_MTX_EXECUTE);
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_exit_interpreter
- *
- * PARAMETERS: None
- *
- * DESCRIPTION: Exit the interpreter execution region
- *
- * Cases where the interpreter is unlocked:
- * 1) Completion of the execution of a control method
- * 2) Method blocked on a Sleep() AML opcode
- * 3) Method blocked on an Acquire() AML opcode
- * 4) Method blocked on a Wait() AML opcode
- * 5) Method blocked to acquire the global lock
- * 6) Method blocked to execute a serialized control method that is
- * already executing
- * 7) About to invoke a user-installed opregion handler
- *
- * TBD: should be a macro
- *
- ******************************************************************************/
-
-void
-acpi_aml_exit_interpreter (void)
-{
-
- acpi_cm_release_mutex (ACPI_MTX_EXECUTE);
-
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_validate_object_type
- *
- * PARAMETERS: Type Object type to validate
- *
- * DESCRIPTION: Determine if a type is a valid ACPI object type
- *
- ******************************************************************************/
-
-u8
-acpi_aml_validate_object_type (
- ACPI_OBJECT_TYPE type)
-{
-
- if ((type > ACPI_TYPE_MAX && type < INTERNAL_TYPE_BEGIN) ||
- (type > INTERNAL_TYPE_MAX)) {
- return (FALSE);
- }
-
- return (TRUE);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_truncate_for32bit_table
- *
- * PARAMETERS: Obj_desc - Object to be truncated
- * Walk_state - Current walk state
- * (A method must be executing)
- *
- * RETURN: none
- *
- * DESCRIPTION: Truncate a number to 32-bits if the currently executing method
- * belongs to a 32-bit ACPI table.
- *
- ******************************************************************************/
-
-void
-acpi_aml_truncate_for32bit_table (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state)
-{
-
- /*
- * Object must be a valid number and we must be executing
- * a control method
- */
-
- if ((!obj_desc) ||
- (obj_desc->common.type != ACPI_TYPE_INTEGER) ||
- (!walk_state->method_node)) {
- return;
- }
-
- if (walk_state->method_node->flags & ANOBJ_DATA_WIDTH_32) {
- /*
- * We are running a method that exists in a 32-bit ACPI table.
- * Truncate the value to 32 bits by zeroing out the upper 32-bit field
- */
- obj_desc->integer.value &= (ACPI_INTEGER) ACPI_UINT32_MAX;
- }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_acquire_global_lock
- *
- * PARAMETERS: Rule - Lock rule: Always_lock, Never_lock
- *
- * RETURN: TRUE/FALSE indicating whether the lock was actually acquired
- *
- * DESCRIPTION: Obtain the global lock and keep track of this fact via two
- * methods. A global variable keeps the state of the lock, and
- * the state is returned to the caller.
- *
- ******************************************************************************/
-
-u8
-acpi_aml_acquire_global_lock (
- u32 rule)
-{
- u8 locked = FALSE;
- ACPI_STATUS status;
-
-
- /* Only attempt lock if the Rule says so */
-
- if (rule == (u32) GLOCK_ALWAYS_LOCK) {
- /* We should attempt to get the lock */
-
- status = acpi_ev_acquire_global_lock ();
- if (ACPI_SUCCESS (status)) {
- locked = TRUE;
- }
-
- }
-
- return (locked);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_release_global_lock
- *
- * PARAMETERS: Locked_by_me - Return value from corresponding call to
- * Acquire_global_lock.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Release the global lock if it is locked.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_release_global_lock (
- u8 locked_by_me)
-{
-
-
- /* Only attempt unlock if the caller locked it */
-
- if (locked_by_me) {
- /* OK, now release the lock */
-
- acpi_ev_release_global_lock ();
- }
-
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_digits_needed
- *
- * PARAMETERS: val - Value to be represented
- * base - Base of representation
- *
- * RETURN: the number of digits needed to represent val in base
- *
- ******************************************************************************/
-
-u32
-acpi_aml_digits_needed (
- ACPI_INTEGER val,
- u32 base)
-{
- u32 num_digits = 0;
-
-
- if (base < 1) {
- REPORT_ERROR (("Aml_digits_needed: Internal error - Invalid base\n"));
- }
-
- else {
- for (num_digits = 1; (val = ACPI_DIVIDE (val,base)); ++num_digits) { ; }
- }
-
- return (num_digits);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: ntohl
- *
- * PARAMETERS: Value - Value to be converted
- *
- * DESCRIPTION: Convert a 32-bit value to big-endian (swap the bytes)
- *
- ******************************************************************************/
-
-static u32
-_ntohl (
- u32 value)
-{
- union {
- u32 value;
- u8 bytes[4];
- } out;
-
- union {
- u32 value;
- u8 bytes[4];
- } in;
-
-
- in.value = value;
-
- out.bytes[0] = in.bytes[3];
- out.bytes[1] = in.bytes[2];
- out.bytes[2] = in.bytes[1];
- out.bytes[3] = in.bytes[0];
-
- return (out.value);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_eisa_id_to_string
- *
- * PARAMETERS: Numeric_id - EISA ID to be converted
- * Out_string - Where to put the converted string (8 bytes)
- *
- * DESCRIPTION: Convert a numeric EISA ID to string representation
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_eisa_id_to_string (
- u32 numeric_id,
- NATIVE_CHAR *out_string)
-{
- u32 id;
-
- /* swap to big-endian to get contiguous bits */
-
- id = _ntohl (numeric_id);
-
- out_string[0] = (char) ('@' + ((id >> 26) & 0x1f));
- out_string[1] = (char) ('@' + ((id >> 21) & 0x1f));
- out_string[2] = (char) ('@' + ((id >> 16) & 0x1f));
- out_string[3] = acpi_gbl_hex_to_ascii[(id >> 12) & 0xf];
- out_string[4] = acpi_gbl_hex_to_ascii[(id >> 8) & 0xf];
- out_string[5] = acpi_gbl_hex_to_ascii[(id >> 4) & 0xf];
- out_string[6] = acpi_gbl_hex_to_ascii[id & 0xf];
- out_string[7] = 0;
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_unsigned_integer_to_string
- *
- * PARAMETERS: Value - Value to be converted
- * Out_string - Where to put the converted string (8 bytes)
- *
- * RETURN: Convert a number to string representation
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_unsigned_integer_to_string (
- ACPI_INTEGER value,
- NATIVE_CHAR *out_string)
-{
- u32 count;
- u32 digits_needed;
-
-
- digits_needed = acpi_aml_digits_needed (value, 10);
-
- out_string[digits_needed] = '\0';
-
- for (count = digits_needed; count > 0; count--) {
- out_string[count-1] = (NATIVE_CHAR) ('0' + (ACPI_MODULO (value, 10)));
- value = ACPI_DIVIDE (value, 10);
- }
-
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/executer/amxface.c b/reactos/drivers/bus/acpi/executer/amxface.c
deleted file mode 100644
index 7ce20ddd6b4..00000000000
--- a/reactos/drivers/bus/acpi/executer/amxface.c
+++ /dev/null
@@ -1,98 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: amxface - External interpreter interfaces
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_EXECUTER
- MODULE_NAME ("amxface")
-
-
-/*
- * DEFINE_AML_GLOBALS is tested in amlcode.h
- * to determine whether certain global names should be "defined" or only
- * "declared" in the current compilation. This enhances maintainability
- * by enabling a single header file to embody all knowledge of the names
- * in question.
- *
- * Exactly one module of any executable should #define DEFINE_GLOBALS
- * before #including the header files which use this convention. The
- * names in question will be defined and initialized in that module,
- * and declared as extern in all other modules which #include those
- * header files.
- */
-
-#define DEFINE_AML_GLOBALS
-#include "amlcode.h"
-#include "acparser.h"
-#include "acnamesp.h"
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_aml_execute_method
- *
- * PARAMETERS: Pcode - Pointer to the pcode stream
- * Pcode_length - Length of pcode that comprises the method
- * **Params - List of parameters to pass to method,
- * terminated by NULL. Params itself may be
- * NULL if no parameters are being passed.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute a control method
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_aml_execute_method (
- ACPI_NAMESPACE_NODE *method_node,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_obj_desc)
-{
- ACPI_STATUS status;
-
-
- /*
- * The point here is to lock the interpreter and call the low
- * level execute.
- */
-
- status = acpi_aml_enter_interpreter ();
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- status = acpi_psx_execute (method_node, params, return_obj_desc);
-
- acpi_aml_exit_interpreter ();
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/hardware/hwacpi.c b/reactos/drivers/bus/acpi/hardware/hwacpi.c
deleted file mode 100644
index b1504fa17c6..00000000000
--- a/reactos/drivers/bus/acpi/hardware/hwacpi.c
+++ /dev/null
@@ -1,303 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: hwacpi - ACPI Hardware Initialization/Mode Interface
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_HARDWARE
- MODULE_NAME ("hwacpi")
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_initialize
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Initialize and validate various ACPI registers
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_hw_initialize (
- void)
-{
- ACPI_STATUS status = AE_OK;
- u32 index;
-
-
- /* We must have the ACPI tables by the time we get here */
-
- if (!acpi_gbl_FADT) {
- acpi_gbl_restore_acpi_chipset = FALSE;
-
- return (AE_NO_ACPI_TABLES);
- }
-
- /* Must support *some* mode! */
-/*
- if (!(System_flags & SYS_MODES_MASK))
- {
- Restore_acpi_chipset = FALSE;
-
- return (AE_ERROR);
- }
-
-*/
-
-
- switch (acpi_gbl_system_flags & SYS_MODES_MASK) {
- /* Identify current ACPI/legacy mode */
-
- case (SYS_MODE_ACPI):
-
- acpi_gbl_original_mode = SYS_MODE_ACPI;
- break;
-
-
- case (SYS_MODE_LEGACY):
-
- acpi_gbl_original_mode = SYS_MODE_LEGACY;
- break;
-
-
- case (SYS_MODE_ACPI | SYS_MODE_LEGACY):
-
- if (acpi_hw_get_mode () == SYS_MODE_ACPI) {
- acpi_gbl_original_mode = SYS_MODE_ACPI;
- }
- else {
- acpi_gbl_original_mode = SYS_MODE_LEGACY;
- }
-
- break;
- }
-
-
- if (acpi_gbl_system_flags & SYS_MODE_ACPI) {
- /* Target system supports ACPI mode */
-
- /*
- * The purpose of this code is to save the initial state
- * of the ACPI event enable registers. An exit function will be
- * registered which will restore this state when the application
- * exits. The exit function will also clear all of the ACPI event
- * status bits prior to restoring the original mode.
- *
- * The location of the PM1a_evt_blk enable registers is defined as the
- * base of PM1a_evt_blk + DIV_2(PM1a_evt_blk_length). Since the spec further
- * fully defines the PM1a_evt_blk to be a total of 4 bytes, the offset
- * for the enable registers is always 2 from the base. It is hard
- * coded here. If this changes in the spec, this code will need to
- * be modified. The PM1b_evt_blk behaves as expected.
- */
-
- acpi_gbl_pm1_enable_register_save = (u16) acpi_hw_register_read (ACPI_MTX_LOCK, PM1_EN);
-
-
- /*
- * The GPEs behave similarly, except that the length of the register
- * block is not fixed, so the buffer must be allocated with malloc
- */
-
- if (ACPI_VALID_ADDRESS (acpi_gbl_FADT->Xgpe0blk.address) &&
- acpi_gbl_FADT->gpe0blk_len) {
- /* GPE0 specified in FADT */
-
- acpi_gbl_gpe0enable_register_save =
- acpi_cm_allocate (DIV_2 (acpi_gbl_FADT->gpe0blk_len));
- if (!acpi_gbl_gpe0enable_register_save) {
- return (AE_NO_MEMORY);
- }
-
- /* Save state of GPE0 enable bits */
-
- for (index = 0; index < DIV_2 (acpi_gbl_FADT->gpe0blk_len); index++) {
- acpi_gbl_gpe0enable_register_save[index] =
- (u8) acpi_hw_register_read (ACPI_MTX_LOCK, GPE0_EN_BLOCK | index);
- }
- }
-
- else {
- acpi_gbl_gpe0enable_register_save = NULL;
- }
-
- if (ACPI_VALID_ADDRESS (acpi_gbl_FADT->Xgpe1_blk.address) &&
- acpi_gbl_FADT->gpe1_blk_len) {
- /* GPE1 defined */
-
- acpi_gbl_gpe1_enable_register_save =
- acpi_cm_allocate (DIV_2 (acpi_gbl_FADT->gpe1_blk_len));
- if (!acpi_gbl_gpe1_enable_register_save) {
- return (AE_NO_MEMORY);
- }
-
- /* save state of GPE1 enable bits */
-
- for (index = 0; index < DIV_2 (acpi_gbl_FADT->gpe1_blk_len); index++) {
- acpi_gbl_gpe1_enable_register_save[index] =
- (u8) acpi_hw_register_read (ACPI_MTX_LOCK, GPE1_EN_BLOCK | index);
- }
- }
-
- else {
- acpi_gbl_gpe1_enable_register_save = NULL;
- }
- }
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_set_mode
- *
- * PARAMETERS: Mode - SYS_MODE_ACPI or SYS_MODE_LEGACY
- *
- * RETURN: Status
- *
- * DESCRIPTION: Transitions the system into the requested mode or does nothing
- * if the system is already in that mode.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_hw_set_mode (
- u32 mode)
-{
-
- ACPI_STATUS status = AE_NO_HARDWARE_RESPONSE;
-
-
- if (mode == SYS_MODE_ACPI) {
- /* BIOS should have disabled ALL fixed and GP events */
-
- acpi_os_out8 (acpi_gbl_FADT->smi_cmd, acpi_gbl_FADT->acpi_enable);
- }
-
- else if (mode == SYS_MODE_LEGACY) {
- /*
- * BIOS should clear all fixed status bits and restore fixed event
- * enable bits to default
- */
-
- acpi_os_out8 (acpi_gbl_FADT->smi_cmd, acpi_gbl_FADT->acpi_disable);
- }
-
- if (acpi_hw_get_mode () == mode) {
- status = AE_OK;
- }
-
- return (status);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_get_mode
- *
- * PARAMETERS: none
- *
- * RETURN: SYS_MODE_ACPI or SYS_MODE_LEGACY
- *
- * DESCRIPTION: Return current operating state of system. Determined by
- * querying the SCI_EN bit.
- *
- ******************************************************************************/
-
-u32
-acpi_hw_get_mode (void)
-{
-
-
- if (acpi_hw_register_bit_access (ACPI_READ, ACPI_MTX_LOCK, SCI_EN)) {
- return (SYS_MODE_ACPI);
- }
- else {
- return (SYS_MODE_LEGACY);
- }
-}
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_get_mode_capabilities
- *
- * PARAMETERS: none
- *
- * RETURN: logical OR of SYS_MODE_ACPI and SYS_MODE_LEGACY determined at initial
- * system state.
- *
- * DESCRIPTION: Returns capablities of system
- *
- ******************************************************************************/
-
-u32
-acpi_hw_get_mode_capabilities (void)
-{
-
-
- if (!(acpi_gbl_system_flags & SYS_MODES_MASK)) {
- if (acpi_hw_get_mode () == SYS_MODE_LEGACY) {
- /*
- * Assume that if this call is being made, Acpi_init has been called
- * and ACPI support has been established by the presence of the
- * tables. Therefore since we're in SYS_MODE_LEGACY, the system
- * must support both modes
- */
-
- acpi_gbl_system_flags |= (SYS_MODE_ACPI | SYS_MODE_LEGACY);
- }
-
- else {
- /* TBD: [Investigate] !!! this may be unsafe... */
- /*
- * system is is ACPI mode, so try to switch back to LEGACY to see if
- * it is supported
- */
- acpi_hw_set_mode (SYS_MODE_LEGACY);
-
- if (acpi_hw_get_mode () == SYS_MODE_LEGACY) {
- /* Now in SYS_MODE_LEGACY, so both are supported */
-
- acpi_gbl_system_flags |= (SYS_MODE_ACPI | SYS_MODE_LEGACY);
- acpi_hw_set_mode (SYS_MODE_ACPI);
- }
-
- else {
- /* Still in SYS_MODE_ACPI so this must be an ACPI only system */
-
- acpi_gbl_system_flags |= SYS_MODE_ACPI;
- }
- }
- }
-
- return (acpi_gbl_system_flags & SYS_MODES_MASK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/hardware/hwgpe.c b/reactos/drivers/bus/acpi/hardware/hwgpe.c
deleted file mode 100644
index 9d7ed9e6ebd..00000000000
--- a/reactos/drivers/bus/acpi/hardware/hwgpe.c
+++ /dev/null
@@ -1,204 +0,0 @@
-
-/******************************************************************************
- *
- * Module Name: hwgpe - Low level GPE enable/disable/clear functions
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include
-
-#define _COMPONENT ACPI_HARDWARE
- MODULE_NAME ("hwgpe")
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_enable_gpe
- *
- * PARAMETERS: Gpe_number - The GPE
- *
- * RETURN: None
- *
- * DESCRIPTION: Enable a single GPE.
- *
- ******************************************************************************/
-
-void
-acpi_hw_enable_gpe (
- u32 gpe_number)
-{
- u8 in_byte;
- u32 register_index;
- u8 bit_mask;
-
- /*
- * Translate GPE number to index into global registers array.
- */
- register_index = acpi_gbl_gpe_valid[gpe_number];
-
- /*
- * Figure out the bit offset for this GPE within the target register.
- */
- bit_mask = acpi_gbl_decode_to8bit [MOD_8 (gpe_number)];
-
- /*
- * Read the current value of the register, set the appropriate bit
- * to enable the GPE, and write out the new register.
- */
- in_byte = acpi_os_in8 (acpi_gbl_gpe_registers[register_index].enable_addr);
- acpi_os_out8 (acpi_gbl_gpe_registers[register_index].enable_addr,
- (u8)(in_byte | bit_mask));
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_disable_gpe
- *
- * PARAMETERS: Gpe_number - The GPE
- *
- * RETURN: None
- *
- * DESCRIPTION: Disable a single GPE.
- *
- ******************************************************************************/
-
-void
-acpi_hw_disable_gpe (
- u32 gpe_number)
-{
- u8 in_byte;
- u32 register_index;
- u8 bit_mask;
-
- /*
- * Translate GPE number to index into global registers array.
- */
- register_index = acpi_gbl_gpe_valid[gpe_number];
-
- /*
- * Figure out the bit offset for this GPE within the target register.
- */
- bit_mask = acpi_gbl_decode_to8bit [MOD_8 (gpe_number)];
-
- /*
- * Read the current value of the register, clear the appropriate bit,
- * and write out the new register value to disable the GPE.
- */
- in_byte = acpi_os_in8 (acpi_gbl_gpe_registers[register_index].enable_addr);
- acpi_os_out8 (acpi_gbl_gpe_registers[register_index].enable_addr,
- (u8)(in_byte & ~bit_mask));
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_clear_gpe
- *
- * PARAMETERS: Gpe_number - The GPE
- *
- * RETURN: None
- *
- * DESCRIPTION: Clear a single GPE.
- *
- ******************************************************************************/
-
-void
-acpi_hw_clear_gpe (
- u32 gpe_number)
-{
- u32 register_index;
- u8 bit_mask;
-
- /*
- * Translate GPE number to index into global registers array.
- */
- register_index = acpi_gbl_gpe_valid[gpe_number];
-
- /*
- * Figure out the bit offset for this GPE within the target register.
- */
- bit_mask = acpi_gbl_decode_to8bit [MOD_8 (gpe_number)];
-
- /*
- * Write a one to the appropriate bit in the status register to
- * clear this GPE.
- */
- acpi_os_out8 (acpi_gbl_gpe_registers[register_index].status_addr, bit_mask);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_get_gpe_status
- *
- * PARAMETERS: Gpe_number - The GPE
- *
- * RETURN: None
- *
- * DESCRIPTION: Return the status of a single GPE.
- *
- ******************************************************************************/
-
-void
-acpi_hw_get_gpe_status (
- u32 gpe_number,
- ACPI_EVENT_STATUS *event_status)
-{
- u8 in_byte = 0;
- u32 register_index = 0;
- u8 bit_mask = 0;
-
- if (!event_status) {
- return;
- }
-
- (*event_status) = 0;
-
- /*
- * Translate GPE number to index into global registers array.
- */
- register_index = acpi_gbl_gpe_valid[gpe_number];
-
- /*
- * Figure out the bit offset for this GPE within the target register.
- */
- bit_mask = acpi_gbl_decode_to8bit [MOD_8 (gpe_number)];
-
- /*
- * Enabled?:
- */
- in_byte = acpi_os_in8 (acpi_gbl_gpe_registers[register_index].enable_addr);
-
- if (bit_mask & in_byte) {
- (*event_status) |= ACPI_EVENT_FLAG_ENABLED;
- }
-
- /*
- * Set?
- */
- in_byte = acpi_os_in8 (acpi_gbl_gpe_registers[register_index].status_addr);
-
- if (bit_mask & in_byte) {
- (*event_status) |= ACPI_EVENT_FLAG_SET;
- }
-}
diff --git a/reactos/drivers/bus/acpi/hardware/hwregs.c b/reactos/drivers/bus/acpi/hardware/hwregs.c
deleted file mode 100644
index 658d5c8167d..00000000000
--- a/reactos/drivers/bus/acpi/hardware/hwregs.c
+++ /dev/null
@@ -1,964 +0,0 @@
-
-/*******************************************************************************
- *
- * Module Name: hwregs - Read/write access functions for the various ACPI
- * control and status registers.
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_HARDWARE
- MODULE_NAME ("hwregs")
-
-
-/* This matches the #defines in actypes.h. */
-
-NATIVE_CHAR *sleep_state_table[] = {"\\_S0_","\\_S1_","\\_S2_","\\_S3_",
- "\\_S4_","\\_S5_","\\_S4_b"};
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_hw_get_bit_shift
- *
- * PARAMETERS: Mask - Input mask to determine bit shift from.
- * Must have at least 1 bit set.
- *
- * RETURN: Bit location of the lsb of the mask
- *
- * DESCRIPTION: Returns the bit number for the low order bit that's set.
- *
- ******************************************************************************/
-
-u32
-acpi_hw_get_bit_shift (
- u32 mask) {
- u32 shift;
-
-
- for (shift = 0; ((mask >> shift) & 1) == 0; shift++) { ; }
-
- return (shift);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_hw_clear_acpi_status
- *
- * PARAMETERS: none
- *
- * RETURN: none
- *
- * DESCRIPTION: Clears all fixed and general purpose status bits
- *
- ******************************************************************************/
-
-void
-acpi_hw_clear_acpi_status (void)
-{
- u16 gpe_length;
- u16 index;
-
-
- acpi_cm_acquire_mutex (ACPI_MTX_HARDWARE);
-
- acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, PM1_STS, ALL_FIXED_STS_BITS);
-
-
- if (ACPI_VALID_ADDRESS (acpi_gbl_FADT->Xpm1b_evt_blk.address)) {
- acpi_os_out16 ((ACPI_IO_ADDRESS) ACPI_GET_ADDRESS (acpi_gbl_FADT->Xpm1b_evt_blk.address),
- (u16) ALL_FIXED_STS_BITS);
- }
-
- /* now clear the GPE Bits */
-
- if (acpi_gbl_FADT->gpe0blk_len) {
- gpe_length = (u16) DIV_2 (acpi_gbl_FADT->gpe0blk_len);
-
- for (index = 0; index < gpe_length; index++) {
- acpi_os_out8 ((ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (acpi_gbl_FADT->Xgpe0blk.address) + index),
- (u8) 0xff);
- }
- }
-
- if (acpi_gbl_FADT->gpe1_blk_len) {
- gpe_length = (u16) DIV_2 (acpi_gbl_FADT->gpe1_blk_len);
-
- for (index = 0; index < gpe_length; index++) {
- acpi_os_out8 ((ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (acpi_gbl_FADT->Xgpe1_blk.address) + index),
- (u8) 0xff);
- }
- }
-
- acpi_cm_release_mutex (ACPI_MTX_HARDWARE);
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_hw_obtain_sleep_type_register_data
- *
- * PARAMETERS: Sleep_state - Numeric state requested
- * *Slp_Typ_a - Pointer to byte to receive SLP_TYPa value
- * *Slp_Typ_b - Pointer to byte to receive SLP_TYPb value
- *
- * RETURN: Status - ACPI status
- *
- * DESCRIPTION: Acpi_hw_obtain_sleep_type_register_data() obtains the SLP_TYP and
- * SLP_TYPb values for the sleep state requested.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_hw_obtain_sleep_type_register_data (
- u8 sleep_state,
- u8 *slp_typ_a,
- u8 *slp_typ_b)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- /*
- * Validate parameters
- */
-
- if ((sleep_state > ACPI_S_STATES_MAX) ||
- !slp_typ_a || !slp_typ_b) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Acpi_evaluate the namespace object containing the values for this state
- */
-
- status = acpi_ns_evaluate_by_name (sleep_state_table[sleep_state], NULL, &obj_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- if (!obj_desc) {
- REPORT_ERROR (("Missing Sleep State object\n"));
- return (AE_NOT_EXIST);
- }
-
- /*
- * We got something, now ensure it is correct. The object must
- * be a package and must have at least 2 numeric values as the
- * two elements
- */
-
- /* Even though Acpi_evaluate_object resolves package references,
- * Ns_evaluate dpesn't. So, we do it here.
- */
- status = acpi_cm_resolve_package_references(obj_desc);
-
- if (obj_desc->package.count < 2) {
- /* Must have at least two elements */
-
- REPORT_ERROR (("Sleep State package does not have at least two elements\n"));
- status = AE_ERROR;
- }
-
- else if (((obj_desc->package.elements[0])->common.type !=
- ACPI_TYPE_INTEGER) ||
- ((obj_desc->package.elements[1])->common.type !=
- ACPI_TYPE_INTEGER)) {
- /* Must have two */
-
- REPORT_ERROR (("Sleep State package elements are not both of type Number\n"));
- status = AE_ERROR;
- }
-
- else {
- /*
- * Valid _Sx_ package size, type, and value
- */
- *slp_typ_a = (u8) (obj_desc->package.elements[0])->integer.value;
-
- *slp_typ_b = (u8) (obj_desc->package.elements[1])->integer.value;
- }
-
-
-
- acpi_cm_remove_reference (obj_desc);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_hw_register_bit_access
- *
- * PARAMETERS: Read_write - Either ACPI_READ or ACPI_WRITE.
- * Use_lock - Lock the hardware
- * Register_id - index of ACPI Register to access
- * Value - (only used on write) value to write to the
- * Register. Shifted all the way right.
- *
- * RETURN: Value written to or read from specified Register. This value
- * is shifted all the way right.
- *
- * DESCRIPTION: Generic ACPI Register read/write function.
- *
- ******************************************************************************/
-
-u32
-acpi_hw_register_bit_access (
- NATIVE_UINT read_write,
- u8 use_lock,
- u32 register_id,
- ...) /* Value (only used on write) */
-{
- u32 register_value = 0;
- u32 mask = 0;
- u32 value = 0;
-
-
- if (read_write == ACPI_WRITE) {
- va_list marker;
-
- va_start (marker, register_id);
- value = va_arg (marker, u32);
- va_end (marker);
- }
-
- if (ACPI_MTX_LOCK == use_lock) {
- acpi_cm_acquire_mutex (ACPI_MTX_HARDWARE);
- }
-
- /*
- * Decode the Register ID
- * Register id = Register block id | bit id
- *
- * Check bit id to fine locate Register offset.
- * check Mask to determine Register offset, and then read-write.
- */
-
- switch (REGISTER_BLOCK_ID(register_id)) {
- case PM1_STS:
-
- switch (register_id) {
- case TMR_STS:
- mask = TMR_STS_MASK;
- break;
-
- case BM_STS:
- mask = BM_STS_MASK;
- break;
-
- case GBL_STS:
- mask = GBL_STS_MASK;
- break;
-
- case PWRBTN_STS:
- mask = PWRBTN_STS_MASK;
- break;
-
- case SLPBTN_STS:
- mask = SLPBTN_STS_MASK;
- break;
-
- case RTC_STS:
- mask = RTC_STS_MASK;
- break;
-
- case WAK_STS:
- mask = WAK_STS_MASK;
- break;
-
- default:
- mask = 0;
- break;
- }
-
- register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, PM1_STS);
-
- if (read_write == ACPI_WRITE) {
- /*
- * Status Registers are different from the rest. Clear by
- * writing 1, writing 0 has no effect. So, the only relevent
- * information is the single bit we're interested in, all
- * others should be written as 0 so they will be left
- * unchanged
- */
-
- value <<= acpi_hw_get_bit_shift (mask);
- value &= mask;
-
- if (value) {
- acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, PM1_STS, (u16) value);
-
- register_value = 0;
- }
- }
-
- break;
-
-
- case PM1_EN:
-
- switch (register_id) {
- case TMR_EN:
- mask = TMR_EN_MASK;
- break;
-
- case GBL_EN:
- mask = GBL_EN_MASK;
- break;
-
- case PWRBTN_EN:
- mask = PWRBTN_EN_MASK;
- break;
-
- case SLPBTN_EN:
- mask = SLPBTN_EN_MASK;
- break;
-
- case RTC_EN:
- mask = RTC_EN_MASK;
- break;
-
- default:
- mask = 0;
- break;
- }
-
- register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, PM1_EN);
-
- if (read_write == ACPI_WRITE) {
- register_value &= ~mask;
- value <<= acpi_hw_get_bit_shift (mask);
- value &= mask;
- register_value |= value;
-
- acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK, PM1_EN, (u16) register_value);
- }
-
- break;
-
-
- case PM1_CONTROL:
-
- switch (register_id) {
- case SCI_EN:
- mask = SCI_EN_MASK;
- break;
-
- case BM_RLD:
- mask = BM_RLD_MASK;
- break;
-
- case GBL_RLS:
- mask = GBL_RLS_MASK;
- break;
-
- case SLP_TYPE_A:
- case SLP_TYPE_B:
- mask = SLP_TYPE_X_MASK;
- break;
-
- case SLP_EN:
- mask = SLP_EN_MASK;
- break;
-
- default:
- mask = 0;
- break;
- }
-
-
- /*
- * Read the PM1 Control register.
- * Note that at this level, the fact that there are actually TWO
- * registers (A and B) and that B may not exist, are abstracted.
- */
- register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, PM1_CONTROL);
-
- if (read_write == ACPI_WRITE) {
- register_value &= ~mask;
- value <<= acpi_hw_get_bit_shift (mask);
- value &= mask;
- register_value |= value;
-
- /*
- * SLP_TYPE_x Registers are written differently
- * than any other control Registers with
- * respect to A and B Registers. The value
- * for A may be different than the value for B
- *
- * Therefore, pass the Register_id, not just generic PM1_CONTROL,
- * because we need to do different things. Yuck.
- */
-
- acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
- register_id, (u16) register_value);
- }
- break;
-
-
- case PM2_CONTROL:
-
- switch (register_id) {
- case ARB_DIS:
- mask = ARB_DIS_MASK;
- break;
-
- default:
- mask = 0;
- break;
- }
-
- register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, PM2_CONTROL);
-
- if (read_write == ACPI_WRITE) {
- register_value &= ~mask;
- value <<= acpi_hw_get_bit_shift (mask);
- value &= mask;
- register_value |= value;
-
- acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
- PM2_CONTROL, (u8) (register_value));
- }
- break;
-
-
- case PM_TIMER:
-
- mask = TMR_VAL_MASK;
- register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK,
- PM_TIMER);
- break;
-
-
- case GPE1_EN_BLOCK:
- case GPE1_STS_BLOCK:
- case GPE0_EN_BLOCK:
- case GPE0_STS_BLOCK:
-
- /* Determine the bit to be accessed
- *
- * (u32) Register_id:
- * 31 24 16 8 0
- * +--------+--------+--------+--------+
- * | gpe_block_id | gpe_bit_number |
- * +--------+--------+--------+--------+
- *
- * gpe_block_id is one of GPE[01]_EN_BLOCK and GPE[01]_STS_BLOCK
- * gpe_bit_number is relative from the gpe_block (0x00~0xFF)
- */
-
- mask = REGISTER_BIT_ID(register_id); /* gpe_bit_number */
- register_id = REGISTER_BLOCK_ID(register_id) | (mask >> 3);
- mask = acpi_gbl_decode_to8bit [mask % 8];
-
- /*
- * The base address of the GPE 0 Register Block
- * Plus 1/2 the length of the GPE 0 Register Block
- * The enable Register is the Register following the Status Register
- * and each Register is defined as 1/2 of the total Register Block
- */
-
- /*
- * This sets the bit within Enable_bit that needs to be written to
- * the Register indicated in Mask to a 1, all others are 0
- */
-
- /* Now get the current Enable Bits in the selected Reg */
-
- register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, register_id);
- if (read_write == ACPI_WRITE) {
- register_value &= ~mask;
- value <<= acpi_hw_get_bit_shift (mask);
- value &= mask;
- register_value |= value;
-
- /* This write will put the Action state into the General Purpose */
- /* Enable Register indexed by the value in Mask */
-
- acpi_hw_register_write (ACPI_MTX_DO_NOT_LOCK,
- register_id, (u8) register_value);
- register_value = acpi_hw_register_read (ACPI_MTX_DO_NOT_LOCK, register_id);
- }
- break;
-
-
- case SMI_CMD_BLOCK:
- case PROCESSOR_BLOCK:
- /* not used */
- default:
-
- mask = 0;
- break;
- }
-
- if (ACPI_MTX_LOCK == use_lock) {
- acpi_cm_release_mutex (ACPI_MTX_HARDWARE);
- }
-
-
- register_value &= mask;
- register_value >>= acpi_hw_get_bit_shift (mask);
-
- return (register_value);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_register_read
- *
- * PARAMETERS: Use_lock - Mutex hw access.
- * Register_id - Register_iD + Offset.
- *
- * RETURN: Value read or written.
- *
- * DESCRIPTION: Acpi register read function. Registers are read at the
- * given offset.
- *
- ******************************************************************************/
-
-u32
-acpi_hw_register_read (
- u8 use_lock,
- u32 register_id)
-{
- u32 value = 0;
- u32 bank_offset;
-
- if (ACPI_MTX_LOCK == use_lock) {
- acpi_cm_acquire_mutex (ACPI_MTX_HARDWARE);
- }
-
-
- switch (REGISTER_BLOCK_ID(register_id)) {
- case PM1_STS: /* 16-bit access */
-
- value = acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1a_evt_blk, 0);
- value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1b_evt_blk, 0);
- break;
-
-
- case PM1_EN: /* 16-bit access*/
-
- bank_offset = DIV_2 (acpi_gbl_FADT->pm1_evt_len);
- value = acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1a_evt_blk, bank_offset);
- value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1b_evt_blk, bank_offset);
- break;
-
-
- case PM1_CONTROL: /* 16-bit access */
-
- value = acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
- value |= acpi_hw_low_level_read (16, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
- break;
-
-
- case PM2_CONTROL: /* 8-bit access */
-
- value = acpi_hw_low_level_read (8, &acpi_gbl_FADT->Xpm2_cnt_blk, 0);
- break;
-
-
- case PM_TIMER: /* 32-bit access */
-
- value = acpi_hw_low_level_read (32, &acpi_gbl_FADT->Xpm_tmr_blk, 0);
- break;
-
-
- case GPE0_STS_BLOCK: /* 8-bit access */
-
- value = acpi_hw_low_level_read (8, &acpi_gbl_FADT->Xgpe0blk, 0);
- break;
-
-
- case GPE0_EN_BLOCK: /* 8-bit access */
-
- bank_offset = DIV_2 (acpi_gbl_FADT->gpe0blk_len);
- value = acpi_hw_low_level_read (8, &acpi_gbl_FADT->Xgpe0blk, bank_offset);
- break;
-
-
- case GPE1_STS_BLOCK: /* 8-bit access */
-
- value = acpi_hw_low_level_read (8, &acpi_gbl_FADT->Xgpe1_blk, 0);
- break;
-
-
- case GPE1_EN_BLOCK: /* 8-bit access */
-
- bank_offset = DIV_2 (acpi_gbl_FADT->gpe1_blk_len);
- value = acpi_hw_low_level_read (8, &acpi_gbl_FADT->Xgpe1_blk, bank_offset);
- break;
-
-
- case SMI_CMD_BLOCK: /* 8bit */
-
- value = (u32) acpi_os_in8 (acpi_gbl_FADT->smi_cmd);
- break;
-
-
- default:
- value = 0;
- break;
- }
-
-
- if (ACPI_MTX_LOCK == use_lock) {
- acpi_cm_release_mutex (ACPI_MTX_HARDWARE);
- }
-
- return (value);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_register_write
- *
- * PARAMETERS: Use_lock - Mutex hw access.
- * Register_id - Register_iD + Offset.
- *
- * RETURN: Value read or written.
- *
- * DESCRIPTION: Acpi register Write function. Registers are written at the
- * given offset.
- *
- ******************************************************************************/
-
-void
-acpi_hw_register_write (
- u8 use_lock,
- u32 register_id,
- u32 value)
-{
- u32 bank_offset;
-
-
- if (ACPI_MTX_LOCK == use_lock) {
- acpi_cm_acquire_mutex (ACPI_MTX_HARDWARE);
- }
-
-
- switch (REGISTER_BLOCK_ID (register_id)) {
- case PM1_STS: /* 16-bit access */
-
- acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_evt_blk, 0);
- acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_evt_blk, 0);
- break;
-
-
- case PM1_EN: /* 16-bit access*/
-
- bank_offset = DIV_2 (acpi_gbl_FADT->pm1_evt_len);
- acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_evt_blk, bank_offset);
- acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_evt_blk, bank_offset);
- break;
-
-
- case PM1_CONTROL: /* 16-bit access */
-
- acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
- acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
- break;
-
-
- case PM1_a_CONTROL: /* 16-bit access */
-
- acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1a_cnt_blk, 0);
- break;
-
-
- case PM1_b_CONTROL: /* 16-bit access */
-
- acpi_hw_low_level_write (16, value, &acpi_gbl_FADT->Xpm1b_cnt_blk, 0);
- break;
-
-
- case PM2_CONTROL: /* 8-bit access */
-
- acpi_hw_low_level_write (8, value, &acpi_gbl_FADT->Xpm2_cnt_blk, 0);
- break;
-
-
- case PM_TIMER: /* 32-bit access */
-
- acpi_hw_low_level_write (32, value, &acpi_gbl_FADT->Xpm_tmr_blk, 0);
- break;
-
-
- case GPE0_STS_BLOCK: /* 8-bit access */
-
- acpi_hw_low_level_write (8, value, &acpi_gbl_FADT->Xgpe0blk, 0);
- break;
-
-
- case GPE0_EN_BLOCK: /* 8-bit access */
-
- bank_offset = DIV_2 (acpi_gbl_FADT->gpe0blk_len);
- acpi_hw_low_level_write (8, value, &acpi_gbl_FADT->Xgpe0blk, bank_offset);
- break;
-
-
- case GPE1_STS_BLOCK: /* 8-bit access */
-
- acpi_hw_low_level_write (8, value, &acpi_gbl_FADT->Xgpe1_blk, 0);
- break;
-
-
- case GPE1_EN_BLOCK: /* 8-bit access */
-
- bank_offset = DIV_2 (acpi_gbl_FADT->gpe1_blk_len);
- acpi_hw_low_level_write (8, value, &acpi_gbl_FADT->Xgpe1_blk, bank_offset);
- break;
-
-
- case SMI_CMD_BLOCK: /* 8bit */
-
- /* For 2.0, SMI_CMD is always in IO space */
- /* TBD: what about 1.0? 0.71? */
-
- acpi_os_out8 (acpi_gbl_FADT->smi_cmd, (u8) value);
- break;
-
-
- default:
- value = 0;
- break;
- }
-
-
- if (ACPI_MTX_LOCK == use_lock) {
- acpi_cm_release_mutex (ACPI_MTX_HARDWARE);
- }
-
- return;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_low_level_read
- *
- * PARAMETERS: Register - GAS register structure
- * Offset - Offset from the base address in the GAS
- * Width - 8, 16, or 32
- *
- * RETURN: Value read
- *
- * DESCRIPTION: Read from either memory, IO, or PCI config space.
- *
- ******************************************************************************/
-
-u32
-acpi_hw_low_level_read (
- u32 width,
- ACPI_GAS *reg,
- u32 offset)
-{
- u32 value = 0;
- ACPI_PHYSICAL_ADDRESS mem_address;
- ACPI_IO_ADDRESS io_address;
- u32 pci_register;
- u32 pci_dev_func;
-
-
- /*
- * Must have a valid pointer to a GAS structure, and
- * a non-zero address within
- */
- if ((!reg) ||
- (!ACPI_VALID_ADDRESS (reg->address))) {
- return 0;
- }
-
-
- /*
- * Three address spaces supported:
- * Memory, Io, or PCI config.
- */
-
- switch (reg->address_space_id) {
- case ADDRESS_SPACE_SYSTEM_MEMORY:
-
- mem_address = (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (reg->address) + offset);
-
- switch (width) {
- case 8:
- value = acpi_os_mem_in8 (mem_address);
- break;
- case 16:
- value = acpi_os_mem_in16 (mem_address);
- break;
- case 32:
- value = acpi_os_mem_in32 (mem_address);
- break;
- }
- break;
-
-
- case ADDRESS_SPACE_SYSTEM_IO:
-
- io_address = (ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (reg->address) + offset);
-
- switch (width) {
- case 8:
- value = acpi_os_in8 (io_address);
- break;
- case 16:
- value = acpi_os_in16 (io_address);
- break;
- case 32:
- value = acpi_os_in32 (io_address);
- break;
- }
- break;
-
-
- case ADDRESS_SPACE_PCI_CONFIG:
-
- pci_dev_func = ACPI_PCI_DEVFUN (ACPI_GET_ADDRESS (reg->address));
- pci_register = ACPI_PCI_REGISTER (ACPI_GET_ADDRESS (reg->address)) + offset;
-
- switch (width) {
- case 8:
- acpi_os_read_pci_cfg_byte (0, pci_dev_func, pci_register, (u8 *) &value);
- break;
- case 16:
- acpi_os_read_pci_cfg_word (0, pci_dev_func, pci_register, (u16 *) &value);
- break;
- case 32:
- acpi_os_read_pci_cfg_dword (0, pci_dev_func, pci_register, (u32 *) &value);
- break;
- }
- break;
- }
-
- return value;
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_hw_low_level_write
- *
- * PARAMETERS: Width - 8, 16, or 32
- * Value - To be written
- * Register - GAS register structure
- * Offset - Offset from the base address in the GAS
- *
- *
- * RETURN: Value read
- *
- * DESCRIPTION: Read from either memory, IO, or PCI config space.
- *
- ******************************************************************************/
-
-void
-acpi_hw_low_level_write (
- u32 width,
- u32 value,
- ACPI_GAS *reg,
- u32 offset)
-{
- ACPI_PHYSICAL_ADDRESS mem_address;
- ACPI_IO_ADDRESS io_address;
- u32 pci_register;
- u32 pci_dev_func;
-
-
- /*
- * Must have a valid pointer to a GAS structure, and
- * a non-zero address within
- */
- if ((!reg) ||
- (!ACPI_VALID_ADDRESS (reg->address))) {
- return;
- }
-
-
- /*
- * Three address spaces supported:
- * Memory, Io, or PCI config.
- */
-
- switch (reg->address_space_id) {
- case ADDRESS_SPACE_SYSTEM_MEMORY:
-
- mem_address = (ACPI_PHYSICAL_ADDRESS) (ACPI_GET_ADDRESS (reg->address) + offset);
-
- switch (width) {
- case 8:
- acpi_os_mem_out8 (mem_address, (u8) value);
- break;
- case 16:
- acpi_os_mem_out16 (mem_address, (u16) value);
- break;
- case 32:
- acpi_os_mem_out32 (mem_address, (u32) value);
- break;
- }
- break;
-
-
- case ADDRESS_SPACE_SYSTEM_IO:
-
- io_address = (ACPI_IO_ADDRESS) (ACPI_GET_ADDRESS (reg->address) + offset);
-
- switch (width) {
- case 8:
- acpi_os_out8 (io_address, (u8) value);
- break;
- case 16:
- acpi_os_out16 (io_address, (u16) value);
- break;
- case 32:
- acpi_os_out32 (io_address, (u32) value);
- break;
- }
- break;
-
-
- case ADDRESS_SPACE_PCI_CONFIG:
-
- pci_dev_func = ACPI_PCI_DEVFUN (ACPI_GET_ADDRESS (reg->address));
- pci_register = ACPI_PCI_REGISTER (ACPI_GET_ADDRESS (reg->address)) + offset;
-
- switch (width) {
- case 8:
- acpi_os_write_pci_cfg_byte (0, pci_dev_func, pci_register, (u8) value);
- break;
- case 16:
- acpi_os_write_pci_cfg_word (0, pci_dev_func, pci_register, (u16) value);
- break;
- case 32:
- acpi_os_write_pci_cfg_dword (0, pci_dev_func, pci_register, (u32) value);
- break;
- }
- break;
- }
-}
diff --git a/reactos/drivers/bus/acpi/hardware/hwsleep.c b/reactos/drivers/bus/acpi/hardware/hwsleep.c
deleted file mode 100644
index a30fbe624a3..00000000000
--- a/reactos/drivers/bus/acpi/hardware/hwsleep.c
+++ /dev/null
@@ -1,186 +0,0 @@
-
-/******************************************************************************
- *
- * Name: hwsleep.c - ACPI Hardware Sleep/Wake Interface
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include
-
-#define _COMPONENT ACPI_HARDWARE
- MODULE_NAME ("hwsleep")
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_set_firmware_waking_vector
- *
- * PARAMETERS: Physical_address - Physical address of ACPI real mode
- * entry point.
- *
- * RETURN: AE_OK or AE_ERROR
- *
- * DESCRIPTION: Access function for d_firmware_waking_vector field in FACS
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_set_firmware_waking_vector (
- ACPI_PHYSICAL_ADDRESS physical_address)
-{
-
-
- /* Make sure that we have an FACS */
-
- if (!acpi_gbl_FACS) {
- return (AE_NO_ACPI_TABLES);
- }
-
- /* Set the vector */
-
- if (acpi_gbl_FACS->vector_width == 32) {
- * (u32 *) acpi_gbl_FACS->firmware_waking_vector = (u32) physical_address;
- }
- else {
- *acpi_gbl_FACS->firmware_waking_vector = physical_address;
- }
-
- return (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_get_firmware_waking_vector
- *
- * PARAMETERS: *Physical_address - Output buffer where contents of
- * the Firmware_waking_vector field of
- * the FACS will be stored.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Access function for d_firmware_waking_vector field in FACS
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_firmware_waking_vector (
- ACPI_PHYSICAL_ADDRESS *physical_address)
-{
-
-
- if (!physical_address) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Make sure that we have an FACS */
-
- if (!acpi_gbl_FACS) {
- return (AE_NO_ACPI_TABLES);
- }
-
- /* Get the vector */
-
- if (acpi_gbl_FACS->vector_width == 32) {
- *physical_address = * (u32 *) acpi_gbl_FACS->firmware_waking_vector;
- }
- else {
- *physical_address = *acpi_gbl_FACS->firmware_waking_vector;
- }
-
- return (AE_OK);
-}
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_enter_sleep_state
- *
- * PARAMETERS: Sleep_state - Which sleep state to enter
- *
- * RETURN: Status
- *
- * DESCRIPTION: Enter a system sleep state (see ACPI 2.0 spec p 231)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_enter_sleep_state (
- u8 sleep_state)
-{
- ACPI_STATUS status;
- ACPI_OBJECT_LIST arg_list;
- ACPI_OBJECT arg;
- u8 type_a;
- u8 type_b;
- u16 PM1_acontrol;
- u16 PM1_bcontrol;
-
- /*
- * _PSW methods could be run here to enable wake-on keyboard, LAN, etc.
- */
-
- status = acpi_hw_obtain_sleep_type_register_data(sleep_state, &type_a, &type_b);
-
- if (!ACPI_SUCCESS(status)) {
- return status;
- }
-
- /* run the _PTS and _GTS methods */
- MEMSET(&arg_list, 0, sizeof(arg_list));
- arg_list.count = 1;
- arg_list.pointer = &arg;
-
- MEMSET(&arg, 0, sizeof(arg));
- arg.type = ACPI_TYPE_INTEGER;
- arg.integer.value = sleep_state;
-
- acpi_evaluate_object(NULL, "\\_PTS", &arg_list, NULL);
- acpi_evaluate_object(NULL, "\\_GTS", &arg_list, NULL);
-
- /* clear wake status */
- acpi_hw_register_bit_access(ACPI_WRITE, ACPI_MTX_LOCK, WAK_STS, 1);
-
- PM1_acontrol = (u16) acpi_hw_register_read(ACPI_MTX_LOCK, PM1_CONTROL);
-
- /* mask off SLP_EN and SLP_TYP fields */
- PM1_acontrol &= 0xC3FF;
-
- /* mask in SLP_EN */
- PM1_acontrol |= (1 << acpi_hw_get_bit_shift (SLP_EN_MASK));
-
- PM1_bcontrol = PM1_acontrol;
-
- /* mask in SLP_TYP */
- PM1_acontrol |= (type_a << acpi_hw_get_bit_shift (SLP_TYPE_X_MASK));
- PM1_bcontrol |= (type_b << acpi_hw_get_bit_shift (SLP_TYPE_X_MASK));
-
- disable();
-
- acpi_hw_register_write(ACPI_MTX_LOCK, PM1_a_CONTROL, PM1_acontrol);
- acpi_hw_register_write(ACPI_MTX_LOCK, PM1_b_CONTROL, PM1_bcontrol);
- acpi_hw_register_write(ACPI_MTX_LOCK, PM1_CONTROL,
- (1 << acpi_hw_get_bit_shift (SLP_EN_MASK)));
-
- enable();
-
- return (AE_OK);
-}
diff --git a/reactos/drivers/bus/acpi/hardware/hwtimer.c b/reactos/drivers/bus/acpi/hardware/hwtimer.c
deleted file mode 100644
index 06dfbbee535..00000000000
--- a/reactos/drivers/bus/acpi/hardware/hwtimer.c
+++ /dev/null
@@ -1,199 +0,0 @@
-
-/******************************************************************************
- *
- * Name: hwtimer.c - ACPI Power Management Timer Interface
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include
-
-#define _COMPONENT ACPI_HARDWARE
- MODULE_NAME ("hwtimer")
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_get_timer_resolution
- *
- * PARAMETERS: none
- *
- * RETURN: Number of bits of resolution in the PM Timer (24 or 32).
- *
- * DESCRIPTION: Obtains resolution of the ACPI PM Timer.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_timer_resolution (
- u32 *resolution)
-{
- if (!resolution) {
- return (AE_BAD_PARAMETER);
- }
-
- if (0 == acpi_gbl_FADT->tmr_val_ext) {
- *resolution = 24;
- }
- else {
- *resolution = 32;
- }
-
- return (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_get_timer
- *
- * PARAMETERS: none
- *
- * RETURN: Current value of the ACPI PM Timer (in ticks).
- *
- * DESCRIPTION: Obtains current value of ACPI PM Timer.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_timer (
- u32 *ticks)
-{
- if (!ticks) {
- return (AE_BAD_PARAMETER);
- }
-
- *ticks = acpi_os_in32 ((ACPI_IO_ADDRESS) ACPI_GET_ADDRESS (acpi_gbl_FADT->Xpm_tmr_blk.address));
-
- return (AE_OK);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_get_timer_duration
- *
- * PARAMETERS: Start_ticks
- * End_ticks
- * Time_elapsed
- *
- * RETURN: Time_elapsed
- *
- * DESCRIPTION: Computes the time elapsed (in microseconds) between two
- * PM Timer time stamps, taking into account the possibility of
- * rollovers, the timer resolution, and timer frequency.
- *
- * The PM Timer's clock ticks at roughly 3.6 times per
- * _microsecond_, and its clock continues through Cx state
- * transitions (unlike many CPU timestamp counters) -- making it
- * a versatile and accurate timer.
- *
- * Note that this function accomodates only a single timer
- * rollover. Thus for 24-bit timers, this function should only
- * be used for calculating durations less than ~4.6 seconds
- * (~20 hours for 32-bit timers).
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_timer_duration (
- u32 start_ticks,
- u32 end_ticks,
- u32 *time_elapsed)
-{
- u32 delta_ticks = 0;
- u32 seconds = 0;
- u32 milliseconds = 0;
- u32 microseconds = 0;
- u32 remainder = 0;
-
- if (!time_elapsed) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Compute Tick Delta:
- * -------------------
- * Handle (max one) timer rollovers on 24- versus 32-bit timers.
- */
- if (start_ticks < end_ticks) {
- delta_ticks = end_ticks - start_ticks;
- }
- else if (start_ticks > end_ticks) {
- /* 24-bit Timer */
- if (0 == acpi_gbl_FADT->tmr_val_ext) {
- delta_ticks = (((0x00FFFFFF - start_ticks) + end_ticks) & 0x00FFFFFF);
- }
- /* 32-bit Timer */
- else {
- delta_ticks = (0xFFFFFFFF - start_ticks) + end_ticks;
- }
- }
- else {
- *time_elapsed = 0;
- return (AE_OK);
- }
-
- /*
- * Compute Duration:
- * -----------------
- * Since certain compilers (gcc/Linux, argh!) don't support 64-bit
- * divides in kernel-space we have to do some trickery to preserve
- * accuracy while using 32-bit math.
- *
- * TODO: Change to use 64-bit math when supported.
- *
- * The process is as follows:
- * 1. Compute the number of seconds by dividing Delta Ticks by
- * the timer frequency.
- * 2. Compute the number of milliseconds in the remainder from step #1
- * by multiplying by 1000 and then dividing by the timer frequency.
- * 3. Compute the number of microseconds in the remainder from step #2
- * by multiplying by 1000 and then dividing by the timer frequency.
- * 4. Add the results from steps 1, 2, and 3 to get the total duration.
- *
- * Example: The time elapsed for Delta_ticks = 0xFFFFFFFF should be
- * 1199864031 microseconds. This is computed as follows:
- * Step #1: Seconds = 1199; Remainder = 3092840
- * Step #2: Milliseconds = 864; Remainder = 113120
- * Step #3: Microseconds = 31; Remainder =
- */
-
- /* Step #1 */
- seconds = delta_ticks / PM_TIMER_FREQUENCY;
- remainder = delta_ticks % PM_TIMER_FREQUENCY;
-
- /* Step #2 */
- milliseconds = (remainder * 1000) / PM_TIMER_FREQUENCY;
- remainder = (remainder * 1000) % PM_TIMER_FREQUENCY;
-
- /* Step #3 */
- microseconds = (remainder * 1000) / PM_TIMER_FREQUENCY;
-
- /* Step #4 */
- *time_elapsed = seconds * 1000000;
- *time_elapsed += milliseconds * 1000;
- *time_elapsed += microseconds;
-
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/include/accommon.h b/reactos/drivers/bus/acpi/include/accommon.h
deleted file mode 100644
index 56bdf49cebd..00000000000
--- a/reactos/drivers/bus/acpi/include/accommon.h
+++ /dev/null
@@ -1,725 +0,0 @@
-/******************************************************************************
- *
- * Name: accommon.h -- prototypes for the common (subsystem-wide) procedures
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef _ACCOMMON_H
-#define _ACCOMMON_H
-
-
-typedef
-ACPI_STATUS (*ACPI_PKG_CALLBACK) (
- u8 object_type,
- ACPI_OPERAND_OBJECT *source_object,
- ACPI_GENERIC_STATE *state,
- void *context);
-
-
-ACPI_STATUS
-acpi_cm_walk_package_tree (
- ACPI_OPERAND_OBJECT *source_object,
- void *target_object,
- ACPI_PKG_CALLBACK walk_callback,
- void *context);
-
-
-typedef struct acpi_pkg_info
-{
- u8 *free_space;
- u32 length;
- u32 object_space;
- u32 num_packages;
-} ACPI_PKG_INFO;
-
-#define REF_INCREMENT (u16) 0
-#define REF_DECREMENT (u16) 1
-#define REF_FORCE_DELETE (u16) 2
-
-/* Acpi_cm_dump_buffer */
-
-#define DB_BYTE_DISPLAY 1
-#define DB_WORD_DISPLAY 2
-#define DB_DWORD_DISPLAY 4
-#define DB_QWORD_DISPLAY 8
-
-
-/* Global initialization interfaces */
-
-void
-acpi_cm_init_globals (
- void);
-
-void
-acpi_cm_terminate (
- void);
-
-
-/*
- * Cm_init - miscellaneous initialization and shutdown
- */
-
-ACPI_STATUS
-acpi_cm_hardware_initialize (
- void);
-
-ACPI_STATUS
-acpi_cm_subsystem_shutdown (
- void);
-
-ACPI_STATUS
-acpi_cm_validate_fadt (
- void);
-
-/*
- * Cm_global - Global data structures and procedures
- */
-
-#ifdef ACPI_DEBUG
-
-NATIVE_CHAR *
-acpi_cm_get_mutex_name (
- u32 mutex_id);
-
-NATIVE_CHAR *
-acpi_cm_get_type_name (
- u32 type);
-
-NATIVE_CHAR *
-acpi_cm_get_region_name (
- u8 space_id);
-
-#endif
-
-
-u8
-acpi_cm_valid_object_type (
- u32 type);
-
-ACPI_OWNER_ID
-acpi_cm_allocate_owner_id (
- u32 id_type);
-
-
-/*
- * Cm_clib - Local implementations of C library functions
- */
-
-#ifndef ACPI_USE_SYSTEM_CLIBRARY
-
-u32
-acpi_cm_strlen (
- const NATIVE_CHAR *string);
-
-NATIVE_CHAR *
-acpi_cm_strcpy (
- NATIVE_CHAR *dst_string,
- const NATIVE_CHAR *src_string);
-
-NATIVE_CHAR *
-acpi_cm_strncpy (
- NATIVE_CHAR *dst_string,
- const NATIVE_CHAR *src_string,
- NATIVE_UINT count);
-
-u32
-acpi_cm_strncmp (
- const NATIVE_CHAR *string1,
- const NATIVE_CHAR *string2,
- NATIVE_UINT count);
-
-u32
-acpi_cm_strcmp (
- const NATIVE_CHAR *string1,
- const NATIVE_CHAR *string2);
-
-NATIVE_CHAR *
-acpi_cm_strcat (
- NATIVE_CHAR *dst_string,
- const NATIVE_CHAR *src_string);
-
-NATIVE_CHAR *
-acpi_cm_strncat (
- NATIVE_CHAR *dst_string,
- const NATIVE_CHAR *src_string,
- NATIVE_UINT count);
-
-NATIVE_UINT
-acpi_cm_strtoul (
- const NATIVE_CHAR *string,
- NATIVE_CHAR **terminator,
- NATIVE_UINT base);
-
-NATIVE_CHAR *
-acpi_cm_strstr (
- NATIVE_CHAR *string1,
- NATIVE_CHAR *string2);
-
-NATIVE_CHAR *
-acpi_cm_strupr (
- NATIVE_CHAR *src_string);
-
-void *
-acpi_cm_memcpy (
- void *dest,
- const void *src,
- NATIVE_UINT count);
-
-void *
-acpi_cm_memset (
- void *dest,
- NATIVE_UINT value,
- NATIVE_UINT count);
-
-u32
-acpi_cm_to_upper (
- u32 c);
-
-u32
-acpi_cm_to_lower (
- u32 c);
-
-#endif /* ACPI_USE_SYSTEM_CLIBRARY */
-
-/*
- * Cm_copy - Object construction and conversion interfaces
- */
-
-ACPI_STATUS
-acpi_cm_build_simple_object(
- ACPI_OPERAND_OBJECT *obj,
- ACPI_OBJECT *user_obj,
- u8 *data_space,
- u32 *buffer_space_used);
-
-ACPI_STATUS
-acpi_cm_build_package_object (
- ACPI_OPERAND_OBJECT *obj,
- u8 *buffer,
- u32 *space_used);
-
-ACPI_STATUS
-acpi_cm_copy_iobject_to_eobject (
- ACPI_OPERAND_OBJECT *obj,
- ACPI_BUFFER *ret_buffer);
-
-ACPI_STATUS
-acpi_cm_copy_esimple_to_isimple(
- ACPI_OBJECT *user_obj,
- ACPI_OPERAND_OBJECT *obj);
-
-ACPI_STATUS
-acpi_cm_copy_eobject_to_iobject (
- ACPI_OBJECT *obj,
- ACPI_OPERAND_OBJECT *internal_obj);
-
-ACPI_STATUS
-acpi_cm_copy_isimple_to_isimple (
- ACPI_OPERAND_OBJECT *source_obj,
- ACPI_OPERAND_OBJECT *dest_obj);
-
-ACPI_STATUS
-acpi_cm_copy_ipackage_to_ipackage (
- ACPI_OPERAND_OBJECT *source_obj,
- ACPI_OPERAND_OBJECT *dest_obj,
- ACPI_WALK_STATE *walk_state);
-
-
-/*
- * Cm_create - Object creation
- */
-
-ACPI_STATUS
-acpi_cm_update_object_reference (
- ACPI_OPERAND_OBJECT *object,
- u16 action);
-
-ACPI_OPERAND_OBJECT *
-_cm_create_internal_object (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- OBJECT_TYPE_INTERNAL type);
-
-
-/*
- * Cm_debug - Debug interfaces
- */
-
-u32
-get_debug_level (
- void);
-
-void
-set_debug_level (
- u32 level);
-
-void
-function_trace (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- NATIVE_CHAR *function_name);
-
-void
-function_trace_ptr (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- NATIVE_CHAR *function_name,
- void *pointer);
-
-void
-function_trace_u32 (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- NATIVE_CHAR *function_name,
- u32 integer);
-
-void
-function_trace_str (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- NATIVE_CHAR *function_name,
- NATIVE_CHAR *string);
-
-void
-function_exit (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- NATIVE_CHAR *function_name);
-
-void
-function_status_exit (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- NATIVE_CHAR *function_name,
- ACPI_STATUS status);
-
-void
-function_value_exit (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- NATIVE_CHAR *function_name,
- ACPI_INTEGER value);
-
-void
-function_ptr_exit (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- NATIVE_CHAR *function_name,
- u8 *ptr);
-
-void
-debug_print_prefix (
- NATIVE_CHAR *module_name,
- u32 line_number);
-
-void
-debug_print (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id,
- u32 print_level,
- NATIVE_CHAR *format, ...);
-
-void
-debug_print_raw (
- NATIVE_CHAR *format, ...);
-
-void
-_report_info (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id);
-
-void
-_report_error (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id);
-
-void
-_report_warning (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id);
-
-void
-acpi_cm_dump_buffer (
- u8 *buffer,
- u32 count,
- u32 display,
- u32 component_id);
-
-
-/*
- * Cm_delete - Object deletion
- */
-
-void
-acpi_cm_delete_internal_obj (
- ACPI_OPERAND_OBJECT *object);
-
-void
-acpi_cm_delete_internal_package_object (
- ACPI_OPERAND_OBJECT *object);
-
-void
-acpi_cm_delete_internal_simple_object (
- ACPI_OPERAND_OBJECT *object);
-
-ACPI_STATUS
-acpi_cm_delete_internal_object_list (
- ACPI_OPERAND_OBJECT **obj_list);
-
-
-/*
- * Cm_eval - object evaluation
- */
-
-/* Method name strings */
-
-#define METHOD_NAME__HID "_HID"
-#define METHOD_NAME__UID "_UID"
-#define METHOD_NAME__ADR "_ADR"
-#define METHOD_NAME__STA "_STA"
-#define METHOD_NAME__REG "_REG"
-#define METHOD_NAME__SEG "_SEG"
-#define METHOD_NAME__BBN "_BBN"
-
-
-ACPI_STATUS
-acpi_cm_evaluate_numeric_object (
- NATIVE_CHAR *object_name,
- ACPI_NAMESPACE_NODE *device_node,
- ACPI_INTEGER *address);
-
-ACPI_STATUS
-acpi_cm_execute_HID (
- ACPI_NAMESPACE_NODE *device_node,
- DEVICE_ID *hid);
-
-ACPI_STATUS
-acpi_cm_execute_STA (
- ACPI_NAMESPACE_NODE *device_node,
- u32 *status_flags);
-
-ACPI_STATUS
-acpi_cm_execute_UID (
- ACPI_NAMESPACE_NODE *device_node,
- DEVICE_ID *uid);
-
-
-/*
- * Cm_error - exception interfaces
- */
-
-NATIVE_CHAR *
-acpi_cm_format_exception (
- ACPI_STATUS status);
-
-
-/*
- * Cm_mutex - mutual exclusion interfaces
- */
-
-ACPI_STATUS
-acpi_cm_mutex_initialize (
- void);
-
-void
-acpi_cm_mutex_terminate (
- void);
-
-ACPI_STATUS
-acpi_cm_create_mutex (
- ACPI_MUTEX_HANDLE mutex_id);
-
-ACPI_STATUS
-acpi_cm_delete_mutex (
- ACPI_MUTEX_HANDLE mutex_id);
-
-ACPI_STATUS
-acpi_cm_acquire_mutex (
- ACPI_MUTEX_HANDLE mutex_id);
-
-ACPI_STATUS
-acpi_cm_release_mutex (
- ACPI_MUTEX_HANDLE mutex_id);
-
-
-/*
- * Cm_object - internal object create/delete/cache routines
- */
-
-void *
-_cm_allocate_object_desc (
- NATIVE_CHAR *module_name,
- u32 line_number,
- u32 component_id);
-
-#define acpi_cm_create_internal_object(t) _cm_create_internal_object(_THIS_MODULE,__LINE__,_COMPONENT,t)
-#define acpi_cm_allocate_object_desc() _cm_allocate_object_desc(_THIS_MODULE,__LINE__,_COMPONENT)
-
-void
-acpi_cm_delete_object_desc (
- ACPI_OPERAND_OBJECT *object);
-
-u8
-acpi_cm_valid_internal_object (
- void *object);
-
-
-/*
- * Cm_ref_cnt - Object reference count management
- */
-
-void
-acpi_cm_add_reference (
- ACPI_OPERAND_OBJECT *object);
-
-void
-acpi_cm_remove_reference (
- ACPI_OPERAND_OBJECT *object);
-
-/*
- * Cm_size - Object size routines
- */
-
-ACPI_STATUS
-acpi_cm_get_simple_object_size (
- ACPI_OPERAND_OBJECT *obj,
- u32 *obj_length);
-
-ACPI_STATUS
-acpi_cm_get_package_object_size (
- ACPI_OPERAND_OBJECT *obj,
- u32 *obj_length);
-
-ACPI_STATUS
-acpi_cm_get_object_size(
- ACPI_OPERAND_OBJECT *obj,
- u32 *obj_length);
-
-
-/*
- * Cm_state - Generic state creation/cache routines
- */
-
-void
-acpi_cm_push_generic_state (
- ACPI_GENERIC_STATE **list_head,
- ACPI_GENERIC_STATE *state);
-
-ACPI_GENERIC_STATE *
-acpi_cm_pop_generic_state (
- ACPI_GENERIC_STATE **list_head);
-
-
-ACPI_GENERIC_STATE *
-acpi_cm_create_generic_state (
- void);
-
-ACPI_GENERIC_STATE *
-acpi_cm_create_update_state (
- ACPI_OPERAND_OBJECT *object,
- u16 action);
-
-ACPI_GENERIC_STATE *
-acpi_cm_create_pkg_state (
- void *internal_object,
- void *external_object,
- u16 index);
-
-ACPI_STATUS
-acpi_cm_create_update_state_and_push (
- ACPI_OPERAND_OBJECT *object,
- u16 action,
- ACPI_GENERIC_STATE **state_list);
-
-ACPI_STATUS
-acpi_cm_create_pkg_state_and_push (
- void *internal_object,
- void *external_object,
- u16 index,
- ACPI_GENERIC_STATE **state_list);
-
-ACPI_GENERIC_STATE *
-acpi_cm_create_control_state (
- void);
-
-void
-acpi_cm_delete_generic_state (
- ACPI_GENERIC_STATE *state);
-
-void
-acpi_cm_delete_generic_state_cache (
- void);
-
-void
-acpi_cm_delete_object_cache (
- void);
-
-/*
- * Cmutils
- */
-
-u8
-acpi_cm_valid_acpi_name (
- u32 name);
-
-u8
-acpi_cm_valid_acpi_character (
- NATIVE_CHAR character);
-
-ACPI_STATUS
-acpi_cm_resolve_package_references (
- ACPI_OPERAND_OBJECT *obj_desc);
-
-#ifdef ACPI_DEBUG
-
-void
-acpi_cm_display_init_pathname (
- ACPI_HANDLE obj_handle,
- char *path);
-
-#endif
-
-
-/*
- * Memory allocation functions and related macros.
- * Macros that expand to include filename and line number
- */
-
-void *
-_cm_allocate (
- u32 size,
- u32 component,
- NATIVE_CHAR *module,
- u32 line);
-
-void *
-_cm_callocate (
- u32 size,
- u32 component,
- NATIVE_CHAR *module,
- u32 line);
-
-void
-_cm_free (
- void *address,
- u32 component,
- NATIVE_CHAR *module,
- u32 line);
-
-void
-acpi_cm_init_static_object (
- ACPI_OPERAND_OBJECT *obj_desc);
-
-#define acpi_cm_allocate(a) _cm_allocate(a,_COMPONENT,_THIS_MODULE,__LINE__)
-#define acpi_cm_callocate(a) _cm_callocate(a, _COMPONENT,_THIS_MODULE,__LINE__)
-#define acpi_cm_free(a) _cm_free(a,_COMPONENT,_THIS_MODULE,__LINE__)
-
-#ifndef ACPI_DEBUG_TRACK_ALLOCATIONS
-
-#define acpi_cm_add_element_to_alloc_list(a,b,c,d,e,f)
-#define acpi_cm_delete_element_from_alloc_list(a,b,c,d)
-#define acpi_cm_dump_current_allocations(a,b)
-#define acpi_cm_dump_allocation_info()
-
-#define DECREMENT_OBJECT_METRICS(a)
-#define INCREMENT_OBJECT_METRICS(a)
-#define INITIALIZE_ALLOCATION_METRICS()
-#define DECREMENT_NAME_TABLE_METRICS(a)
-#define INCREMENT_NAME_TABLE_METRICS(a)
-
-#else
-
-#define INITIALIZE_ALLOCATION_METRICS() \
- acpi_gbl_current_object_count = 0; \
- acpi_gbl_current_object_size = 0; \
- acpi_gbl_running_object_count = 0; \
- acpi_gbl_running_object_size = 0; \
- acpi_gbl_max_concurrent_object_count = 0; \
- acpi_gbl_max_concurrent_object_size = 0; \
- acpi_gbl_current_alloc_size = 0; \
- acpi_gbl_current_alloc_count = 0; \
- acpi_gbl_running_alloc_size = 0; \
- acpi_gbl_running_alloc_count = 0; \
- acpi_gbl_max_concurrent_alloc_size = 0; \
- acpi_gbl_max_concurrent_alloc_count = 0; \
- acpi_gbl_current_node_count = 0; \
- acpi_gbl_current_node_size = 0; \
- acpi_gbl_max_concurrent_node_count = 0
-
-
-#define DECREMENT_OBJECT_METRICS(a) \
- acpi_gbl_current_object_count--; \
- acpi_gbl_current_object_size -= a
-
-#define INCREMENT_OBJECT_METRICS(a) \
- acpi_gbl_current_object_count++; \
- acpi_gbl_running_object_count++; \
- if (acpi_gbl_max_concurrent_object_count < acpi_gbl_current_object_count) \
- { \
- acpi_gbl_max_concurrent_object_count = acpi_gbl_current_object_count; \
- } \
- acpi_gbl_running_object_size += a; \
- acpi_gbl_current_object_size += a; \
- if (acpi_gbl_max_concurrent_object_size < acpi_gbl_current_object_size) \
- { \
- acpi_gbl_max_concurrent_object_size = acpi_gbl_current_object_size; \
- }
-
-#define DECREMENT_NAME_TABLE_METRICS(a) \
- acpi_gbl_current_node_count--; \
- acpi_gbl_current_node_size -= (a)
-
-#define INCREMENT_NAME_TABLE_METRICS(a) \
- acpi_gbl_current_node_count++; \
- acpi_gbl_current_node_size+= (a); \
- if (acpi_gbl_max_concurrent_node_count < acpi_gbl_current_node_count) \
- { \
- acpi_gbl_max_concurrent_node_count = acpi_gbl_current_node_count; \
- } \
-
-
-void
-acpi_cm_dump_allocation_info (
- void);
-
-void
-acpi_cm_dump_current_allocations (
- u32 component,
- NATIVE_CHAR *module);
-
-#endif
-
-
-#endif /* _ACCOMMON_H */
diff --git a/reactos/drivers/bus/acpi/include/acconfig.h b/reactos/drivers/bus/acpi/include/acconfig.h
deleted file mode 100644
index c31e16f7dd9..00000000000
--- a/reactos/drivers/bus/acpi/include/acconfig.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/******************************************************************************
- *
- * Name: acconfig.h - Global configuration constants
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef _ACCONFIG_H
-#define _ACCONFIG_H
-
-
-/******************************************************************************
- *
- * Compile-time options
- *
- *****************************************************************************/
-
-/*
- * ACPI_DEBUG - This switch enables all the debug facilities of the ACPI
- * subsystem. This includes the DEBUG_PRINT output statements
- * When disabled, all DEBUG_PRINT statements are compiled out.
- *
- * ACPI_APPLICATION - Use this switch if the subsystem is going to be run
- * at the application level.
- *
- */
-
-
-/******************************************************************************
- *
- * Subsystem Constants
- *
- *****************************************************************************/
-
-
-/* Version string */
-
-#define ACPI_CA_VERSION 0x20010313
-
-
-/* Maximum objects in the various object caches */
-
-#define MAX_STATE_CACHE_DEPTH 64 /* State objects for stacks */
-#define MAX_PARSE_CACHE_DEPTH 96 /* Parse tree objects */
-#define MAX_EXTPARSE_CACHE_DEPTH 64 /* Parse tree objects */
-#define MAX_OBJECT_CACHE_DEPTH 64 /* Interpreter operand objects */
-#define MAX_WALK_CACHE_DEPTH 2 /* Objects for parse tree walks (method execution) */
-
-
-/* String size constants */
-
-#define MAX_STRING_LENGTH 512
-#define PATHNAME_MAX 256 /* A full namespace pathname */
-
-
-/* Maximum count for a semaphore object */
-
-#define MAX_SEMAPHORE_COUNT 256
-
-
-/* Max reference count (for debug only) */
-
-#define MAX_REFERENCE_COUNT 0x200
-
-
-/* Size of cached memory mapping for system memory operation region */
-
-#define SYSMEM_REGION_WINDOW_SIZE 4096
-
-
-/*
- * Debugger threading model
- * Use single threaded if the entire subsystem is contained in an application
- * Use multiple threaded when the subsystem is running in the kernel.
- *
- * By default the model is single threaded if ACPI_APPLICATION is set,
- * multi-threaded if ACPI_APPLICATION is not set.
- */
-
-#define DEBUGGER_SINGLE_THREADED 0
-#define DEBUGGER_MULTI_THREADED 1
-
-#ifdef ACPI_APPLICATION
-#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
-
-#else
-#define DEBUGGER_THREADING DEBUGGER_MULTI_THREADED
-#endif
-
-
-/******************************************************************************
- *
- * ACPI Specification constants (Do not change unless the specification changes)
- *
- *****************************************************************************/
-
-/*
- * Method info (in WALK_STATE), containing local variables and argumetns
- */
-
-#define MTH_NUM_LOCALS 8
-#define MTH_MAX_LOCAL 7
-
-#define MTH_NUM_ARGS 7
-#define MTH_MAX_ARG 6
-
-/* Maximum length of resulting string when converting from a buffer */
-
-#define ACPI_MAX_STRING_CONVERSION 200
-
-/*
- * Operand Stack (in WALK_STATE), Must be large enough to contain MTH_MAX_ARG
- */
-
-#define OBJ_NUM_OPERANDS 8
-#define OBJ_MAX_OPERAND 7
-
-/* Names within the namespace are 4 bytes long */
-
-#define ACPI_NAME_SIZE 4
-#define PATH_SEGMENT_LENGTH 5 /* 4 chars for name + 1 s8 for separator */
-#define PATH_SEPARATOR '.'
-
-
-/* Constants used in searching for the RSDP in low memory */
-
-#define LO_RSDP_WINDOW_BASE 0 /* Physical Address */
-#define HI_RSDP_WINDOW_BASE 0xE0000 /* Physical Address */
-#define LO_RSDP_WINDOW_SIZE 0x400
-#define HI_RSDP_WINDOW_SIZE 0x20000
-#define RSDP_SCAN_STEP 16
-
-#endif /* _ACCONFIG_H */
-
diff --git a/reactos/drivers/bus/acpi/include/acdebug.h b/reactos/drivers/bus/acpi/include/acdebug.h
deleted file mode 100644
index 3694f51b691..00000000000
--- a/reactos/drivers/bus/acpi/include/acdebug.h
+++ /dev/null
@@ -1,411 +0,0 @@
-/******************************************************************************
- *
- * Name: acdebug.h - ACPI/AML debugger
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACDEBUG_H__
-#define __ACDEBUG_H__
-
-
-#define DB_MAX_ARGS 8 /* Must be max method args + 1 */
-
-#define DB_COMMAND_PROMPT '-'
-#define DB_EXECUTE_PROMPT '%'
-
-
-extern int optind;
-extern NATIVE_CHAR *optarg;
-extern u8 *aml_ptr;
-extern u32 acpi_aml_length;
-
-extern u8 opt_tables;
-extern u8 opt_disasm;
-extern u8 opt_stats;
-extern u8 opt_parse_jit;
-extern u8 opt_verbose;
-extern u8 opt_ini_methods;
-
-
-extern NATIVE_CHAR *args[DB_MAX_ARGS];
-extern NATIVE_CHAR line_buf[80];
-extern NATIVE_CHAR scope_buf[40];
-extern NATIVE_CHAR debug_filename[40];
-extern u8 output_to_file;
-extern NATIVE_CHAR *buffer;
-extern NATIVE_CHAR *filename;
-extern NATIVE_CHAR *INDENT_STRING;
-extern u8 acpi_gbl_db_output_flags;
-extern u32 acpi_gbl_db_debug_level;
-extern u32 acpi_gbl_db_console_debug_level;
-
-extern u32 num_names;
-extern u32 num_methods;
-extern u32 num_regions;
-extern u32 num_packages;
-extern u32 num_aliases;
-extern u32 num_devices;
-extern u32 num_field_defs;
-extern u32 num_thermal_zones;
-extern u32 num_nodes;
-extern u32 num_grammar_elements;
-extern u32 num_method_elements ;
-extern u32 num_mutexes;
-extern u32 num_power_resources;
-extern u32 num_bank_fields ;
-extern u32 num_index_fields;
-extern u32 num_events;
-
-extern u32 size_of_parse_tree;
-extern u32 size_of_method_trees;
-extern u32 size_of_nTes;
-extern u32 size_of_acpi_objects;
-
-
-#define BUFFER_SIZE 4196
-
-#define DB_REDIRECTABLE_OUTPUT 0x01
-#define DB_CONSOLE_OUTPUT 0x02
-#define DB_DUPLICATE_OUTPUT 0x03
-
-
-typedef struct command_info
-{
- NATIVE_CHAR *name; /* Command Name */
- u8 min_args; /* Minimum arguments required */
-
-} COMMAND_INFO;
-
-
-typedef struct argument_info
-{
- NATIVE_CHAR *name; /* Argument Name */
-
-} ARGUMENT_INFO;
-
-
-#define PARAM_LIST(pl) pl
-
-#define DBTEST_OUTPUT_LEVEL(lvl) if (opt_verbose)
-
-#define VERBOSE_PRINT(fp) DBTEST_OUTPUT_LEVEL(lvl) {\
- acpi_os_printf PARAM_LIST(fp);}
-
-#define EX_NO_SINGLE_STEP 1
-#define EX_SINGLE_STEP 2
-
-
-/* Prototypes */
-
-
-/*
- * dbapi - external debugger interfaces
- */
-
-int
-acpi_db_initialize (
- void);
-
-ACPI_STATUS
-acpi_db_single_step (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- u8 op_type);
-
-
-/*
- * dbcmds - debug commands and output routines
- */
-
-
-void
-acpi_db_display_table_info (
- NATIVE_CHAR *table_arg);
-
-void
-acpi_db_unload_acpi_table (
- NATIVE_CHAR *table_arg,
- NATIVE_CHAR *instance_arg);
-
-void
-acpi_db_set_method_breakpoint (
- NATIVE_CHAR *location,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_db_set_method_call_breakpoint (
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_db_disassemble_aml (
- NATIVE_CHAR *statements,
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_db_dump_namespace (
- NATIVE_CHAR *start_arg,
- NATIVE_CHAR *depth_arg);
-
-void
-acpi_db_dump_namespace_by_owner (
- NATIVE_CHAR *owner_arg,
- NATIVE_CHAR *depth_arg);
-
-void
-acpi_db_send_notify (
- NATIVE_CHAR *name,
- u32 value);
-
-void
-acpi_db_set_method_data (
- NATIVE_CHAR *type_arg,
- NATIVE_CHAR *index_arg,
- NATIVE_CHAR *value_arg);
-
-ACPI_STATUS
-acpi_db_display_objects (
- NATIVE_CHAR *obj_type_arg,
- NATIVE_CHAR *display_count_arg);
-
-ACPI_STATUS
-acpi_db_find_name_in_namespace (
- NATIVE_CHAR *name_arg);
-
-void
-acpi_db_set_scope (
- NATIVE_CHAR *name);
-
-void
-acpi_db_find_references (
- NATIVE_CHAR *object_arg);
-
-void
-acpi_db_display_locks (void);
-
-
-void
-acpi_db_display_resources (
- NATIVE_CHAR *object_arg);
-
-
-/*
- * dbdisasm - AML disassembler
- */
-
-void
-acpi_db_display_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *origin,
- u32 num_opcodes);
-
-void
-acpi_db_display_namestring (
- NATIVE_CHAR *name);
-
-void
-acpi_db_display_path (
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_db_display_opcode (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_db_decode_internal_object (
- ACPI_OPERAND_OBJECT *obj_desc);
-
-
-/*
- * dbdisply - debug display commands
- */
-
-
-void
-acpi_db_display_method_info (
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_db_decode_and_display_object (
- NATIVE_CHAR *target,
- NATIVE_CHAR *output_type);
-
-void
-acpi_db_display_result_object (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_db_display_all_methods (
- NATIVE_CHAR *display_count_arg);
-
-void
-acpi_db_display_internal_object (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-void
-acpi_db_display_arguments (
- void);
-
-void
-acpi_db_display_locals (
- void);
-
-void
-acpi_db_display_results (
- void);
-
-void
-acpi_db_display_calling_tree (
- void);
-
-void
-acpi_db_display_argument_object (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-
-/*
- * dbexec - debugger control method execution
- */
-
-void
-acpi_db_execute (
- NATIVE_CHAR *name,
- NATIVE_CHAR **args,
- u32 flags);
-
-void
-acpi_db_create_execution_threads (
- NATIVE_CHAR *num_threads_arg,
- NATIVE_CHAR *num_loops_arg,
- NATIVE_CHAR *method_name_arg);
-
-
-/*
- * dbfileio - Debugger file I/O commands
- */
-
-OBJECT_TYPE_INTERNAL
-acpi_db_match_argument (
- NATIVE_CHAR *user_argument,
- ARGUMENT_INFO *arguments);
-
-
-void
-acpi_db_close_debug_file (
- void);
-
-void
-acpi_db_open_debug_file (
- NATIVE_CHAR *name);
-
-ACPI_STATUS
-acpi_db_load_acpi_table (
- NATIVE_CHAR *filename);
-
-
-/*
- * dbhistry - debugger HISTORY command
- */
-
-void
-acpi_db_add_to_history (
- NATIVE_CHAR *command_line);
-
-void
-acpi_db_display_history (void);
-
-NATIVE_CHAR *
-acpi_db_get_from_history (
- NATIVE_CHAR *command_num_arg);
-
-
-/*
- * dbinput - user front-end to the AML debugger
- */
-
-ACPI_STATUS
-acpi_db_command_dispatch (
- NATIVE_CHAR *input_buffer,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_db_execute_thread (
- void *context);
-
-ACPI_STATUS
-acpi_db_user_commands (
- NATIVE_CHAR prompt,
- ACPI_PARSE_OBJECT *op);
-
-
-/*
- * dbstats - Generation and display of ACPI table statistics
- */
-
-void
-acpi_db_generate_statistics (
- ACPI_PARSE_OBJECT *root,
- u8 is_method);
-
-
-ACPI_STATUS
-acpi_db_display_statistics (
- NATIVE_CHAR *type_arg);
-
-
-/*
- * dbutils - AML debugger utilities
- */
-
-void
-acpi_db_set_output_destination (
- u32 where);
-
-void
-acpi_db_dump_buffer (
- u32 address);
-
-void
-acpi_db_dump_object (
- ACPI_OBJECT *obj_desc,
- u32 level);
-
-void
-acpi_db_prep_namestring (
- NATIVE_CHAR *name);
-
-
-ACPI_STATUS
-acpi_db_second_pass_parse (
- ACPI_PARSE_OBJECT *root);
-
-ACPI_NAMESPACE_NODE *
-acpi_db_local_ns_lookup (
- NATIVE_CHAR *name);
-
-
-#endif /* __ACDEBUG_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acdispat.h b/reactos/drivers/bus/acpi/include/acdispat.h
deleted file mode 100644
index ab792298d44..00000000000
--- a/reactos/drivers/bus/acpi/include/acdispat.h
+++ /dev/null
@@ -1,450 +0,0 @@
-/******************************************************************************
- *
- * Name: acdispat.h - dispatcher (parser to interpreter interface)
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#ifndef _ACDISPAT_H_
-#define _ACDISPAT_H_
-
-
-#define NAMEOF_LOCAL_NTE "__L0"
-#define NAMEOF_ARG_NTE "__A0"
-
-
-/* Common interfaces */
-
-ACPI_STATUS
-acpi_ds_obj_stack_push (
- void *object,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_obj_stack_pop (
- u32 pop_count,
- ACPI_WALK_STATE *walk_state);
-
-void *
-acpi_ds_obj_stack_get_value (
- u32 index,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_obj_stack_pop_object (
- ACPI_OPERAND_OBJECT **object,
- ACPI_WALK_STATE *walk_state);
-
-
-/* dsopcode - support for late evaluation */
-
-ACPI_STATUS
-acpi_ds_get_field_unit_arguments (
- ACPI_OPERAND_OBJECT *obj_desc);
-
-ACPI_STATUS
-acpi_ds_get_region_arguments (
- ACPI_OPERAND_OBJECT *rgn_desc);
-
-
-/* dsctrl - Parser/Interpreter interface, control stack routines */
-
-
-ACPI_STATUS
-acpi_ds_exec_begin_control_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-ACPI_STATUS
-acpi_ds_exec_end_control_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-
-/* dsexec - Parser/Interpreter interface, method execution callbacks */
-
-
-ACPI_STATUS
-acpi_ds_get_predicate_value (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- NATIVE_UINT has_result_obj);
-
-ACPI_STATUS
-acpi_ds_exec_begin_op (
- u16 opcode,
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT **out_op);
-
-ACPI_STATUS
-acpi_ds_exec_end_op (
- ACPI_WALK_STATE *state,
- ACPI_PARSE_OBJECT *op);
-
-
-/* dsfield - Parser/Interpreter interface for AML fields */
-
-
-ACPI_STATUS
-acpi_ds_create_field (
- ACPI_PARSE_OBJECT *op,
- ACPI_NAMESPACE_NODE *region_node,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_create_bank_field (
- ACPI_PARSE_OBJECT *op,
- ACPI_NAMESPACE_NODE *region_node,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_create_index_field (
- ACPI_PARSE_OBJECT *op,
- ACPI_HANDLE region_node,
- ACPI_WALK_STATE *walk_state);
-
-
-/* dsload - Parser/Interpreter interface, namespace load callbacks */
-
-ACPI_STATUS
-acpi_ds_load1_begin_op (
- u16 opcode,
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT **out_op);
-
-ACPI_STATUS
-acpi_ds_load1_end_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-ACPI_STATUS
-acpi_ds_load2_begin_op (
- u16 opcode,
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT **out_op);
-
-ACPI_STATUS
-acpi_ds_load2_end_op (
- ACPI_WALK_STATE *state,
- ACPI_PARSE_OBJECT *op);
-
-ACPI_STATUS
-acpi_ds_load3_begin_op (
- u16 opcode,
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT **out_op);
-
-ACPI_STATUS
-acpi_ds_load3_end_op (
- ACPI_WALK_STATE *state,
- ACPI_PARSE_OBJECT *op);
-
-
-/* dsmthdat - method data (locals/args) */
-
-
-ACPI_STATUS
-acpi_ds_store_object_to_local (
- u16 opcode,
- u32 index,
- ACPI_OPERAND_OBJECT *src_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_method_data_get_entry (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT ***node);
-
-ACPI_STATUS
-acpi_ds_method_data_delete_all (
- ACPI_WALK_STATE *walk_state);
-
-u8
-acpi_ds_is_method_value (
- ACPI_OPERAND_OBJECT *obj_desc);
-
-OBJECT_TYPE_INTERNAL
-acpi_ds_method_data_get_type (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_method_data_get_value (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **dest_desc);
-
-ACPI_STATUS
-acpi_ds_method_data_delete_value (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_method_data_init_args (
- ACPI_OPERAND_OBJECT **params,
- u32 max_param_count,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_NAMESPACE_NODE *
-acpi_ds_method_data_get_node (
- u16 opcode,
- u32 index,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_method_data_init (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_method_data_set_entry (
- u16 opcode,
- u32 index,
- ACPI_OPERAND_OBJECT *object,
- ACPI_WALK_STATE *walk_state);
-
-
-/* dsmethod - Parser/Interpreter interface - control method parsing */
-
-ACPI_STATUS
-acpi_ds_parse_method (
- ACPI_HANDLE obj_handle);
-
-ACPI_STATUS
-acpi_ds_call_control_method (
- ACPI_WALK_LIST *walk_list,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-ACPI_STATUS
-acpi_ds_restart_control_method (
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT *return_desc);
-
-ACPI_STATUS
-acpi_ds_terminate_control_method (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_begin_method_execution (
- ACPI_NAMESPACE_NODE *method_node,
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_NAMESPACE_NODE *calling_method_node);
-
-
-/* dsobj - Parser/Interpreter interface - object initialization and conversion */
-
-ACPI_STATUS
-acpi_ds_init_one_object (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *context,
- void **return_value);
-
-ACPI_STATUS
-acpi_ds_initialize_objects (
- ACPI_TABLE_DESC *table_desc,
- ACPI_NAMESPACE_NODE *start_node);
-
-ACPI_STATUS
-acpi_ds_build_internal_package_obj (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- ACPI_OPERAND_OBJECT **obj_desc);
-
-ACPI_STATUS
-acpi_ds_build_internal_object (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- ACPI_OPERAND_OBJECT **obj_desc_ptr);
-
-ACPI_STATUS
-acpi_ds_init_object_from_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- u16 opcode,
- ACPI_OPERAND_OBJECT **obj_desc);
-
-ACPI_STATUS
-acpi_ds_create_node (
- ACPI_WALK_STATE *walk_state,
- ACPI_NAMESPACE_NODE *node,
- ACPI_PARSE_OBJECT *op);
-
-
-/* dsregn - Parser/Interpreter interface - Op Region parsing */
-
-ACPI_STATUS
-acpi_ds_eval_field_unit_operands (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-ACPI_STATUS
-acpi_ds_eval_region_operands (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op);
-
-ACPI_STATUS
-acpi_ds_initialize_region (
- ACPI_HANDLE obj_handle);
-
-
-/* dsutils - Parser/Interpreter interface utility routines */
-
-u8
-acpi_ds_is_result_used (
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state);
-
-void
-acpi_ds_delete_result_if_not_used (
- ACPI_PARSE_OBJECT *op,
- ACPI_OPERAND_OBJECT *result_obj,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_create_operand (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *arg,
- u32 args_remaining);
-
-ACPI_STATUS
-acpi_ds_create_operands (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *first_arg);
-
-ACPI_STATUS
-acpi_ds_resolve_operands (
- ACPI_WALK_STATE *walk_state);
-
-OBJECT_TYPE_INTERNAL
-acpi_ds_map_opcode_to_data_type (
- u16 opcode,
- u32 *out_flags);
-
-OBJECT_TYPE_INTERNAL
-acpi_ds_map_named_opcode_to_data_type (
- u16 opcode);
-
-
-/*
- * dswscope - Scope Stack manipulation
- */
-
-ACPI_STATUS
-acpi_ds_scope_stack_push (
- ACPI_NAMESPACE_NODE *node,
- OBJECT_TYPE_INTERNAL type,
- ACPI_WALK_STATE *walk_state);
-
-
-ACPI_STATUS
-acpi_ds_scope_stack_pop (
- ACPI_WALK_STATE *walk_state);
-
-void
-acpi_ds_scope_stack_clear (
- ACPI_WALK_STATE *walk_state);
-
-
-/* Acpi_dswstate - parser WALK_STATE management routines */
-
-ACPI_WALK_STATE *
-acpi_ds_create_walk_state (
- ACPI_OWNER_ID owner_id,
- ACPI_PARSE_OBJECT *origin,
- ACPI_OPERAND_OBJECT *mth_desc,
- ACPI_WALK_LIST *walk_list);
-
-ACPI_STATUS
-acpi_ds_obj_stack_delete_all (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_obj_stack_pop_and_delete (
- u32 pop_count,
- ACPI_WALK_STATE *walk_state);
-
-void
-acpi_ds_delete_walk_state (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_WALK_STATE *
-acpi_ds_pop_walk_state (
- ACPI_WALK_LIST *walk_list);
-
-ACPI_STATUS
-acpi_ds_result_stack_pop (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_result_stack_push (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_result_stack_clear (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_WALK_STATE *
-acpi_ds_get_current_walk_state (
- ACPI_WALK_LIST *walk_list);
-
-void
-acpi_ds_delete_walk_state_cache (
- void);
-
-ACPI_STATUS
-acpi_ds_result_insert (
- void *object,
- u32 index,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_result_remove (
- ACPI_OPERAND_OBJECT **object,
- u32 index,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_result_pop (
- ACPI_OPERAND_OBJECT **object,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_result_push (
- ACPI_OPERAND_OBJECT *object,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ds_result_pop_from_bottom (
- ACPI_OPERAND_OBJECT **object,
- ACPI_WALK_STATE *walk_state);
-
-#endif /* _ACDISPAT_H_ */
diff --git a/reactos/drivers/bus/acpi/include/acevents.h b/reactos/drivers/bus/acpi/include/acevents.h
deleted file mode 100644
index 4f54d645a4c..00000000000
--- a/reactos/drivers/bus/acpi/include/acevents.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/******************************************************************************
- *
- * Name: acevents.h - Event subcomponent prototypes and defines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACEVENTS_H__
-#define __ACEVENTS_H__
-
-
-ACPI_STATUS
-acpi_ev_initialize (
- void);
-
-
-/*
- * Acpi_evfixed - Fixed event handling
- */
-
-ACPI_STATUS
-acpi_ev_fixed_event_initialize (
- void);
-
-u32
-acpi_ev_fixed_event_detect (
- void);
-
-u32
-acpi_ev_fixed_event_dispatch (
- u32 acpi_event);
-
-
-/*
- * Acpi_evglock - Global Lock support
- */
-
-ACPI_STATUS
-acpi_ev_acquire_global_lock(
- void);
-
-void
-acpi_ev_release_global_lock(
- void);
-
-ACPI_STATUS
-acpi_ev_init_global_lock_handler (
- void);
-
-
-/*
- * Acpi_evgpe - GPE handling and dispatch
- */
-
-ACPI_STATUS
-acpi_ev_gpe_initialize (
- void);
-
-ACPI_STATUS
-acpi_ev_init_gpe_control_methods (
- void);
-
-u32
-acpi_ev_gpe_dispatch (
- u32 gpe_number);
-
-u32
-acpi_ev_gpe_detect (
- void);
-
-
-/*
- * Acpi_evnotify - Device Notify handling and dispatch
- */
-
-ACPI_STATUS
-acpi_ev_queue_notify_request (
- ACPI_NAMESPACE_NODE *node,
- u32 notify_value);
-
-void
-acpi_ev_notify_dispatch (
- void *context);
-
-/*
- * Acpi_evregion - Address Space handling
- */
-
-ACPI_STATUS
-acpi_ev_install_default_address_space_handlers (
- void);
-
-ACPI_STATUS
-acpi_ev_address_space_dispatch (
- ACPI_OPERAND_OBJECT *region_obj,
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value);
-
-
-ACPI_STATUS
-acpi_ev_addr_handler_helper (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *context,
- void **return_value);
-
-void
-acpi_ev_disassociate_region_from_handler(
- ACPI_OPERAND_OBJECT *region_obj,
- u8 acpi_ns_is_locked);
-
-
-ACPI_STATUS
-acpi_ev_associate_region_and_handler (
- ACPI_OPERAND_OBJECT *handler_obj,
- ACPI_OPERAND_OBJECT *region_obj,
- u8 acpi_ns_is_locked);
-
-
-/*
- * Acpi_evregini - Region initialization and setup
- */
-
-ACPI_STATUS
-acpi_ev_system_memory_region_setup (
- ACPI_HANDLE handle,
- u32 function,
- void *handler_context,
- void **region_context);
-
-ACPI_STATUS
-acpi_ev_io_space_region_setup (
- ACPI_HANDLE handle,
- u32 function,
- void *handler_context,
- void **region_context);
-
-ACPI_STATUS
-acpi_ev_pci_config_region_setup (
- ACPI_HANDLE handle,
- u32 function,
- void *handler_context,
- void **region_context);
-
-ACPI_STATUS
-acpi_ev_default_region_setup (
- ACPI_HANDLE handle,
- u32 function,
- void *handler_context,
- void **region_context);
-
-ACPI_STATUS
-acpi_ev_initialize_region (
- ACPI_OPERAND_OBJECT *region_obj,
- u8 acpi_ns_locked);
-
-
-/*
- * Evsci - SCI (System Control Interrupt) handling/dispatch
- */
-
-u32
-acpi_ev_install_sci_handler (
- void);
-
-ACPI_STATUS
-acpi_ev_remove_sci_handler (
- void);
-
-u32
-acpi_ev_initialize_sCI (
- u32 program_sCI);
-
-void
-acpi_ev_restore_acpi_state (
- void);
-
-void
-acpi_ev_terminate (
- void);
-
-
-#endif /* __ACEVENTS_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acexcep.h b/reactos/drivers/bus/acpi/include/acexcep.h
deleted file mode 100644
index 82089e31079..00000000000
--- a/reactos/drivers/bus/acpi/include/acexcep.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/******************************************************************************
- *
- * Name: acexcep.h - Exception codes returned by the ACPI subsystem
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACEXCEP_H__
-#define __ACEXCEP_H__
-
-
-/*
- * Exceptions returned by external ACPI interfaces
- */
-
-#define AE_CODE_ENVIRONMENTAL 0x0000
-#define AE_CODE_PROGRAMMER 0x1000
-#define AE_CODE_ACPI_TABLES 0x2000
-#define AE_CODE_AML 0x3000
-#define AE_CODE_CONTROL 0x4000
-#define AE_CODE_MASK 0xF000
-
-
-#define ACPI_SUCCESS(a) (!(a))
-#define ACPI_FAILURE(a) (a)
-
-
-#define AE_OK (ACPI_STATUS) 0x0000
-
-/*
- * Environmental exceptions
- */
-#define AE_ERROR (ACPI_STATUS) (0x0001 | AE_CODE_ENVIRONMENTAL)
-#define AE_NO_ACPI_TABLES (ACPI_STATUS) (0x0002 | AE_CODE_ENVIRONMENTAL)
-#define AE_NO_NAMESPACE (ACPI_STATUS) (0x0003 | AE_CODE_ENVIRONMENTAL)
-#define AE_NO_MEMORY (ACPI_STATUS) (0x0004 | AE_CODE_ENVIRONMENTAL)
-#define AE_NOT_FOUND (ACPI_STATUS) (0x0005 | AE_CODE_ENVIRONMENTAL)
-#define AE_NOT_EXIST (ACPI_STATUS) (0x0006 | AE_CODE_ENVIRONMENTAL)
-#define AE_EXIST (ACPI_STATUS) (0x0007 | AE_CODE_ENVIRONMENTAL)
-#define AE_TYPE (ACPI_STATUS) (0x0008 | AE_CODE_ENVIRONMENTAL)
-#define AE_NULL_OBJECT (ACPI_STATUS) (0x0009 | AE_CODE_ENVIRONMENTAL)
-#define AE_NULL_ENTRY (ACPI_STATUS) (0x000A | AE_CODE_ENVIRONMENTAL)
-#define AE_BUFFER_OVERFLOW (ACPI_STATUS) (0x000B | AE_CODE_ENVIRONMENTAL)
-#define AE_STACK_OVERFLOW (ACPI_STATUS) (0x000C | AE_CODE_ENVIRONMENTAL)
-#define AE_STACK_UNDERFLOW (ACPI_STATUS) (0x000D | AE_CODE_ENVIRONMENTAL)
-#define AE_NOT_IMPLEMENTED (ACPI_STATUS) (0x000E | AE_CODE_ENVIRONMENTAL)
-#define AE_VERSION_MISMATCH (ACPI_STATUS) (0x000F | AE_CODE_ENVIRONMENTAL)
-#define AE_SUPPORT (ACPI_STATUS) (0x0010 | AE_CODE_ENVIRONMENTAL)
-#define AE_SHARE (ACPI_STATUS) (0x0011 | AE_CODE_ENVIRONMENTAL)
-#define AE_LIMIT (ACPI_STATUS) (0x0012 | AE_CODE_ENVIRONMENTAL)
-#define AE_TIME (ACPI_STATUS) (0x0013 | AE_CODE_ENVIRONMENTAL)
-#define AE_UNKNOWN_STATUS (ACPI_STATUS) (0x0014 | AE_CODE_ENVIRONMENTAL)
-#define AE_ACQUIRE_DEADLOCK (ACPI_STATUS) (0x0015 | AE_CODE_ENVIRONMENTAL)
-#define AE_RELEASE_DEADLOCK (ACPI_STATUS) (0x0016 | AE_CODE_ENVIRONMENTAL)
-#define AE_NOT_ACQUIRED (ACPI_STATUS) (0x0017 | AE_CODE_ENVIRONMENTAL)
-#define AE_ALREADY_ACQUIRED (ACPI_STATUS) (0x0018 | AE_CODE_ENVIRONMENTAL)
-#define AE_NO_HARDWARE_RESPONSE (ACPI_STATUS) (0x0019 | AE_CODE_ENVIRONMENTAL)
-#define AE_NO_GLOBAL_LOCK (ACPI_STATUS) (0x001A | AE_CODE_ENVIRONMENTAL)
-
-#define AE_CODE_ENV_MAX 0x001A
-
-/*
- * Programmer exceptions
- */
-#define AE_BAD_PARAMETER (ACPI_STATUS) (0x0001 | AE_CODE_PROGRAMMER)
-#define AE_BAD_CHARACTER (ACPI_STATUS) (0x0002 | AE_CODE_PROGRAMMER)
-#define AE_BAD_PATHNAME (ACPI_STATUS) (0x0003 | AE_CODE_PROGRAMMER)
-#define AE_BAD_DATA (ACPI_STATUS) (0x0004 | AE_CODE_PROGRAMMER)
-#define AE_BAD_ADDRESS (ACPI_STATUS) (0x0005 | AE_CODE_PROGRAMMER)
-
-#define AE_CODE_PGM_MAX 0x0005
-
-
-/*
- * Acpi table exceptions
- */
-#define AE_BAD_SIGNATURE (ACPI_STATUS) (0x0001 | AE_CODE_ACPI_TABLES)
-#define AE_BAD_HEADER (ACPI_STATUS) (0x0002 | AE_CODE_ACPI_TABLES)
-#define AE_BAD_CHECKSUM (ACPI_STATUS) (0x0003 | AE_CODE_ACPI_TABLES)
-#define AE_BAD_VALUE (ACPI_STATUS) (0x0004 | AE_CODE_ACPI_TABLES)
-
-#define AE_CODE_TBL_MAX 0x0003
-
-
-/*
- * AML exceptions. These are caused by problems with
- * the actual AML byte stream
- */
-#define AE_AML_ERROR (ACPI_STATUS) (0x0001 | AE_CODE_AML)
-#define AE_AML_PARSE (ACPI_STATUS) (0x0002 | AE_CODE_AML)
-#define AE_AML_BAD_OPCODE (ACPI_STATUS) (0x0003 | AE_CODE_AML)
-#define AE_AML_NO_OPERAND (ACPI_STATUS) (0x0004 | AE_CODE_AML)
-#define AE_AML_OPERAND_TYPE (ACPI_STATUS) (0x0005 | AE_CODE_AML)
-#define AE_AML_OPERAND_VALUE (ACPI_STATUS) (0x0006 | AE_CODE_AML)
-#define AE_AML_UNINITIALIZED_LOCAL (ACPI_STATUS) (0x0007 | AE_CODE_AML)
-#define AE_AML_UNINITIALIZED_ARG (ACPI_STATUS) (0x0008 | AE_CODE_AML)
-#define AE_AML_UNINITIALIZED_ELEMENT (ACPI_STATUS) (0x0009 | AE_CODE_AML)
-#define AE_AML_NUMERIC_OVERFLOW (ACPI_STATUS) (0x000A | AE_CODE_AML)
-#define AE_AML_REGION_LIMIT (ACPI_STATUS) (0x000B | AE_CODE_AML)
-#define AE_AML_BUFFER_LIMIT (ACPI_STATUS) (0x000C | AE_CODE_AML)
-#define AE_AML_PACKAGE_LIMIT (ACPI_STATUS) (0x000D | AE_CODE_AML)
-#define AE_AML_DIVIDE_BY_ZERO (ACPI_STATUS) (0x000E | AE_CODE_AML)
-#define AE_AML_BAD_NAME (ACPI_STATUS) (0x000F | AE_CODE_AML)
-#define AE_AML_NAME_NOT_FOUND (ACPI_STATUS) (0x0010 | AE_CODE_AML)
-#define AE_AML_INTERNAL (ACPI_STATUS) (0x0011 | AE_CODE_AML)
-#define AE_AML_INVALID_SPACE_ID (ACPI_STATUS) (0x0012 | AE_CODE_AML)
-#define AE_AML_STRING_LIMIT (ACPI_STATUS) (0x0013 | AE_CODE_AML)
-#define AE_AML_NO_RETURN_VALUE (ACPI_STATUS) (0x0014 | AE_CODE_AML)
-#define AE_AML_METHOD_LIMIT (ACPI_STATUS) (0x0015 | AE_CODE_AML)
-#define AE_AML_NOT_OWNER (ACPI_STATUS) (0x0016 | AE_CODE_AML)
-#define AE_AML_MUTEX_ORDER (ACPI_STATUS) (0x0017 | AE_CODE_AML)
-#define AE_AML_MUTEX_NOT_ACQUIRED (ACPI_STATUS) (0x0018 | AE_CODE_AML)
-
-#define AE_CODE_AML_MAX 0x0018
-
-/*
- * Internal exceptions used for control
- */
-#define AE_CTRL_RETURN_VALUE (ACPI_STATUS) (0x0001 | AE_CODE_CONTROL)
-#define AE_CTRL_PENDING (ACPI_STATUS) (0x0002 | AE_CODE_CONTROL)
-#define AE_CTRL_TERMINATE (ACPI_STATUS) (0x0003 | AE_CODE_CONTROL)
-#define AE_CTRL_TRUE (ACPI_STATUS) (0x0004 | AE_CODE_CONTROL)
-#define AE_CTRL_FALSE (ACPI_STATUS) (0x0005 | AE_CODE_CONTROL)
-#define AE_CTRL_DEPTH (ACPI_STATUS) (0x0006 | AE_CODE_CONTROL)
-#define AE_CTRL_END (ACPI_STATUS) (0x0007 | AE_CODE_CONTROL)
-#define AE_CTRL_TRANSFER (ACPI_STATUS) (0x0008 | AE_CODE_CONTROL)
-
-#define AE_CODE_CTRL_MAX 0x0008
-
-
-
-#endif /* __ACEXCEP_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acglobal.h b/reactos/drivers/bus/acpi/include/acglobal.h
deleted file mode 100644
index 92446bef0e5..00000000000
--- a/reactos/drivers/bus/acpi/include/acglobal.h
+++ /dev/null
@@ -1,301 +0,0 @@
-/******************************************************************************
- *
- * Name: acglobal.h - Declarations for global variables
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACGLOBAL_H__
-#define __ACGLOBAL_H__
-
-
-/*
- * Ensure that the globals are actually defined only once.
- *
- * The use of these defines allows a single list of globals (here) in order
- * to simplify maintenance of the code.
- */
-#ifdef DEFINE_ACPI_GLOBALS
-#define ACPI_EXTERN
-#else
-#define ACPI_EXTERN extern
-#endif
-
-
-extern NATIVE_CHAR *msg_acpi_error_break;
-
-/*****************************************************************************
- *
- * Debug support
- *
- ****************************************************************************/
-
-/* Runtime configuration of debug print levels */
-
-extern u32 acpi_dbg_level;
-extern u32 acpi_dbg_layer;
-
-
-/* Procedure nesting level for debug output */
-
-extern u32 acpi_gbl_nesting_level;
-
-
-/*****************************************************************************
- *
- * ACPI Table globals
- *
- ****************************************************************************/
-
-/*
- * Table pointers.
- * Although these pointers are somewhat redundant with the global Acpi_table,
- * they are convenient because they are typed pointers.
- *
- * These tables are single-table only; meaning that there can be at most one
- * of each in the system. Each global points to the actual table.
- *
- */
-ACPI_EXTERN RSDP_DESCRIPTOR *acpi_gbl_RSDP;
-ACPI_EXTERN XSDT_DESCRIPTOR *acpi_gbl_XSDT;
-ACPI_EXTERN FADT_DESCRIPTOR *acpi_gbl_FADT;
-ACPI_EXTERN ACPI_TABLE_HEADER *acpi_gbl_DSDT;
-ACPI_EXTERN ACPI_COMMON_FACS *acpi_gbl_FACS;
-
-/*
- * Since there may be multiple SSDTs and PSDTS, a single pointer is not
- * sufficient; Therefore, there isn't one!
- */
-
-
-/*
- * ACPI Table info arrays
- */
-extern ACPI_TABLE_DESC acpi_gbl_acpi_tables[NUM_ACPI_TABLES];
-extern ACPI_TABLE_SUPPORT acpi_gbl_acpi_table_data[NUM_ACPI_TABLES];
-
-/*
- * Predefined mutex objects. This array contains the
- * actual OS mutex handles, indexed by the local ACPI_MUTEX_HANDLEs.
- * (The table maps local handles to the real OS handles)
- */
-ACPI_EXTERN ACPI_MUTEX_INFO acpi_gbl_acpi_mutex_info [NUM_MTX];
-
-
-/*****************************************************************************
- *
- * Miscellaneous globals
- *
- ****************************************************************************/
-
-
-ACPI_EXTERN u8 *acpi_gbl_gpe0enable_register_save;
-ACPI_EXTERN u8 *acpi_gbl_gpe1_enable_register_save;
-ACPI_EXTERN ACPI_WALK_STATE *acpi_gbl_breakpoint_walk;
-ACPI_EXTERN ACPI_GENERIC_STATE *acpi_gbl_generic_state_cache;
-ACPI_EXTERN ACPI_PARSE_OBJECT *acpi_gbl_parse_cache;
-ACPI_EXTERN ACPI_PARSE2_OBJECT *acpi_gbl_ext_parse_cache;
-ACPI_EXTERN ACPI_OPERAND_OBJECT *acpi_gbl_object_cache;
-ACPI_EXTERN ACPI_WALK_STATE *acpi_gbl_walk_state_cache;
-ACPI_EXTERN ACPI_HANDLE acpi_gbl_global_lock_semaphore;
-
-
-ACPI_EXTERN u32 acpi_gbl_global_lock_thread_count;
-ACPI_EXTERN u32 acpi_gbl_restore_acpi_chipset;
-ACPI_EXTERN u32 acpi_gbl_original_mode;
-ACPI_EXTERN u32 acpi_gbl_edge_level_save;
-ACPI_EXTERN u32 acpi_gbl_irq_enable_save;
-ACPI_EXTERN u32 acpi_gbl_rsdp_original_location;
-
-ACPI_EXTERN u32 acpi_gbl_state_cache_requests;
-ACPI_EXTERN u32 acpi_gbl_state_cache_hits;
-ACPI_EXTERN u32 acpi_gbl_parse_cache_requests;
-ACPI_EXTERN u32 acpi_gbl_parse_cache_hits;
-ACPI_EXTERN u32 acpi_gbl_ext_parse_cache_requests;
-ACPI_EXTERN u32 acpi_gbl_ext_parse_cache_hits;
-ACPI_EXTERN u32 acpi_gbl_object_cache_requests;
-ACPI_EXTERN u32 acpi_gbl_object_cache_hits;
-ACPI_EXTERN u32 acpi_gbl_walk_state_cache_requests;
-ACPI_EXTERN u32 acpi_gbl_walk_state_cache_hits;
-ACPI_EXTERN u32 acpi_gbl_ns_lookup_count;
-ACPI_EXTERN u32 acpi_gbl_ps_find_count;
-
-
-ACPI_EXTERN u16 acpi_gbl_generic_state_cache_depth;
-ACPI_EXTERN u16 acpi_gbl_parse_cache_depth;
-ACPI_EXTERN u16 acpi_gbl_ext_parse_cache_depth;
-ACPI_EXTERN u16 acpi_gbl_object_cache_depth;
-ACPI_EXTERN u16 acpi_gbl_walk_state_cache_depth;
-ACPI_EXTERN u16 acpi_gbl_pm1_enable_register_save;
-ACPI_EXTERN u16 acpi_gbl_next_table_owner_id;
-ACPI_EXTERN u16 acpi_gbl_next_method_owner_id;
-
-ACPI_EXTERN u8 acpi_gbl_debugger_configuration;
-ACPI_EXTERN u8 acpi_gbl_global_lock_acquired;
-ACPI_EXTERN u8 acpi_gbl_step_to_next_call;
-ACPI_EXTERN u8 acpi_gbl_acpi_hardware_present;
-ACPI_EXTERN u8 acpi_gbl_global_lock_present;
-
-ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER acpi_gbl_drv_notify;
-ACPI_EXTERN ACPI_OBJECT_NOTIFY_HANDLER acpi_gbl_sys_notify;
-
-
-extern u8 acpi_gbl_shutdown;
-extern u32 acpi_gbl_system_flags;
-extern u32 acpi_gbl_startup_flags;
-extern u8 acpi_gbl_decode_to8bit[8];
-extern NATIVE_CHAR acpi_gbl_hex_to_ascii[16];
-
-
-/*****************************************************************************
- *
- * Namespace globals
- *
- ****************************************************************************/
-
-#define NUM_NS_TYPES INTERNAL_TYPE_INVALID+1
-#define NUM_PREDEFINED_NAMES 9
-
-
-ACPI_EXTERN ACPI_NAMESPACE_NODE acpi_gbl_root_node_struct;
-ACPI_EXTERN ACPI_NAMESPACE_NODE *acpi_gbl_root_node;
-
-extern u8 acpi_gbl_ns_properties[NUM_NS_TYPES];
-extern PREDEFINED_NAMES acpi_gbl_pre_defined_names [NUM_PREDEFINED_NAMES];
-
-
-/* Used to detect memory leaks (DEBUG ONLY) */
-
-#ifdef ACPI_DEBUG
-ACPI_EXTERN ALLOCATION_INFO *acpi_gbl_head_alloc_ptr;
-ACPI_EXTERN ALLOCATION_INFO *acpi_gbl_tail_alloc_ptr;
-#endif
-
-
-/*****************************************************************************
- *
- * Interpreter globals
- *
- ****************************************************************************/
-
-
-ACPI_EXTERN ACPI_WALK_LIST *acpi_gbl_current_walk_list;
-
-/*
- * Handle to the last method found - used during pass1 of load
- */
-ACPI_EXTERN ACPI_HANDLE acpi_gbl_last_method;
-
-/*
- * Table of Address Space handlers
- */
-
-ACPI_EXTERN ACPI_ADDRESS_SPACE_INFO acpi_gbl_address_spaces[ACPI_NUM_ADDRESS_SPACES];
-
-
-/* Control method single step flag */
-
-ACPI_EXTERN u8 acpi_gbl_cm_single_step;
-
-
-/*****************************************************************************
- *
- * Parser globals
- *
- ****************************************************************************/
-
-ACPI_EXTERN ACPI_PARSE_OBJECT *acpi_gbl_parsed_namespace_root;
-
-/*****************************************************************************
- *
- * Hardware globals
- *
- ****************************************************************************/
-
-extern ACPI_C_STATE_HANDLER acpi_hw_cx_handlers[MAX_CX_STATES];
-extern u32 acpi_hw_active_cx_state;
-
-
-/*****************************************************************************
- *
- * Event globals
- *
- ****************************************************************************/
-
-ACPI_EXTERN ACPI_FIXED_EVENT_INFO acpi_gbl_fixed_event_handlers[NUM_FIXED_EVENTS];
-
-ACPI_EXTERN ACPI_HANDLE acpi_gbl_gpe_obj_handle;
-ACPI_EXTERN u32 acpi_gbl_gpe_register_count;
-ACPI_EXTERN ACPI_GPE_REGISTERS *acpi_gbl_gpe_registers;
-ACPI_EXTERN ACPI_GPE_LEVEL_INFO *acpi_gbl_gpe_info;
-
-/*
- * Gpe validation and translation table
- * Indexed by the GPE number, returns GPE_INVALID if the GPE is not supported.
- * Otherwise, returns a valid index into the global GPE table.
- *
- * This table is needed because the GPE numbers supported by block 1 do not
- * have to be contiguous with the GPE numbers supported by block 0.
- */
-ACPI_EXTERN u8 acpi_gbl_gpe_valid [NUM_GPE];
-
-/* Acpi_event counter for debug only */
-
-#ifdef ACPI_DEBUG
-ACPI_EXTERN u32 acpi_gbl_event_count[NUM_FIXED_EVENTS];
-#endif
-
-
-/*****************************************************************************
- *
- * Debugger globals
- *
- ****************************************************************************/
-
-#ifdef ENABLE_DEBUGGER
-ACPI_EXTERN u8 acpi_gbl_method_executing;
-ACPI_EXTERN u8 acpi_gbl_db_terminate_threads;
-#endif
-
-/* Memory allocation metrics - Debug Only! */
-
-#ifdef ACPI_DEBUG
-
-ACPI_EXTERN u32 acpi_gbl_current_alloc_size;
-ACPI_EXTERN u32 acpi_gbl_current_alloc_count;
-ACPI_EXTERN u32 acpi_gbl_running_alloc_size;
-ACPI_EXTERN u32 acpi_gbl_running_alloc_count;
-ACPI_EXTERN u32 acpi_gbl_max_concurrent_alloc_size;
-ACPI_EXTERN u32 acpi_gbl_max_concurrent_alloc_count;
-ACPI_EXTERN u32 acpi_gbl_current_object_count;
-ACPI_EXTERN u32 acpi_gbl_current_object_size;
-ACPI_EXTERN u32 acpi_gbl_max_concurrent_object_count;
-ACPI_EXTERN u32 acpi_gbl_max_concurrent_object_size;
-ACPI_EXTERN u32 acpi_gbl_running_object_count;
-ACPI_EXTERN u32 acpi_gbl_running_object_size;
-ACPI_EXTERN u32 acpi_gbl_current_node_count;
-ACPI_EXTERN u32 acpi_gbl_current_node_size;
-ACPI_EXTERN u32 acpi_gbl_max_concurrent_node_count;
-
-#endif
-
-
-#endif /* __ACGLOBAL_H__ */
diff --git a/reactos/drivers/bus/acpi/include/achware.h b/reactos/drivers/bus/acpi/include/achware.h
deleted file mode 100644
index 412b91eb6a0..00000000000
--- a/reactos/drivers/bus/acpi/include/achware.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/******************************************************************************
- *
- * Name: achware.h -- hardware specific interfaces
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACHWARE_H__
-#define __ACHWARE_H__
-
-
-/* PM Timer ticks per second (HZ) */
-#define PM_TIMER_FREQUENCY 3579545
-
-
-/* Prototypes */
-
-
-ACPI_STATUS
-acpi_hw_initialize (
- void);
-
-ACPI_STATUS
-acpi_hw_shutdown (
- void);
-
-ACPI_STATUS
-acpi_hw_initialize_system_info (
- void);
-
-ACPI_STATUS
-acpi_hw_set_mode (
- u32 mode);
-
-u32
-acpi_hw_get_mode (
- void);
-
-u32
-acpi_hw_get_mode_capabilities (
- void);
-
-/* Register I/O Prototypes */
-
-
-u32
-acpi_hw_register_bit_access (
- NATIVE_UINT read_write,
- u8 use_lock,
- u32 register_id,
- ... /* DWORD Write Value */);
-
-u32
-acpi_hw_register_read (
- u8 use_lock,
- u32 register_id);
-
-void
-acpi_hw_register_write (
- u8 use_lock,
- u32 register_id,
- u32 value);
-
-u32
-acpi_hw_low_level_read (
- u32 width,
- ACPI_GAS *reg,
- u32 offset);
-
-void
-acpi_hw_low_level_write (
- u32 width,
- u32 value,
- ACPI_GAS *reg,
- u32 offset);
-
-void
-acpi_hw_clear_acpi_status (
- void);
-
-u32
-acpi_hw_get_bit_shift (
- u32 mask);
-
-
-/* GPE support */
-
-void
-acpi_hw_enable_gpe (
- u32 gpe_index);
-
-void
-acpi_hw_disable_gpe (
- u32 gpe_index);
-
-void
-acpi_hw_clear_gpe (
- u32 gpe_index);
-
-void
-acpi_hw_get_gpe_status (
- u32 gpe_number,
- ACPI_EVENT_STATUS *event_status);
-
-/* Sleep Prototypes */
-
-ACPI_STATUS
-acpi_hw_obtain_sleep_type_register_data (
- u8 sleep_state,
- u8 *slp_typ_a,
- u8 *slp_typ_b);
-
-
-/* ACPI Timer prototypes */
-
-ACPI_STATUS
-acpi_get_timer_resolution (
- u32 *resolution);
-
-ACPI_STATUS
-acpi_get_timer (
- u32 *ticks);
-
-ACPI_STATUS
-acpi_get_timer_duration (
- u32 start_ticks,
- u32 end_ticks,
- u32 *time_elapsed);
-
-
-#endif /* __ACHWARE_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acinterp.h b/reactos/drivers/bus/acpi/include/acinterp.h
deleted file mode 100644
index 177dd3f2c87..00000000000
--- a/reactos/drivers/bus/acpi/include/acinterp.h
+++ /dev/null
@@ -1,632 +0,0 @@
-/******************************************************************************
- *
- * Name: acinterp.h - Interpreter subcomponent prototypes and defines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACINTERP_H__
-#define __ACINTERP_H__
-
-
-#define WALK_OPERANDS &(walk_state->operands [walk_state->num_operands -1])
-
-
-/* Interpreter constants */
-
-#define AML_END_OF_BLOCK -1
-#define PUSH_PKG_LENGTH 1
-#define DO_NOT_PUSH_PKG_LENGTH 0
-
-
-#define STACK_TOP 0
-#define STACK_BOTTOM (u32) -1
-
-/* Constants for global "When_to_parse_methods" */
-
-#define METHOD_PARSE_AT_INIT 0x0
-#define METHOD_PARSE_JUST_IN_TIME 0x1
-#define METHOD_DELETE_AT_COMPLETION 0x2
-
-
-ACPI_STATUS
-acpi_aml_resolve_operands (
- u16 opcode,
- ACPI_OPERAND_OBJECT **stack_ptr,
- ACPI_WALK_STATE *walk_state);
-
-
-/*
- * amxface - External interpreter interfaces
- */
-
-ACPI_STATUS
-acpi_aml_load_table (
- ACPI_TABLE_TYPE table_id);
-
-ACPI_STATUS
-acpi_aml_execute_method (
- ACPI_NAMESPACE_NODE *method_node,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_obj_desc);
-
-
-/*
- * amconvrt - object conversion
- */
-
-ACPI_STATUS
-acpi_aml_convert_to_integer (
- ACPI_OPERAND_OBJECT **obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_convert_to_buffer (
- ACPI_OPERAND_OBJECT **obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_convert_to_string (
- ACPI_OPERAND_OBJECT **obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_convert_to_target_type (
- OBJECT_TYPE_INTERNAL destination_type,
- ACPI_OPERAND_OBJECT **obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-
-/*
- * amfield - ACPI AML (p-code) execution - field manipulation
- */
-
-ACPI_STATUS
-acpi_aml_read_field (
- ACPI_OPERAND_OBJECT *obj_desc,
- void *buffer,
- u32 buffer_length,
- u32 byte_length,
- u32 datum_length,
- u32 bit_granularity,
- u32 byte_granularity);
-
-ACPI_STATUS
-acpi_aml_write_field (
- ACPI_OPERAND_OBJECT *obj_desc,
- void *buffer,
- u32 buffer_length,
- u32 byte_length,
- u32 datum_length,
- u32 bit_granularity,
- u32 byte_granularity);
-
-ACPI_STATUS
-acpi_aml_setup_field (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_OPERAND_OBJECT *rgn_desc,
- u32 field_bit_width);
-
-ACPI_STATUS
-acpi_aml_read_field_data (
- ACPI_OPERAND_OBJECT *obj_desc,
- u32 field_byte_offset,
- u32 field_bit_width,
- u32 *value);
-
-ACPI_STATUS
-acpi_aml_access_named_field (
- u32 mode,
- ACPI_HANDLE named_field,
- void *buffer,
- u32 length);
-
-/*
- * ammisc - ACPI AML (p-code) execution - specific opcodes
- */
-
-ACPI_STATUS
-acpi_aml_exec_create_field (
- u8 *aml_ptr,
- u32 aml_length,
- ACPI_NAMESPACE_NODE *node,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_reconfiguration (
- u16 opcode,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_fatal (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_index (
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc);
-
-ACPI_STATUS
-acpi_aml_exec_match (
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc);
-
-ACPI_STATUS
-acpi_aml_exec_create_mutex (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_create_processor (
- ACPI_PARSE_OBJECT *op,
- ACPI_HANDLE processor_nTE);
-
-ACPI_STATUS
-acpi_aml_exec_create_power_resource (
- ACPI_PARSE_OBJECT *op,
- ACPI_HANDLE processor_nTE);
-
-ACPI_STATUS
-acpi_aml_exec_create_region (
- u8 *aml_ptr,
- u32 acpi_aml_length,
- u8 region_space,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_create_event (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_create_alias (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_create_method (
- u8 *aml_ptr,
- u32 acpi_aml_length,
- u32 method_flags,
- ACPI_HANDLE method);
-
-
-/*
- * ammutex - mutex support
- */
-
-ACPI_STATUS
-acpi_aml_acquire_mutex (
- ACPI_OPERAND_OBJECT *time_desc,
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_release_mutex (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_release_all_mutexes (
- ACPI_OPERAND_OBJECT *mutex_list);
-
-void
-acpi_aml_unlink_mutex (
- ACPI_OPERAND_OBJECT *obj_desc);
-
-
-/*
- * amprep - ACPI AML (p-code) execution - prep utilities
- */
-
-ACPI_STATUS
-acpi_aml_prep_def_field_value (
- ACPI_NAMESPACE_NODE *node,
- ACPI_HANDLE region,
- u8 field_flags,
- u8 field_attribute,
- u32 field_position,
- u32 field_length);
-
-ACPI_STATUS
-acpi_aml_prep_bank_field_value (
- ACPI_NAMESPACE_NODE *node,
- ACPI_HANDLE region,
- ACPI_HANDLE bank_reg,
- u32 bank_val,
- u8 field_flags,
- u8 field_attribute,
- u32 field_position,
- u32 field_length);
-
-ACPI_STATUS
-acpi_aml_prep_index_field_value (
- ACPI_NAMESPACE_NODE *node,
- ACPI_HANDLE index_reg,
- ACPI_HANDLE data_reg,
- u8 field_flags,
- u8 field_attribute,
- u32 field_position,
- u32 field_length);
-
-
-/*
- * amsystem - Interface to OS services
- */
-
-ACPI_STATUS
-acpi_aml_system_do_notify_op (
- ACPI_OPERAND_OBJECT *value,
- ACPI_OPERAND_OBJECT *obj_desc);
-
-void
-acpi_aml_system_do_suspend(
- u32 time);
-
-void
-acpi_aml_system_do_stall (
- u32 time);
-
-ACPI_STATUS
-acpi_aml_system_acquire_mutex(
- ACPI_OPERAND_OBJECT *time,
- ACPI_OPERAND_OBJECT *obj_desc);
-
-ACPI_STATUS
-acpi_aml_system_release_mutex(
- ACPI_OPERAND_OBJECT *obj_desc);
-
-ACPI_STATUS
-acpi_aml_system_signal_event(
- ACPI_OPERAND_OBJECT *obj_desc);
-
-ACPI_STATUS
-acpi_aml_system_wait_event(
- ACPI_OPERAND_OBJECT *time,
- ACPI_OPERAND_OBJECT *obj_desc);
-
-ACPI_STATUS
-acpi_aml_system_reset_event(
- ACPI_OPERAND_OBJECT *obj_desc);
-
-ACPI_STATUS
-acpi_aml_system_wait_semaphore (
- ACPI_HANDLE semaphore,
- u32 timeout);
-
-
-/*
- * ammonadic - ACPI AML (p-code) execution, monadic operators
- */
-
-ACPI_STATUS
-acpi_aml_exec_monadic1 (
- u16 opcode,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_monadic2 (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc);
-
-ACPI_STATUS
-acpi_aml_exec_monadic2_r (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc);
-
-
-/*
- * amdyadic - ACPI AML (p-code) execution, dyadic operators
- */
-
-ACPI_STATUS
-acpi_aml_exec_dyadic1 (
- u16 opcode,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_exec_dyadic2 (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc);
-
-ACPI_STATUS
-acpi_aml_exec_dyadic2_r (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc);
-
-ACPI_STATUS
-acpi_aml_exec_dyadic2_s (
- u16 opcode,
- ACPI_WALK_STATE *walk_state,
- ACPI_OPERAND_OBJECT **return_desc);
-
-
-/*
- * amresolv - Object resolution and get value functions
- */
-
-ACPI_STATUS
-acpi_aml_resolve_to_value (
- ACPI_OPERAND_OBJECT **stack_ptr,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_resolve_node_to_value (
- ACPI_NAMESPACE_NODE **stack_ptr,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_resolve_object_to_value (
- ACPI_OPERAND_OBJECT **stack_ptr,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_get_field_unit_value (
- ACPI_OPERAND_OBJECT *field_desc,
- ACPI_OPERAND_OBJECT *result_desc);
-
-
-/*
- * amdump - Scanner debug output routines
- */
-
-void
-acpi_aml_show_hex_value (
- u32 byte_count,
- u8 *aml_ptr,
- u32 lead_space);
-
-
-ACPI_STATUS
-acpi_aml_dump_operand (
- ACPI_OPERAND_OBJECT *entry_desc);
-
-void
-acpi_aml_dump_operands (
- ACPI_OPERAND_OBJECT **operands,
- OPERATING_MODE interpreter_mode,
- NATIVE_CHAR *ident,
- u32 num_levels,
- NATIVE_CHAR *note,
- NATIVE_CHAR *module_name,
- u32 line_number);
-
-void
-acpi_aml_dump_object_descriptor (
- ACPI_OPERAND_OBJECT *object,
- u32 flags);
-
-
-void
-acpi_aml_dump_node (
- ACPI_NAMESPACE_NODE *node,
- u32 flags);
-
-
-/*
- * amnames - interpreter/scanner name load/execute
- */
-
-NATIVE_CHAR *
-acpi_aml_allocate_name_string (
- u32 prefix_count,
- u32 num_name_segs);
-
-u32
-acpi_aml_good_char (
- u32 character);
-
-ACPI_STATUS
-acpi_aml_exec_name_segment (
- u8 **in_aml_address,
- NATIVE_CHAR *name_string);
-
-ACPI_STATUS
-acpi_aml_get_name_string (
- OBJECT_TYPE_INTERNAL data_type,
- u8 *in_aml_address,
- NATIVE_CHAR **out_name_string,
- u32 *out_name_length);
-
-ACPI_STATUS
-acpi_aml_do_name (
- ACPI_OBJECT_TYPE data_type,
- OPERATING_MODE load_exec_mode);
-
-
-/*
- * amstore - Object store support
- */
-
-ACPI_STATUS
-acpi_aml_exec_store (
- ACPI_OPERAND_OBJECT *val_desc,
- ACPI_OPERAND_OBJECT *dest_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_store_object_to_index (
- ACPI_OPERAND_OBJECT *val_desc,
- ACPI_OPERAND_OBJECT *dest_desc,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_store_object_to_node (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_NAMESPACE_NODE *node,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_store_object_to_object (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *dest_desc,
- ACPI_WALK_STATE *walk_state);
-
-
-/*
- *
- */
-
-ACPI_STATUS
-acpi_aml_resolve_object (
- ACPI_OPERAND_OBJECT **source_desc_ptr,
- OBJECT_TYPE_INTERNAL target_type,
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_aml_store_object (
- ACPI_OPERAND_OBJECT *source_desc,
- OBJECT_TYPE_INTERNAL target_type,
- ACPI_OPERAND_OBJECT **target_desc_ptr,
- ACPI_WALK_STATE *walk_state);
-
-
-/*
- * amcopy - object copy
- */
-
-ACPI_STATUS
-acpi_aml_copy_buffer_to_buffer (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc);
-
-ACPI_STATUS
-acpi_aml_copy_string_to_string (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc);
-
-ACPI_STATUS
-acpi_aml_copy_integer_to_index_field (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc);
-
-ACPI_STATUS
-acpi_aml_copy_integer_to_bank_field (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc);
-
-ACPI_STATUS
-acpi_aml_copy_data_to_named_field (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_NAMESPACE_NODE *node);
-
-ACPI_STATUS
-acpi_aml_copy_integer_to_field_unit (
- ACPI_OPERAND_OBJECT *source_desc,
- ACPI_OPERAND_OBJECT *target_desc);
-
-/*
- * amutils - interpreter/scanner utilities
- */
-
-ACPI_STATUS
-acpi_aml_enter_interpreter (
- void);
-
-void
-acpi_aml_exit_interpreter (
- void);
-
-void
-acpi_aml_truncate_for32bit_table (
- ACPI_OPERAND_OBJECT *obj_desc,
- ACPI_WALK_STATE *walk_state);
-
-u8
-acpi_aml_validate_object_type (
- ACPI_OBJECT_TYPE type);
-
-u8
-acpi_aml_acquire_global_lock (
- u32 rule);
-
-ACPI_STATUS
-acpi_aml_release_global_lock (
- u8 locked);
-
-u32
-acpi_aml_digits_needed (
- ACPI_INTEGER value,
- u32 base);
-
-ACPI_STATUS
-acpi_aml_eisa_id_to_string (
- u32 numeric_id,
- NATIVE_CHAR *out_string);
-
-ACPI_STATUS
-acpi_aml_unsigned_integer_to_string (
- ACPI_INTEGER value,
- NATIVE_CHAR *out_string);
-
-
-/*
- * amregion - default Op_region handlers
- */
-
-ACPI_STATUS
-acpi_aml_system_memory_space_handler (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context);
-
-ACPI_STATUS
-acpi_aml_system_io_space_handler (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context);
-
-ACPI_STATUS
-acpi_aml_pci_config_space_handler (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context);
-
-ACPI_STATUS
-acpi_aml_embedded_controller_space_handler (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context);
-
-ACPI_STATUS
-acpi_aml_sm_bus_space_handler (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context);
-
-
-#endif /* __INTERP_H__ */
diff --git a/reactos/drivers/bus/acpi/include/aclocal.h b/reactos/drivers/bus/acpi/include/aclocal.h
deleted file mode 100644
index 3eac5d5af3a..00000000000
--- a/reactos/drivers/bus/acpi/include/aclocal.h
+++ /dev/null
@@ -1,832 +0,0 @@
-/******************************************************************************
- *
- * Name: aclocal.h - Internal data types used across the ACPI subsystem
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACLOCAL_H__
-#define __ACLOCAL_H__
-
-
-#define WAIT_FOREVER ((u32) -1)
-
-typedef void* ACPI_MUTEX;
-typedef u32 ACPI_MUTEX_HANDLE;
-
-
-/* Object descriptor types */
-
-#define ACPI_CACHED_OBJECT 0x11 /* ORed in when object is cached */
-#define ACPI_DESC_TYPE_STATE 0x22
-#define ACPI_DESC_TYPE_WALK 0x44
-#define ACPI_DESC_TYPE_PARSER 0x66
-#define ACPI_DESC_TYPE_INTERNAL 0x88
-#define ACPI_DESC_TYPE_NAMED 0xAA
-
-
-/*****************************************************************************
- *
- * Mutex typedefs and structs
- *
- ****************************************************************************/
-
-
-/*
- * Predefined handles for the mutex objects used within the subsystem
- * All mutex objects are automatically created by Acpi_cm_mutex_initialize.
- *
- * The acquire/release ordering protocol is implied via this list. Mutexes
- * with a lower value must be acquired before mutexes with a higher value.
- *
- * NOTE: any changes here must be reflected in the Acpi_gbl_Mutex_names table also!
- */
-
-#define ACPI_MTX_EXECUTE 0
-#define ACPI_MTX_INTERPRETER 1
-#define ACPI_MTX_PARSER 2
-#define ACPI_MTX_DISPATCHER 3
-#define ACPI_MTX_TABLES 4
-#define ACPI_MTX_OP_REGIONS 5
-#define ACPI_MTX_NAMESPACE 6
-#define ACPI_MTX_EVENTS 7
-#define ACPI_MTX_HARDWARE 8
-#define ACPI_MTX_CACHES 9
-#define ACPI_MTX_MEMORY 10
-#define ACPI_MTX_DEBUG_CMD_COMPLETE 11
-#define ACPI_MTX_DEBUG_CMD_READY 12
-
-#define MAX_MTX 12
-#define NUM_MTX MAX_MTX+1
-
-
-#if defined(ACPI_DEBUG) || defined(ENABLE_DEBUGGER)
-#ifdef DEFINE_ACPI_GLOBALS
-
-/* Names for the mutexes used in the subsystem */
-
-static NATIVE_CHAR *acpi_gbl_mutex_names[] =
-{
- "ACPI_MTX_Execute",
- "ACPI_MTX_Interpreter",
- "ACPI_MTX_Parser",
- "ACPI_MTX_Dispatcher",
- "ACPI_MTX_Tables",
- "ACPI_MTX_Op_regions",
- "ACPI_MTX_Namespace",
- "ACPI_MTX_Events",
- "ACPI_MTX_Hardware",
- "ACPI_MTX_Caches",
- "ACPI_MTX_Memory",
- "ACPI_MTX_Debug_cmd_complete"
- "ACPI_MTX_Debug_cmd_ready",
-};
-
-#endif
-#endif
-
-
-/* Table for the global mutexes */
-
-typedef struct acpi_mutex_info
-{
- ACPI_MUTEX mutex;
- u32 use_count;
- u32 owner_id;
- u8 locked;
-
-} ACPI_MUTEX_INFO;
-
-
-/* Lock flag parameter for various interfaces */
-
-#define ACPI_MTX_DO_NOT_LOCK 0
-#define ACPI_MTX_LOCK 1
-
-
-typedef u16 ACPI_OWNER_ID;
-#define OWNER_TYPE_TABLE 0x0
-#define OWNER_TYPE_METHOD 0x1
-#define FIRST_METHOD_ID 0x0000
-#define FIRST_TABLE_ID 0x8000
-
-/* TBD: [Restructure] get rid of the need for this! */
-
-#define TABLE_ID_DSDT (ACPI_OWNER_ID) 0x8000
-
-
-/*****************************************************************************
- *
- * Namespace typedefs and structs
- *
- ****************************************************************************/
-
-
-/* Operational modes of the AML interpreter/scanner */
-
-typedef enum
-{
- IMODE_LOAD_PASS1 = 0x01,
- IMODE_LOAD_PASS2 = 0x02,
- IMODE_EXECUTE = 0x0E
-
-} OPERATING_MODE;
-
-
-/*
- * The Node describes a named object that appears in the AML
- * An Acpi_node is used to store Nodes.
- *
- * Data_type is used to differentiate between internal descriptors, and MUST
- * be the first byte in this structure.
- */
-
-typedef struct acpi_node
-{
- u8 data_type;
- u8 type; /* Type associated with this name */
- u16 owner_id;
- u32 name; /* ACPI Name, always 4 chars per ACPI spec */
-
-
- void *object; /* Pointer to attached ACPI object (optional) */
- struct acpi_node *child; /* first child */
- struct acpi_node *peer; /* Next peer*/
- u16 reference_count; /* Current count of references and children */
- u8 flags;
-
-} ACPI_NAMESPACE_NODE;
-
-
-#define ENTRY_NOT_FOUND NULL
-
-
-/* Node flags */
-
-#define ANOBJ_AML_ATTACHMENT 0x01
-#define ANOBJ_END_OF_PEER_LIST 0x02
-#define ANOBJ_DATA_WIDTH_32 0x04 /* Parent table is 64-bits */
-#define ANOBJ_METHOD_ARG 0x08
-#define ANOBJ_METHOD_LOCAL 0x10
-#define ANOBJ_METHOD_NO_RETVAL 0x20
-#define ANOBJ_METHOD_SOME_NO_RETVAL 0x40
-
-
-/*
- * ACPI Table Descriptor. One per ACPI table
- */
-typedef struct acpi_table_desc
-{
- struct acpi_table_desc *prev;
- struct acpi_table_desc *next;
- struct acpi_table_desc *installed_desc;
- ACPI_TABLE_HEADER *pointer;
- void *base_pointer;
- u8 *aml_pointer;
- UINT64 physical_address;
- u32 aml_length;
- u32 length;
- u32 count;
- ACPI_OWNER_ID table_id;
- u8 type;
- u8 allocation;
- u8 loaded_into_namespace;
-
-} ACPI_TABLE_DESC;
-
-
-typedef struct
-{
- NATIVE_CHAR *search_for;
- ACPI_HANDLE *list;
- u32 *count;
-
-} FIND_CONTEXT;
-
-
-typedef struct
-{
- ACPI_NAMESPACE_NODE *node;
-} NS_SEARCH_DATA;
-
-
-/*
- * Predefined Namespace items
- */
-#define ACPI_MAX_ADDRESS_SPACE 255
-#define ACPI_NUM_ADDRESS_SPACES 256
-
-
-typedef struct
-{
- NATIVE_CHAR *name;
- ACPI_OBJECT_TYPE type;
- NATIVE_CHAR *val;
-
-} PREDEFINED_NAMES;
-
-
-/* Object types used during package copies */
-
-
-#define ACPI_COPY_TYPE_SIMPLE 0
-#define ACPI_COPY_TYPE_PACKAGE 1
-
-
-/*****************************************************************************
- *
- * Event typedefs and structs
- *
- ****************************************************************************/
-
-
-/* Status bits. */
-
-#define ACPI_STATUS_PMTIMER 0x0001
-#define ACPI_STATUS_GLOBAL 0x0020
-#define ACPI_STATUS_POWER_BUTTON 0x0100
-#define ACPI_STATUS_SLEEP_BUTTON 0x0200
-#define ACPI_STATUS_RTC_ALARM 0x0400
-
-/* Enable bits. */
-
-#define ACPI_ENABLE_PMTIMER 0x0001
-#define ACPI_ENABLE_GLOBAL 0x0020
-#define ACPI_ENABLE_POWER_BUTTON 0x0100
-#define ACPI_ENABLE_SLEEP_BUTTON 0x0200
-#define ACPI_ENABLE_RTC_ALARM 0x0400
-
-
-/*
- * Entry in the Address_space (AKA Operation Region) table
- */
-
-typedef struct
-{
- ADDRESS_SPACE_HANDLER handler;
- void *context;
-
-} ACPI_ADDRESS_SPACE_INFO;
-
-
-/* Values and addresses of the GPE registers (both banks) */
-
-typedef struct
-{
- u8 status; /* Current value of status reg */
- u8 enable; /* Current value of enable reg */
- u16 status_addr; /* Address of status reg */
- u16 enable_addr; /* Address of enable reg */
- u8 gpe_base; /* Base GPE number */
-
-} ACPI_GPE_REGISTERS;
-
-
-#define ACPI_GPE_LEVEL_TRIGGERED 1
-#define ACPI_GPE_EDGE_TRIGGERED 2
-
-
-/* Information about each particular GPE level */
-
-typedef struct
-{
- u8 type; /* Level or Edge */
-
- ACPI_HANDLE method_handle; /* Method handle for direct (fast) execution */
- GPE_HANDLER handler; /* Address of handler, if any */
- void *context; /* Context to be passed to handler */
-
-} ACPI_GPE_LEVEL_INFO;
-
-
-/* Information about each particular fixed event */
-
-typedef struct
-{
- FIXED_EVENT_HANDLER handler; /* Address of handler. */
- void *context; /* Context to be passed to handler */
-
-} ACPI_FIXED_EVENT_INFO;
-
-
-/* Information used during field processing */
-
-typedef struct
-{
- u8 skip_field;
- u8 field_flag;
- u32 pkg_length;
-
-} ACPI_FIELD_INFO;
-
-
-/*****************************************************************************
- *
- * Generic "state" object for stacks
- *
- ****************************************************************************/
-
-
-#define CONTROL_NORMAL 0xC0
-#define CONTROL_CONDITIONAL_EXECUTING 0xC1
-#define CONTROL_PREDICATE_EXECUTING 0xC2
-#define CONTROL_PREDICATE_FALSE 0xC3
-#define CONTROL_PREDICATE_TRUE 0xC4
-
-
-/* Forward declarations */
-struct acpi_walk_state;
-struct acpi_walk_list;
-struct acpi_parse_obj;
-struct acpi_obj_mutex;
-
-
-#define ACPI_STATE_COMMON /* Two 32-bit fields and a pointer */\
- u8 data_type; /* To differentiate various internal objs */\
- u8 flags; \
- u16 value; \
- u16 state; \
- u16 acpi_eval; \
- void *next; \
-
-typedef struct acpi_common_state
-{
- ACPI_STATE_COMMON
-} ACPI_COMMON_STATE;
-
-
-/*
- * Update state - used to traverse complex objects such as packages
- */
-typedef struct acpi_update_state
-{
- ACPI_STATE_COMMON
- union acpi_operand_obj *object;
-
-} ACPI_UPDATE_STATE;
-
-
-/*
- * Pkg state - used to traverse nested package structures
- */
-typedef struct acpi_pkg_state
-{
- ACPI_STATE_COMMON
- union acpi_operand_obj *source_object;
- union acpi_operand_obj *dest_object;
- struct acpi_walk_state *walk_state;
- void *this_target_obj;
- u32 num_packages;
- u16 index;
-
-} ACPI_PKG_STATE;
-
-
-/*
- * Control state - one per if/else and while constructs.
- * Allows nesting of these constructs
- */
-typedef struct acpi_control_state
-{
- ACPI_STATE_COMMON
- struct acpi_parse_obj *predicate_op;
- u8 *aml_predicate_start; /* Start of if/while predicate */
-
-} ACPI_CONTROL_STATE;
-
-
-/*
- * Scope state - current scope during namespace lookups
- */
-
-typedef struct acpi_scope_state
-{
- ACPI_STATE_COMMON
- ACPI_NAMESPACE_NODE *node;
-
-} ACPI_SCOPE_STATE;
-
-
-typedef struct acpi_pscope_state
-{
- ACPI_STATE_COMMON
- struct acpi_parse_obj *op; /* current op being parsed */
- u8 *arg_end; /* current argument end */
- u8 *pkg_end; /* current package end */
- u32 arg_list; /* next argument to parse */
- u32 arg_count; /* Number of fixed arguments */
-
-} ACPI_PSCOPE_STATE;
-
-
-/*
- * Result values - used to accumulate the results of nested
- * AML arguments
- */
-typedef struct acpi_result_values
-{
- ACPI_STATE_COMMON
- union acpi_operand_obj *obj_desc [OBJ_NUM_OPERANDS];
- u8 num_results;
- u8 last_insert;
-
-} ACPI_RESULT_VALUES;
-
-
-/*
- * Notify info - used to pass info to the deferred notify
- * handler/dispatcher.
- */
-
-typedef struct acpi_notify_info
-{
- ACPI_STATE_COMMON
- ACPI_NAMESPACE_NODE *node;
- union acpi_operand_obj *handler_obj;
-
-} ACPI_NOTIFY_INFO;
-
-
-/* Generic state is union of structs above */
-
-typedef union acpi_gen_state
-{
- ACPI_COMMON_STATE common;
- ACPI_CONTROL_STATE control;
- ACPI_UPDATE_STATE update;
- ACPI_SCOPE_STATE scope;
- ACPI_PSCOPE_STATE parse_scope;
- ACPI_PKG_STATE pkg;
- ACPI_RESULT_VALUES results;
- ACPI_NOTIFY_INFO notify;
-
-} ACPI_GENERIC_STATE;
-
-
-typedef
-ACPI_STATUS (*ACPI_PARSE_DOWNWARDS) (
- u16 opcode,
- struct acpi_parse_obj *op,
- struct acpi_walk_state *walk_state,
- struct acpi_parse_obj **out_op);
-
-typedef
-ACPI_STATUS (*ACPI_PARSE_UPWARDS) (
- struct acpi_walk_state *walk_state,
- struct acpi_parse_obj *op);
-
-
-/*****************************************************************************
- *
- * Parser typedefs and structs
- *
- ****************************************************************************/
-
-
-#define ACPI_OP_CLASS_MASK 0x1F
-#define ACPI_OP_ARGS_MASK 0x20
-#define ACPI_OP_TYPE_MASK 0xC0
-
-#define ACPI_OP_TYPE_OPCODE 0x00
-#define ACPI_OP_TYPE_ASCII 0x40
-#define ACPI_OP_TYPE_PREFIX 0x80
-#define ACPI_OP_TYPE_UNKNOWN 0xC0
-
-#define ACPI_GET_OP_CLASS(a) ((a)->flags & ACPI_OP_CLASS_MASK)
-#define ACPI_GET_OP_ARGS(a) ((a)->flags & ACPI_OP_ARGS_MASK)
-#define ACPI_GET_OP_TYPE(a) ((a)->flags & ACPI_OP_TYPE_MASK)
-
-
-/*
- * AML opcode, name, and argument layout
- */
-typedef struct acpi_opcode_info
-{
- u8 flags; /* Opcode type, Has_args flag */
- u32 parse_args; /* Grammar/Parse time arguments */
- u32 runtime_args; /* Interpret time arguments */
-
-#ifdef _OPCODE_NAMES
- NATIVE_CHAR *name; /* op name (debug only) */
-#endif
-
-} ACPI_OPCODE_INFO;
-
-
-typedef union acpi_parse_val
-{
- u32 integer; /* integer constant */
- u32 size; /* bytelist or field size */
- NATIVE_CHAR *string; /* NULL terminated string */
- u8 *buffer; /* buffer or string */
- NATIVE_CHAR *name; /* NULL terminated string */
- struct acpi_parse_obj *arg; /* arguments and contained ops */
-
-} ACPI_PARSE_VALUE;
-
-
-#define ACPI_PARSE_COMMON \
- u8 data_type; /* To differentiate various internal objs */\
- u8 flags; /* Type of Op */\
- u16 opcode; /* AML opcode */\
- u32 aml_offset; /* offset of declaration in AML */\
- struct acpi_parse_obj *parent; /* parent op */\
- struct acpi_parse_obj *next; /* next op */\
- DEBUG_ONLY_MEMBERS (\
- NATIVE_CHAR op_name[16]) /* op name (debug only) */\
- /* NON-DEBUG members below: */\
- ACPI_NAMESPACE_NODE *node; /* for use by interpreter */\
- ACPI_PARSE_VALUE value; /* Value or args associated with the opcode */\
-
-
-/*
- * generic operation (eg. If, While, Store)
- */
-typedef struct acpi_parse_obj
-{
- ACPI_PARSE_COMMON
-} ACPI_PARSE_OBJECT;
-
-
-/*
- * Extended Op for named ops (Scope, Method, etc.), deferred ops (Methods and Op_regions),
- * and bytelists.
- */
-typedef struct acpi_parse2_obj
-{
- ACPI_PARSE_COMMON
- u8 *data; /* AML body or bytelist data */
- u32 length; /* AML length */
- u32 name; /* 4-byte name or zero if no name */
-
-} ACPI_PARSE2_OBJECT;
-
-
-/*
- * Parse state - one state per parser invocation and each control
- * method.
- */
-
-typedef struct acpi_parse_state
-{
- u8 *aml_start; /* first AML byte */
- u8 *aml; /* next AML byte */
- u8 *aml_end; /* (last + 1) AML byte */
- u8 *pkg_start; /* current package begin */
- u8 *pkg_end; /* current package end */
- ACPI_PARSE_OBJECT *start_op; /* root of parse tree */
- struct acpi_node *start_node;
- ACPI_GENERIC_STATE *scope; /* current scope */
- struct acpi_parse_state *next;
-
-} ACPI_PARSE_STATE;
-
-
-/*****************************************************************************
- *
- * Hardware and PNP
- *
- ****************************************************************************/
-
-
-/* PCI */
-
-#define PCI_ROOT_HID_STRING "PNP0A03"
-#define PCI_ROOT_HID_VALUE 0x030AD041 /* EISAID("PNP0A03") */
-
-
-/* Sleep states */
-
-#define SLWA_DEBUG_LEVEL 4
-#define GTS_CALL 0
-#define GTS_WAKE 1
-
-/* Cx States */
-
-#define MAX_CX_STATE_LATENCY 0xFFFFFFFF
-#define MAX_CX_STATES 4
-
-
-/*
- * The #define's and enum below establish an abstract way of identifying what
- * register block and register is to be accessed. Do not change any of the
- * values as they are used in switch statements and offset calculations.
- */
-
-#define REGISTER_BLOCK_MASK 0xFF00 /* Register Block Id */
-#define BIT_IN_REGISTER_MASK 0x00FF /* Bit Id in the Register Block Id */
-#define BYTE_IN_REGISTER_MASK 0x00FF /* Register Offset in the Register Block */
-
-#define REGISTER_BLOCK_ID(reg_id) (reg_id & REGISTER_BLOCK_MASK)
-#define REGISTER_BIT_ID(reg_id) (reg_id & BIT_IN_REGISTER_MASK)
-#define REGISTER_OFFSET(reg_id) (reg_id & BYTE_IN_REGISTER_MASK)
-
-/*
- * Access Rule
- * To access a Register Bit:
- * -> Use Bit Name (= Register Block Id | Bit Id) defined in the enum.
- *
- * To access a Register:
- * -> Use Register Id (= Register Block Id | Register Offset)
- */
-
-
-/*
- * Register Block Id
- */
-#define PM1_STS 0x0100
-#define PM1_EN 0x0200
-#define PM1_CONTROL 0x0300
-#define PM1_a_CONTROL 0x0400
-#define PM1_b_CONTROL 0x0500
-#define PM2_CONTROL 0x0600
-#define PM_TIMER 0x0700
-#define PROCESSOR_BLOCK 0x0800
-#define GPE0_STS_BLOCK 0x0900
-#define GPE0_EN_BLOCK 0x0A00
-#define GPE1_STS_BLOCK 0x0B00
-#define GPE1_EN_BLOCK 0x0C00
-#define SMI_CMD_BLOCK 0x0D00
-
-/*
- * Address space bitmasks for mmio or io spaces
- */
-
-#define SMI_CMD_ADDRESS_SPACE 0x01
-#define PM1_BLK_ADDRESS_SPACE 0x02
-#define PM2_CNT_BLK_ADDRESS_SPACE 0x04
-#define PM_TMR_BLK_ADDRESS_SPACE 0x08
-#define GPE0_BLK_ADDRESS_SPACE 0x10
-#define GPE1_BLK_ADDRESS_SPACE 0x20
-
-/*
- * Control bit definitions
- */
-#define TMR_STS (PM1_STS | 0x01)
-#define BM_STS (PM1_STS | 0x02)
-#define GBL_STS (PM1_STS | 0x03)
-#define PWRBTN_STS (PM1_STS | 0x04)
-#define SLPBTN_STS (PM1_STS | 0x05)
-#define RTC_STS (PM1_STS | 0x06)
-#define WAK_STS (PM1_STS | 0x07)
-
-#define TMR_EN (PM1_EN | 0x01)
- /* no BM_EN */
-#define GBL_EN (PM1_EN | 0x03)
-#define PWRBTN_EN (PM1_EN | 0x04)
-#define SLPBTN_EN (PM1_EN | 0x05)
-#define RTC_EN (PM1_EN | 0x06)
-#define WAK_EN (PM1_EN | 0x07)
-
-#define SCI_EN (PM1_CONTROL | 0x01)
-#define BM_RLD (PM1_CONTROL | 0x02)
-#define GBL_RLS (PM1_CONTROL | 0x03)
-#define SLP_TYPE_A (PM1_CONTROL | 0x04)
-#define SLP_TYPE_B (PM1_CONTROL | 0x05)
-#define SLP_EN (PM1_CONTROL | 0x06)
-
-#define ARB_DIS (PM2_CONTROL | 0x01)
-
-#define TMR_VAL (PM_TIMER | 0x01)
-
-#define GPE0_STS (GPE0_STS_BLOCK | 0x01)
-#define GPE0_EN (GPE0_EN_BLOCK | 0x01)
-
-#define GPE1_STS (GPE1_STS_BLOCK | 0x01)
-#define GPE1_EN (GPE1_EN_BLOCK | 0x01)
-
-
-#define TMR_STS_MASK 0x0001
-#define BM_STS_MASK 0x0010
-#define GBL_STS_MASK 0x0020
-#define PWRBTN_STS_MASK 0x0100
-#define SLPBTN_STS_MASK 0x0200
-#define RTC_STS_MASK 0x0400
-#define WAK_STS_MASK 0x8000
-
-#define ALL_FIXED_STS_BITS (TMR_STS_MASK | BM_STS_MASK | GBL_STS_MASK \
- | PWRBTN_STS_MASK | SLPBTN_STS_MASK \
- | RTC_STS_MASK | WAK_STS_MASK)
-
-#define TMR_EN_MASK 0x0001
-#define GBL_EN_MASK 0x0020
-#define PWRBTN_EN_MASK 0x0100
-#define SLPBTN_EN_MASK 0x0200
-#define RTC_EN_MASK 0x0400
-
-#define SCI_EN_MASK 0x0001
-#define BM_RLD_MASK 0x0002
-#define GBL_RLS_MASK 0x0004
-#define SLP_TYPE_X_MASK 0x1C00
-#define SLP_EN_MASK 0x2000
-
-#define ARB_DIS_MASK 0x0001
-#define TMR_VAL_MASK 0xFFFFFFFF
-
-#define GPE0_STS_MASK
-#define GPE0_EN_MASK
-
-#define GPE1_STS_MASK
-#define GPE1_EN_MASK
-
-
-#define ACPI_READ 1
-#define ACPI_WRITE 2
-
-
-/* Plug and play */
-
-/* Pnp and ACPI data */
-
-#define VERSION_NO 0x01
-#define LOGICAL_DEVICE_ID 0x02
-#define COMPATIBLE_DEVICE_ID 0x03
-#define IRQ_FORMAT 0x04
-#define DMA_FORMAT 0x05
-#define START_DEPENDENT_TAG 0x06
-#define END_DEPENDENT_TAG 0x07
-#define IO_PORT_DESCRIPTOR 0x08
-#define FIXED_LOCATION_IO_DESCRIPTOR 0x09
-#define RESERVED_TYPE0 0x0A
-#define RESERVED_TYPE1 0x0B
-#define RESERVED_TYPE2 0x0C
-#define RESERVED_TYPE3 0x0D
-#define SMALL_VENDOR_DEFINED 0x0E
-#define END_TAG 0x0F
-
-/* Pnp and ACPI data */
-
-#define MEMORY_RANGE_24 0x81
-#define ISA_MEMORY_RANGE 0x81
-#define LARGE_VENDOR_DEFINED 0x84
-#define EISA_MEMORY_RANGE 0x85
-#define MEMORY_RANGE_32 0x85
-#define FIXED_EISA_MEMORY_RANGE 0x86
-#define FIXED_MEMORY_RANGE_32 0x86
-
-/* ACPI only data */
-
-#define DWORD_ADDRESS_SPACE 0x87
-#define WORD_ADDRESS_SPACE 0x88
-#define EXTENDED_IRQ 0x89
-
-/* MUST HAVES */
-
-#define DEVICE_ID_LENGTH 0x09
-
-typedef struct
-{
- NATIVE_CHAR buffer[DEVICE_ID_LENGTH];
-
-} DEVICE_ID;
-
-
-/*****************************************************************************
- *
- * Debug
- *
- ****************************************************************************/
-
-
-/* Entry for a memory allocation (debug only) */
-
-#ifdef ACPI_DEBUG
-
-#define MEM_MALLOC 0
-#define MEM_CALLOC 1
-#define MAX_MODULE_NAME 16
-
-typedef struct allocation_info
-{
- struct allocation_info *previous;
- struct allocation_info *next;
- void *address;
- u32 size;
- u32 component;
- u32 line;
- NATIVE_CHAR module[MAX_MODULE_NAME];
- u8 alloc_type;
-
-} ALLOCATION_INFO;
-
-#endif
-
-#endif /* __ACLOCAL_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acmacros.h b/reactos/drivers/bus/acpi/include/acmacros.h
deleted file mode 100644
index 6a386b67846..00000000000
--- a/reactos/drivers/bus/acpi/include/acmacros.h
+++ /dev/null
@@ -1,507 +0,0 @@
-/******************************************************************************
- *
- * Name: acmacros.h - C macros for the entire subsystem.
- * $Revision: 1.4 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACMACROS_H__
-#define __ACMACROS_H__
-
-/*
- * Data manipulation macros
- */
-
-#ifndef LODWORD
-#define LODWORD(l) ((u32)(UINT64)(l))
-#endif
-
-#ifndef HIDWORD
-#define HIDWORD(l) ((u32)((((UINT64)(l)) >> 32) & 0xFFFFFFFF))
-#endif
-
-#ifndef LOWORD
-#define LOWORD(l) ((u16)(NATIVE_UINT)(l))
-#endif
-
-#ifndef HIWORD
-#define HIWORD(l) ((u16)((((NATIVE_UINT)(l)) >> 16) & 0xFFFF))
-#endif
-
-#ifndef LOBYTE
-#define LOBYTE(l) ((u8)(u16)(l))
-#endif
-
-#ifndef HIBYTE
-#define HIBYTE(l) ((u8)((((u16)(l)) >> 8) & 0xFF))
-#endif
-
-#define BIT0(x) ((((x) & 0x01) > 0) ? 1 : 0)
-#define BIT1(x) ((((x) & 0x02) > 0) ? 1 : 0)
-#define BIT2(x) ((((x) & 0x04) > 0) ? 1 : 0)
-
-#define BIT3(x) ((((x) & 0x08) > 0) ? 1 : 0)
-#define BIT4(x) ((((x) & 0x10) > 0) ? 1 : 0)
-#define BIT5(x) ((((x) & 0x20) > 0) ? 1 : 0)
-#define BIT6(x) ((((x) & 0x40) > 0) ? 1 : 0)
-#define BIT7(x) ((((x) & 0x80) > 0) ? 1 : 0)
-
-#define LOW_BASE(w) ((u16) ((w) & 0x0000FFFF))
-#define MID_BASE(b) ((u8) (((b) & 0x00FF0000) >> 16))
-#define HI_BASE(b) ((u8) (((b) & 0xFF000000) >> 24))
-#define LOW_LIMIT(w) ((u16) ((w) & 0x0000FFFF))
-#define HI_LIMIT(b) ((u8) (((b) & 0x00FF0000) >> 16))
-
-
-#ifdef _IA16
-/*
- * For 16-bit addresses, we have to assume that the upper 32 bits
- * are zero.
- */
-#define ACPI_GET_ADDRESS(a) ((a).lo)
-#define ACPI_STORE_ADDRESS(a,b) {(a).hi=0;(a).lo=(b);}
-#define ACPI_VALID_ADDRESS(a) ((a).hi | (a).lo)
-
-#else
-/*
- * Full 64-bit address on 32-bit and 64-bit platforms
- */
-#define ACPI_GET_ADDRESS(a) (a)
-#define ACPI_STORE_ADDRESS(a,b) ((a)=(b))
-#define ACPI_VALID_ADDRESS(a) (a)
-#endif
- /*
- * Extract a byte of data using a pointer. Any more than a byte and we
- * get into potential aligment issues -- see the STORE macros below
- */
-#define GET8(addr) (*(u8*)(addr))
-
-
-/*
- * Macros for moving data around to/from buffers that are possibly unaligned.
- * If the hardware supports the transfer of unaligned data, just do the store.
- * Otherwise, we have to move one byte at a time.
- */
-
-#ifdef _HW_ALIGNMENT_SUPPORT
-
-/* The hardware supports unaligned transfers, just do the move */
-
-#define MOVE_UNALIGNED16_TO_16(d,s) *(u16*)(d) = *(u16*)(s)
-#define MOVE_UNALIGNED32_TO_32(d,s) *(u32*)(d) = *(u32*)(s)
-#define MOVE_UNALIGNED16_TO_32(d,s) *(u32*)(d) = *(u16*)(s)
-
-#else
-/*
- * The hardware does not support unaligned transfers. We must move the
- * data one byte at a time. These macros work whether the source or
- * the destination (or both) is/are unaligned.
- */
-
-#define MOVE_UNALIGNED16_TO_16(d,s) {((u8 *)(d))[0] = ((u8 *)(s))[0];\
- ((u8 *)(d))[1] = ((u8 *)(s))[1];}
-
-#define MOVE_UNALIGNED32_TO_32(d,s) {((u8 *)(d))[0] = ((u8 *)(s))[0];\
- ((u8 *)(d))[1] = ((u8 *)(s))[1];\
- ((u8 *)(d))[2] = ((u8 *)(s))[2];\
- ((u8 *)(d))[3] = ((u8 *)(s))[3];}
-
-#define MOVE_UNALIGNED16_TO_32(d,s) {(*(u32*)(d)) = 0; MOVE_UNALIGNED16_TO_16(d,s);}
-
-#endif
-
-
-/*
- * Fast power-of-two math macros for non-optimized compilers
- */
-
-#define _DIV(value,power_of2) ((u32) ((value) >> (power_of2)))
-#define _MUL(value,power_of2) ((u32) ((value) << (power_of2)))
-#define _MOD(value,divisor) ((u32) ((value) & ((divisor) -1)))
-
-#define DIV_2(a) _DIV(a,1)
-#define MUL_2(a) _MUL(a,1)
-#define MOD_2(a) _MOD(a,2)
-
-#define DIV_4(a) _DIV(a,2)
-#define MUL_4(a) _MUL(a,2)
-#define MOD_4(a) _MOD(a,4)
-
-#define DIV_8(a) _DIV(a,3)
-#define MUL_8(a) _MUL(a,3)
-#define MOD_8(a) _MOD(a,8)
-
-#define DIV_16(a) _DIV(a,4)
-#define MUL_16(a) _MUL(a,4)
-#define MOD_16(a) _MOD(a,16)
-
-/*
- * Divide and Modulo
- */
-#define ACPI_DIVIDE(n,d) ((n) / (d))
-#define ACPI_MODULO(n,d) ((n) % (d))
-
-/*
- * Rounding macros (Power of two boundaries only)
- */
-
-#define ROUND_DOWN(value,boundary) ((value) & (~((boundary)-1)))
-#define ROUND_UP(value,boundary) (((value) + ((boundary)-1)) & (~((boundary)-1)))
-
-#define ROUND_DOWN_TO_32_BITS(a) ROUND_DOWN(a,4)
-#define ROUND_DOWN_TO_64_BITS(a) ROUND_DOWN(a,8)
-#define ROUND_DOWN_TO_NATIVE_WORD(a) ROUND_DOWN(a,ALIGNED_ADDRESS_BOUNDARY)
-
-#define ROUND_UP_TO_32_bITS(a) ROUND_UP(a,4)
-#define ROUND_UP_TO_64_bITS(a) ROUND_UP(a,8)
-#define ROUND_UP_TO_NATIVE_WORD(a) ROUND_UP(a,ALIGNED_ADDRESS_BOUNDARY)
-
-#define ROUND_PTR_UP_TO_4(a,b) ((b *)(((NATIVE_UINT)(a) + 3) & ~3))
-#define ROUND_PTR_UP_TO_8(a,b) ((b *)(((NATIVE_UINT)(a) + 7) & ~7))
-
-#define ROUND_UP_TO_1_k(a) (((a) + 1023) >> 10)
-
-#ifdef DEBUG_ASSERT
-#undef DEBUG_ASSERT
-#endif
-
-
-/* Macros for GAS addressing */
-
-#ifdef __GNUC__
-#define ACPI_PCI_DEVICE_MASK (UINT64) 0x0000FFFF00000000ULL
-#define ACPI_PCI_FUNCTION_MASK (UINT64) 0x00000000FFFF0000ULL
-#define ACPI_PCI_REGISTER_MASK (UINT64) 0x000000000000FFFFULL
-#else
-#define ACPI_PCI_DEVICE_MASK (UINT64) 0x0000FFFF00000000
-#define ACPI_PCI_FUNCTION_MASK (UINT64) 0x00000000FFFF0000
-#define ACPI_PCI_REGISTER_MASK (UINT64) 0x000000000000FFFF
-#endif
-
-#define ACPI_PCI_FUNCTION(a) (u32) ((((a) & ACPI_PCI_FUNCTION_MASK) >> 16))
-#define ACPI_PCI_DEVICE(a) (u32) ((((a) & ACPI_PCI_DEVICE_MASK) >> 32))
-
-#ifndef _IA16
-#define ACPI_PCI_REGISTER(a) (u32) (((a) & ACPI_PCI_REGISTER_MASK))
-#define ACPI_PCI_DEVFUN(a) (u32) ((ACPI_PCI_DEVICE(a) << 16) | ACPI_PCI_FUNCTION(a))
-
-#else
-#define ACPI_PCI_REGISTER(a) (u32) (((a) & 0x0000FFFF))
-#define ACPI_PCI_DEVFUN(a) (u32) ((((a) & 0xFFFF0000) >> 16))
-
-#endif
-
-/*
- * An ACPI_HANDLE (which is actually an ACPI_NAMESPACE_NODE *) can appear in some contexts,
- * such as on ap_obj_stack, where a pointer to an ACPI_OPERAND_OBJECT can also
- * appear. This macro is used to distinguish them.
- *
- * The Data_type field is the first field in both structures.
- */
-
-#define VALID_DESCRIPTOR_TYPE(d,t) (((ACPI_NAMESPACE_NODE *)d)->data_type == t)
-
-
-/* Macro to test the object type */
-
-#define IS_THIS_OBJECT_TYPE(d,t) (((ACPI_OPERAND_OBJECT *)d)->common.type == (u8)t)
-
-/* Macro to check the table flags for SINGLE or MULTIPLE tables are allowed */
-
-#define IS_SINGLE_TABLE(x) (((x) & 0x01) == ACPI_TABLE_SINGLE ? 1 : 0)
-
-/*
- * Macro to check if a pointer is within an ACPI table.
- * Parameter (a) is the pointer to check. Parameter (b) must be defined
- * as a pointer to an ACPI_TABLE_HEADER. (b+1) then points past the header,
- * and ((u8 *)b+b->Length) points one byte past the end of the table.
- */
-
-#ifndef _IA16
-#define IS_IN_ACPI_TABLE(a,b) (((u8 *)(a) >= (u8 *)(b + 1)) &&\
- ((u8 *)(a) < ((u8 *)b + b->length)))
-
-#else
-#define IS_IN_ACPI_TABLE(a,b) (_segment)(a) == (_segment)(b) &&\
- (((u8 *)(a) >= (u8 *)(b + 1)) &&\
- ((u8 *)(a) < ((u8 *)b + b->length)))
-#endif
-
-/*
- * Macros for the master AML opcode table
- */
-
-#ifdef ACPI_DEBUG
-#define OP_INFO_ENTRY(flags,name,Pargs,Iargs) {flags,Pargs,Iargs,name}
-#else
-#define OP_INFO_ENTRY(flags,name,Pargs,Iargs) {flags,Pargs,Iargs}
-#endif
-
-#define ARG_TYPE_WIDTH 5
-#define ARG_1(x) ((u32)(x))
-#define ARG_2(x) ((u32)(x) << (1 * ARG_TYPE_WIDTH))
-#define ARG_3(x) ((u32)(x) << (2 * ARG_TYPE_WIDTH))
-#define ARG_4(x) ((u32)(x) << (3 * ARG_TYPE_WIDTH))
-#define ARG_5(x) ((u32)(x) << (4 * ARG_TYPE_WIDTH))
-#define ARG_6(x) ((u32)(x) << (5 * ARG_TYPE_WIDTH))
-
-#define ARGI_LIST1(a) (ARG_1(a))
-#define ARGI_LIST2(a,b) (ARG_1(b)|ARG_2(a))
-#define ARGI_LIST3(a,b,c) (ARG_1(c)|ARG_2(b)|ARG_3(a))
-#define ARGI_LIST4(a,b,c,d) (ARG_1(d)|ARG_2(c)|ARG_3(b)|ARG_4(a))
-#define ARGI_LIST5(a,b,c,d,e) (ARG_1(e)|ARG_2(d)|ARG_3(c)|ARG_4(b)|ARG_5(a))
-#define ARGI_LIST6(a,b,c,d,e,f) (ARG_1(f)|ARG_2(e)|ARG_3(d)|ARG_4(c)|ARG_5(b)|ARG_6(a))
-
-#define ARGP_LIST1(a) (ARG_1(a))
-#define ARGP_LIST2(a,b) (ARG_1(a)|ARG_2(b))
-#define ARGP_LIST3(a,b,c) (ARG_1(a)|ARG_2(b)|ARG_3(c))
-#define ARGP_LIST4(a,b,c,d) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d))
-#define ARGP_LIST5(a,b,c,d,e) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e))
-#define ARGP_LIST6(a,b,c,d,e,f) (ARG_1(a)|ARG_2(b)|ARG_3(c)|ARG_4(d)|ARG_5(e)|ARG_6(f))
-
-#define GET_CURRENT_ARG_TYPE(list) (list & ((u32) 0x1F))
-#define INCREMENT_ARG_LIST(list) (list >>= ((u32) ARG_TYPE_WIDTH))
-
-
-/*
- * Reporting macros that are never compiled out
- */
-
-#define PARAM_LIST(pl) pl
-
-/*
- * Error reporting. These versions add callers module and line#. Since
- * _THIS_MODULE gets compiled out when ACPI_DEBUG isn't defined, only
- * use it in debug mode.
- */
-
-#ifdef ACPI_DEBUG
-
-#define REPORT_INFO(fp) {_report_info(_THIS_MODULE,__LINE__,_COMPONENT); \
- debug_print_raw PARAM_LIST(fp);}
-#define REPORT_ERROR(fp) {_report_error(_THIS_MODULE,__LINE__,_COMPONENT); \
- debug_print_raw PARAM_LIST(fp);}
-#define REPORT_WARNING(fp) {_report_warning(_THIS_MODULE,__LINE__,_COMPONENT); \
- debug_print_raw PARAM_LIST(fp);}
-
-#else
-
-#define REPORT_INFO(fp) {_report_info("ACPI",__LINE__,_COMPONENT); \
- debug_print_raw PARAM_LIST(fp);}
-#define REPORT_ERROR(fp) {_report_error("ACPI",__LINE__,_COMPONENT); \
- debug_print_raw PARAM_LIST(fp);}
-#define REPORT_WARNING(fp) {_report_warning("ACPI",__LINE__,_COMPONENT); \
- debug_print_raw PARAM_LIST(fp);}
-
-#endif
-
-/* Error reporting. These versions pass thru the module and line# */
-
-#define _REPORT_INFO(a,b,c,fp) {_report_info(a,b,c); \
- debug_print_raw PARAM_LIST(fp);}
-#define _REPORT_ERROR(a,b,c,fp) {_report_error(a,b,c); \
- debug_print_raw PARAM_LIST(fp);}
-#define _REPORT_WARNING(a,b,c,fp) {_report_warning(a,b,c); \
- debug_print_raw PARAM_LIST(fp);}
-
-/* Buffer dump macros */
-
-#define DUMP_BUFFER(a,b) acpi_cm_dump_buffer((u8 *)a,b,DB_BYTE_DISPLAY,_COMPONENT)
-
-/*
- * Debug macros that are conditionally compiled
- */
-
-#ifdef ACPI_DEBUG
-
-#define MODULE_NAME(name) static char *_THIS_MODULE = name;
-
-/*
- * Function entry tracing.
- * The first parameter should be the procedure name as a quoted string. This is declared
- * as a local string ("_Proc_name) so that it can be also used by the function exit macros below.
- */
-
-#define FUNCTION_TRACE(a) char * _proc_name = a;\
- function_trace(_THIS_MODULE,__LINE__,_COMPONENT,a)
-#define FUNCTION_TRACE_PTR(a,b) char * _proc_name = a;\
- function_trace_ptr(_THIS_MODULE,__LINE__,_COMPONENT,a,(void *)b)
-#define FUNCTION_TRACE_U32(a,b) char * _proc_name = a;\
- function_trace_u32(_THIS_MODULE,__LINE__,_COMPONENT,a,(u32)b)
-#define FUNCTION_TRACE_STR(a,b) char * _proc_name = a;\
- function_trace_str(_THIS_MODULE,__LINE__,_COMPONENT,a,(NATIVE_CHAR *)b)
-/*
- * Function exit tracing.
- * WARNING: These macros include a return statement. This is usually considered
- * bad form, but having a separate exit macro is very ugly and difficult to maintain.
- * One of the FUNCTION_TRACE macros above must be used in conjunction with these macros
- * so that "_Proc_name" is defined.
- */
-#define return_VOID {function_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name);return;}
-#define return_ACPI_STATUS(s) {function_status_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,s);return(s);}
-#define return_VALUE(s) {function_value_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,(ACPI_INTEGER)s);return(s);}
-#define return_PTR(s) {function_ptr_exit(_THIS_MODULE,__LINE__,_COMPONENT,_proc_name,(u8 *)s);return(s);}
-
-
-/* Conditional execution */
-
-#define DEBUG_EXEC(a) a
-#define NORMAL_EXEC(a)
-
-#define DEBUG_DEFINE(a) a;
-#define DEBUG_ONLY_MEMBERS(a) a;
-#define _OPCODE_NAMES
-#define _VERBOSE_STRUCTURES
-
-
-/* Stack and buffer dumping */
-
-#define DUMP_STACK_ENTRY(a) acpi_aml_dump_operand(a)
-#define DUMP_OPERANDS(a,b,c,d,e) acpi_aml_dump_operands(a,b,c,d,e,_THIS_MODULE,__LINE__)
-
-
-#define DUMP_ENTRY(a,b) acpi_ns_dump_entry (a,b)
-#define DUMP_TABLES(a,b) acpi_ns_dump_tables(a,b)
-#define DUMP_PATHNAME(a,b,c,d) acpi_ns_dump_pathname(a,b,c,d)
-#define DUMP_RESOURCE_LIST(a) acpi_rs_dump_resource_list(a)
-#define BREAK_MSG(a) acpi_os_breakpoint (a)
-
-/*
- * Generate INT3 on ACPI_ERROR (Debug only!)
- */
-
-#define ERROR_BREAK
-#ifdef ERROR_BREAK
-#define BREAK_ON_ERROR(lvl) if ((lvl)&ACPI_ERROR) acpi_os_breakpoint("Fatal error encountered\n")
-#else
-#define BREAK_ON_ERROR(lvl)
-#endif
-
-/*
- * Master debug print macros
- * Print iff:
- * 1) Debug print for the current component is enabled
- * 2) Debug error level or trace level for the print statement is enabled
- *
- */
-
-#define TEST_DEBUG_SWITCH(lvl) if (((lvl) & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))
-
-#define DEBUG_PRINT(lvl,fp) TEST_DEBUG_SWITCH(lvl) {\
- debug_print_prefix (_THIS_MODULE,__LINE__);\
- debug_print_raw PARAM_LIST(fp);\
- BREAK_ON_ERROR(lvl);}
-
-#define DEBUG_PRINT_RAW(lvl,fp) TEST_DEBUG_SWITCH(lvl) {\
- debug_print_raw PARAM_LIST(fp);}
-
-
-/* Assert macros */
-
-#define ACPI_ASSERT(exp) if(!(exp)) \
- acpi_os_dbg_assert(#exp, __FILE__, __LINE__, "Failed Assertion")
-
-#define DEBUG_ASSERT(msg, exp) if(!(exp)) \
- acpi_os_dbg_assert(#exp, __FILE__, __LINE__, msg)
-
-
-#else
-/*
- * This is the non-debug case -- make everything go away,
- * leaving no executable debug code!
- */
-
-#define MODULE_NAME(name)
-#define _THIS_MODULE ""
-
-#define DEBUG_EXEC(a)
-#define NORMAL_EXEC(a) a;
-
-#define DEBUG_DEFINE(a)
-#define DEBUG_ONLY_MEMBERS(a)
-#define FUNCTION_TRACE(a)
-#define FUNCTION_TRACE_PTR(a,b)
-#define FUNCTION_TRACE_U32(a,b)
-#define FUNCTION_TRACE_STR(a,b)
-#define FUNCTION_EXIT
-#define FUNCTION_STATUS_EXIT(s)
-#define FUNCTION_VALUE_EXIT(s)
-#define DUMP_STACK_ENTRY(a)
-#define DUMP_OPERANDS(a,b,c,d,e)
-#define DUMP_ENTRY(a,b)
-#define DUMP_TABLES(a,b)
-#define DUMP_PATHNAME(a,b,c,d)
-#define DUMP_RESOURCE_LIST(a)
-#define DEBUG_PRINT(l,f)
-#define DEBUG_PRINT_RAW(l,f)
-#define BREAK_MSG(a)
-
-#define return_VOID return
-#define return_ACPI_STATUS(s) return(s)
-#define return_VALUE(s) return(s)
-#define return_PTR(s) return(s)
-
-#define ACPI_ASSERT(exp)
-#define DEBUG_ASSERT(msg, exp)
-
-#endif
-
-/*
- * Some code only gets executed when the debugger is built in.
- * Note that this is entirely independent of whether the
- * DEBUG_PRINT stuff (set by ACPI_DEBUG) is on, or not.
- */
-#ifdef ENABLE_DEBUGGER
-#define DEBUGGER_EXEC(a) a
-#else
-#define DEBUGGER_EXEC(a)
-#endif
-
-
-/*
- * For 16-bit code, we want to shrink some things even though
- * we are using ACPI_DEBUG to get the debug output
- */
-#ifdef _IA16
-#undef DEBUG_ONLY_MEMBERS
-#undef _VERBOSE_STRUCTURES
-#define DEBUG_ONLY_MEMBERS(a)
-#endif
-
-
-#ifdef ACPI_DEBUG
-
-/*
- * 1) Set name to blanks
- * 2) Copy the object name
- */
-
-#define ADD_OBJECT_NAME(a,b) MEMSET (a->common.name, ' ', sizeof (a->common.name));\
- STRNCPY (a->common.name, acpi_gbl_ns_type_names[b], sizeof (a->common.name))
-
-#else
-
-#define ADD_OBJECT_NAME(a,b)
-
-#endif
-
-
-#endif /* ACMACROS_H */
diff --git a/reactos/drivers/bus/acpi/include/acnamesp.h b/reactos/drivers/bus/acpi/include/acnamesp.h
deleted file mode 100644
index ad1d0a60f88..00000000000
--- a/reactos/drivers/bus/acpi/include/acnamesp.h
+++ /dev/null
@@ -1,430 +0,0 @@
-/******************************************************************************
- *
- * Name: acnamesp.h - Namespace subcomponent prototypes and defines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACNAMESP_H__
-#define __ACNAMESP_H__
-
-
-/* To search the entire name space, pass this as Search_base */
-
-#define NS_ALL ((ACPI_HANDLE)0)
-
-/*
- * Elements of Acpi_ns_properties are bit significant
- * and should be one-to-one with values of ACPI_OBJECT_TYPE
- */
-#define NSP_NORMAL 0
-#define NSP_NEWSCOPE 1 /* a definition of this type opens a name scope */
-#define NSP_LOCAL 2 /* suppress search of enclosing scopes */
-
-
-/* Definitions of the predefined namespace names */
-
-#define ACPI_UNKNOWN_NAME (u32) 0x3F3F3F3F /* Unknown name is "????" */
-#define ACPI_ROOT_NAME (u32) 0x2F202020 /* Root name is "/ " */
-#define ACPI_SYS_BUS_NAME (u32) 0x5F53425F /* Sys bus name is "_SB_" */
-
-#define NS_ROOT_PATH "/"
-#define NS_SYSTEM_BUS "_SB_"
-
-
-/* Flags for Acpi_ns_lookup, Acpi_ns_search_and_enter */
-
-#define NS_NO_UPSEARCH 0
-#define NS_SEARCH_PARENT 0x01
-#define NS_DONT_OPEN_SCOPE 0x02
-#define NS_NO_PEER_SEARCH 0x04
-#define NS_ERROR_IF_FOUND 0x08
-
-#define NS_WALK_UNLOCK TRUE
-#define NS_WALK_NO_UNLOCK FALSE
-
-
-ACPI_STATUS
-acpi_ns_load_namespace (
- void);
-
-ACPI_STATUS
-acpi_ns_initialize_objects (
- void);
-
-ACPI_STATUS
-acpi_ns_initialize_devices (
- void);
-
-
-/* Namespace init - nsxfinit */
-
-ACPI_STATUS
-acpi_ns_init_one_device (
- ACPI_HANDLE obj_handle,
- u32 nesting_level,
- void *context,
- void **return_value);
-
-ACPI_STATUS
-acpi_ns_init_one_object (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *context,
- void **return_value);
-
-
-ACPI_STATUS
-acpi_ns_walk_namespace (
- OBJECT_TYPE_INTERNAL type,
- ACPI_HANDLE start_object,
- u32 max_depth,
- u8 unlock_before_callback,
- WALK_CALLBACK user_function,
- void *context,
- void **return_value);
-
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_get_next_object (
- OBJECT_TYPE_INTERNAL type,
- ACPI_NAMESPACE_NODE *parent,
- ACPI_NAMESPACE_NODE *child);
-
-
-ACPI_STATUS
-acpi_ns_delete_namespace_by_owner (
- u16 table_id);
-
-
-/* Namespace loading - nsload */
-
-ACPI_STATUS
-acpi_ns_one_complete_parse (
- u32 pass_number,
- ACPI_TABLE_DESC *table_desc);
-
-ACPI_STATUS
-acpi_ns_parse_table (
- ACPI_TABLE_DESC *table_desc,
- ACPI_NAMESPACE_NODE *scope);
-
-ACPI_STATUS
-acpi_ns_load_table (
- ACPI_TABLE_DESC *table_desc,
- ACPI_NAMESPACE_NODE *node);
-
-ACPI_STATUS
-acpi_ns_load_table_by_type (
- ACPI_TABLE_TYPE table_type);
-
-
-/*
- * Top-level namespace access - nsaccess
- */
-
-
-ACPI_STATUS
-acpi_ns_root_initialize (
- void);
-
-ACPI_STATUS
-acpi_ns_lookup (
- ACPI_GENERIC_STATE *scope_info,
- NATIVE_CHAR *name,
- OBJECT_TYPE_INTERNAL type,
- OPERATING_MODE interpreter_mode,
- u32 flags,
- ACPI_WALK_STATE *walk_state,
- ACPI_NAMESPACE_NODE **ret_node);
-
-
-/*
- * Named object allocation/deallocation - nsalloc
- */
-
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_create_node (
- u32 acpi_name);
-
-void
-acpi_ns_delete_node (
- ACPI_NAMESPACE_NODE *node);
-
-ACPI_STATUS
-acpi_ns_delete_namespace_subtree (
- ACPI_NAMESPACE_NODE *parent_handle);
-
-void
-acpi_ns_detach_object (
- ACPI_NAMESPACE_NODE *node);
-
-void
-acpi_ns_delete_children (
- ACPI_NAMESPACE_NODE *parent);
-
-
-/*
- * Namespace modification - nsmodify
- */
-
-ACPI_STATUS
-acpi_ns_unload_namespace (
- ACPI_HANDLE handle);
-
-ACPI_STATUS
-acpi_ns_delete_subtree (
- ACPI_HANDLE start_handle);
-
-
-/*
- * Namespace dump/print utilities - nsdump
- */
-
-void
-acpi_ns_dump_tables (
- ACPI_HANDLE search_base,
- u32 max_depth);
-
-void
-acpi_ns_dump_entry (
- ACPI_HANDLE handle,
- u32 debug_level);
-
-ACPI_STATUS
-acpi_ns_dump_pathname (
- ACPI_HANDLE handle,
- NATIVE_CHAR *msg,
- u32 level,
- u32 component);
-
-void
-acpi_ns_dump_root_devices (
- void);
-
-void
-acpi_ns_dump_objects (
- OBJECT_TYPE_INTERNAL type,
- u32 max_depth,
- u32 ownder_id,
- ACPI_HANDLE start_handle);
-
-
-/*
- * Namespace evaluation functions - nseval
- */
-
-ACPI_STATUS
-acpi_ns_evaluate_by_handle (
- ACPI_NAMESPACE_NODE *prefix_node,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_object);
-
-ACPI_STATUS
-acpi_ns_evaluate_by_name (
- NATIVE_CHAR *pathname,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_object);
-
-ACPI_STATUS
-acpi_ns_evaluate_relative (
- ACPI_NAMESPACE_NODE *prefix_node,
- NATIVE_CHAR *pathname,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_object);
-
-ACPI_STATUS
-acpi_ns_execute_control_method (
- ACPI_NAMESPACE_NODE *method_node,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_obj_desc);
-
-ACPI_STATUS
-acpi_ns_get_object_value (
- ACPI_NAMESPACE_NODE *object_node,
- ACPI_OPERAND_OBJECT **return_obj_desc);
-
-
-/*
- * Parent/Child/Peer utility functions - nsfamily
- */
-
-ACPI_NAME
-acpi_ns_find_parent_name (
- ACPI_NAMESPACE_NODE *node_to_search);
-
-u8
-acpi_ns_exist_downstream_sibling (
- ACPI_NAMESPACE_NODE *this_node);
-
-
-/*
- * Scope manipulation - nsscope
- */
-
-u32
-acpi_ns_opens_scope (
- OBJECT_TYPE_INTERNAL type);
-
-NATIVE_CHAR *
-acpi_ns_get_table_pathname (
- ACPI_NAMESPACE_NODE *node);
-
-NATIVE_CHAR *
-acpi_ns_name_of_current_scope (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ns_handle_to_pathname (
- ACPI_HANDLE obj_handle,
- u32 *buf_size,
- NATIVE_CHAR *user_buffer);
-
-u8
-acpi_ns_pattern_match (
- ACPI_NAMESPACE_NODE *obj_node,
- NATIVE_CHAR *search_for);
-
-ACPI_STATUS
-acpi_ns_name_compare (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *context,
- void **return_value);
-
-ACPI_STATUS
-acpi_ns_get_node (
- NATIVE_CHAR *pathname,
- ACPI_NAMESPACE_NODE *in_prefix_node,
- ACPI_NAMESPACE_NODE **out_node);
-
-u32
-acpi_ns_get_pathname_length (
- ACPI_NAMESPACE_NODE *node);
-
-
-/*
- * Object management for NTEs - nsobject
- */
-
-ACPI_STATUS
-acpi_ns_attach_object (
- ACPI_NAMESPACE_NODE *node,
- ACPI_OPERAND_OBJECT *object,
- OBJECT_TYPE_INTERNAL type);
-
-
-void *
-acpi_ns_compare_value (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *obj_desc);
-
-
-/*
- * Namespace searching and entry - nssearch
- */
-
-ACPI_STATUS
-acpi_ns_search_and_enter (
- u32 entry_name,
- ACPI_WALK_STATE *walk_state,
- ACPI_NAMESPACE_NODE *node,
- OPERATING_MODE interpreter_mode,
- OBJECT_TYPE_INTERNAL type,
- u32 flags,
- ACPI_NAMESPACE_NODE **ret_node);
-
-ACPI_STATUS
-acpi_ns_search_node (
- u32 entry_name,
- ACPI_NAMESPACE_NODE *node,
- OBJECT_TYPE_INTERNAL type,
- ACPI_NAMESPACE_NODE **ret_node);
-
-void
-acpi_ns_install_node (
- ACPI_WALK_STATE *walk_state,
- ACPI_NAMESPACE_NODE *parent_node, /* Parent */
- ACPI_NAMESPACE_NODE *node, /* New Child*/
- OBJECT_TYPE_INTERNAL type);
-
-
-/*
- * Utility functions - nsutils
- */
-
-u8
-acpi_ns_valid_root_prefix (
- NATIVE_CHAR prefix);
-
-u8
-acpi_ns_valid_path_separator (
- NATIVE_CHAR sep);
-
-OBJECT_TYPE_INTERNAL
-acpi_ns_get_type (
- ACPI_HANDLE obj_handle);
-
-void *
-acpi_ns_get_attached_object (
- ACPI_HANDLE obj_handle);
-
-u32
-acpi_ns_local (
- OBJECT_TYPE_INTERNAL type);
-
-ACPI_STATUS
-acpi_ns_internalize_name (
- NATIVE_CHAR *dotted_name,
- NATIVE_CHAR **converted_name);
-
-ACPI_STATUS
-acpi_ns_externalize_name (
- u32 internal_name_length,
- NATIVE_CHAR *internal_name,
- u32 *converted_name_length,
- NATIVE_CHAR **converted_name);
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_convert_handle_to_entry (
- ACPI_HANDLE handle);
-
-ACPI_HANDLE
-acpi_ns_convert_entry_to_handle(
- ACPI_NAMESPACE_NODE *node);
-
-void
-acpi_ns_terminate (
- void);
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_get_parent_object (
- ACPI_NAMESPACE_NODE *node);
-
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_get_next_valid_object (
- ACPI_NAMESPACE_NODE *node);
-
-
-#endif /* __ACNAMESP_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acobject.h b/reactos/drivers/bus/acpi/include/acobject.h
deleted file mode 100644
index 5996628dcf8..00000000000
--- a/reactos/drivers/bus/acpi/include/acobject.h
+++ /dev/null
@@ -1,425 +0,0 @@
-
-/******************************************************************************
- *
- * Name: acobject.h - Definition of ACPI_OPERAND_OBJECT (Internal object only)
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef _ACOBJECT_H
-#define _ACOBJECT_H
-
-
-/*
- * The ACPI_OPERAND_OBJECT is used to pass AML operands from the dispatcher
- * to the interpreter, and to keep track of the various handlers such as
- * address space handlers and notify handlers. The object is a constant
- * size in order to allow them to be cached and reused.
- *
- * All variants of the ACPI_OPERAND_OBJECT are defined with the same
- * sequence of field types, with fields that are not used in a particular
- * variant being named "Reserved". This is not strictly necessary, but
- * may in some circumstances simplify understanding if these structures
- * need to be displayed in a debugger having limited (or no) support for
- * union types. It also simplifies some debug code in Dump_table() which
- * dumps multi-level values: fetching Buffer.Pointer suffices to pick up
- * the value or next level for any of several types.
- */
-
-/******************************************************************************
- *
- * Common Descriptors
- *
- *****************************************************************************/
-
-/*
- * Common area for all objects.
- *
- * Data_type is used to differentiate between internal descriptors, and MUST
- * be the first byte in this structure.
- */
-
-
-#define ACPI_OBJECT_COMMON_HEADER /* 32-bits plus 8-bit flag */\
- u8 data_type; /* To differentiate various internal objs */\
- u8 type; /* ACPI_OBJECT_TYPE */\
- u16 reference_count; /* For object deletion management */\
- u8 flags; \
-
-/* Defines for flag byte above */
-
-#define AOPOBJ_STATIC_ALLOCATION 0x1
-#define AOPOBJ_DATA_VALID 0x2
-#define AOPOBJ_INITIALIZED 0x4
-
-
-/*
- * Common bitfield for the field objects
- */
-#define ACPI_COMMON_FIELD_INFO /* Three 32-bit values plus 8*/\
- u8 granularity;\
- u16 length; \
- u32 offset; /* Byte offset within containing object */\
- u8 bit_offset; /* Bit offset within min read/write data unit */\
- u8 access; /* Access_type */\
- u8 lock_rule;\
- u8 update_rule;\
- u8 access_attribute;
-
-
-/******************************************************************************
- *
- * Individual Object Descriptors
- *
- *****************************************************************************/
-
-
-typedef struct /* COMMON */
-{
- ACPI_OBJECT_COMMON_HEADER
-
-} ACPI_OBJECT_COMMON;
-
-
-typedef struct /* CACHE_LIST */
-{
- ACPI_OBJECT_COMMON_HEADER
- union acpi_operand_obj *next; /* Link for object cache and internal lists*/
-
-} ACPI_OBJECT_CACHE_LIST;
-
-
-typedef struct /* NUMBER - has value */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- ACPI_INTEGER value;
-
-} ACPI_OBJECT_INTEGER;
-
-
-typedef struct /* STRING - has length and pointer - Null terminated, ASCII characters only */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- u32 length;
- NATIVE_CHAR *pointer; /* String value in AML stream or in allocated space */
-
-} ACPI_OBJECT_STRING;
-
-
-typedef struct /* BUFFER - has length and pointer - not null terminated */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- u32 length;
- u8 *pointer; /* points to the buffer in allocated space */
-
-} ACPI_OBJECT_BUFFER;
-
-
-typedef struct /* PACKAGE - has count, elements, next element */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- u32 count; /* # of elements in package */
-
- union acpi_operand_obj **elements; /* Array of pointers to Acpi_objects */
- union acpi_operand_obj **next_element; /* used only while initializing */
-
-} ACPI_OBJECT_PACKAGE;
-
-
-typedef struct /* FIELD UNIT */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- ACPI_COMMON_FIELD_INFO
-
- union acpi_operand_obj *extra; /* Pointer to executable AML (in field definition) */
- ACPI_NAMESPACE_NODE *node; /* containing object */
- union acpi_operand_obj *container; /* Containing object (Buffer) */
-
-} ACPI_OBJECT_FIELD_UNIT;
-
-
-typedef struct /* DEVICE - has handle and notification handler/context */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- union acpi_operand_obj *sys_handler; /* Handler for system notifies */
- union acpi_operand_obj *drv_handler; /* Handler for driver notifies */
- union acpi_operand_obj *addr_handler; /* Handler for Address space */
-
-} ACPI_OBJECT_DEVICE;
-
-
-typedef struct /* EVENT */
-{
- ACPI_OBJECT_COMMON_HEADER
- void *semaphore;
-
-} ACPI_OBJECT_EVENT;
-
-
-#define INFINITE_CONCURRENCY 0xFF
-
-typedef struct /* METHOD */
-{
- ACPI_OBJECT_COMMON_HEADER
- u8 method_flags;
- u8 param_count;
-
- u32 pcode_length;
-
- void *semaphore;
- u8 *pcode;
-
- u8 concurrency;
- u8 thread_count;
- ACPI_OWNER_ID owning_id;
-
-} ACPI_OBJECT_METHOD;
-
-
-typedef struct acpi_obj_mutex /* MUTEX */
-{
- ACPI_OBJECT_COMMON_HEADER
- u16 sync_level;
- u16 acquisition_depth;
-
- void *semaphore;
- void *owner;
- union acpi_operand_obj *prev; /* Link for list of acquired mutexes */
- union acpi_operand_obj *next; /* Link for list of acquired mutexes */
-
-} ACPI_OBJECT_MUTEX;
-
-
-typedef struct /* REGION */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- u8 space_id;
- u32 length;
- ACPI_PHYSICAL_ADDRESS address;
- union acpi_operand_obj *extra; /* Pointer to executable AML (in region definition) */
-
- union acpi_operand_obj *addr_handler; /* Handler for system notifies */
- ACPI_NAMESPACE_NODE *node; /* containing object */
- union acpi_operand_obj *next;
-
-} ACPI_OBJECT_REGION;
-
-
-typedef struct /* POWER RESOURCE - has Handle and notification handler/context*/
-{
- ACPI_OBJECT_COMMON_HEADER
-
- u32 system_level;
- u32 resource_order;
-
- union acpi_operand_obj *sys_handler; /* Handler for system notifies */
- union acpi_operand_obj *drv_handler; /* Handler for driver notifies */
-
-} ACPI_OBJECT_POWER_RESOURCE;
-
-
-typedef struct /* PROCESSOR - has Handle and notification handler/context*/
-{
- ACPI_OBJECT_COMMON_HEADER
-
- u32 proc_id;
- u32 length;
- ACPI_IO_ADDRESS address;
-
- union acpi_operand_obj *sys_handler; /* Handler for system notifies */
- union acpi_operand_obj *drv_handler; /* Handler for driver notifies */
- union acpi_operand_obj *addr_handler; /* Handler for Address space */
-
-} ACPI_OBJECT_PROCESSOR;
-
-
-typedef struct /* THERMAL ZONE - has Handle and Handler/Context */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- union acpi_operand_obj *sys_handler; /* Handler for system notifies */
- union acpi_operand_obj *drv_handler; /* Handler for driver notifies */
- union acpi_operand_obj *addr_handler; /* Handler for Address space */
-
-} ACPI_OBJECT_THERMAL_ZONE;
-
-
-/*
- * Internal types
- */
-
-
-typedef struct /* FIELD */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- ACPI_COMMON_FIELD_INFO
-
- union acpi_operand_obj *container; /* Containing object */
-
-} ACPI_OBJECT_FIELD;
-
-
-typedef struct /* BANK FIELD */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- ACPI_COMMON_FIELD_INFO
- u32 value; /* Value to store into Bank_select */
-
- ACPI_HANDLE bank_select; /* Bank select register */
- union acpi_operand_obj *container; /* Containing object */
-
-} ACPI_OBJECT_BANK_FIELD;
-
-
-typedef struct /* INDEX FIELD */
-{
- /*
- * No container pointer needed since the index and data register definitions
- * will define how to access the respective registers
- */
- ACPI_OBJECT_COMMON_HEADER
-
- ACPI_COMMON_FIELD_INFO
- u32 value; /* Value to store into Index register */
-
- ACPI_HANDLE index; /* Index register */
- ACPI_HANDLE data; /* Data register */
-
-} ACPI_OBJECT_INDEX_FIELD;
-
-
-typedef struct /* NOTIFY HANDLER */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- ACPI_NAMESPACE_NODE *node; /* Parent device */
- NOTIFY_HANDLER handler;
- void *context;
-
-} ACPI_OBJECT_NOTIFY_HANDLER;
-
-
-/* Flags for address handler */
-
-#define ADDR_HANDLER_DEFAULT_INSTALLED 0x1
-
-
-typedef struct /* ADDRESS HANDLER */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- u8 space_id;
- u16 hflags;
- ADDRESS_SPACE_HANDLER handler;
-
- ACPI_NAMESPACE_NODE *node; /* Parent device */
- void *context;
- ADDRESS_SPACE_SETUP setup;
- union acpi_operand_obj *region_list; /* regions using this handler */
- union acpi_operand_obj *next;
-
-} ACPI_OBJECT_ADDR_HANDLER;
-
-
-/*
- * The Reference object type is used for these opcodes:
- * Arg[0-6], Local[0-7], Index_op, Name_op, Zero_op, One_op, Ones_op, Debug_op
- */
-
-typedef struct /* Reference - Local object type */
-{
- ACPI_OBJECT_COMMON_HEADER
-
- u8 target_type; /* Used for Index_op */
- u16 opcode;
- u32 offset; /* Used for Arg_op, Local_op, and Index_op */
-
- void *object; /* Name_op=>HANDLE to obj, Index_op=>ACPI_OPERAND_OBJECT */
- ACPI_NAMESPACE_NODE *node;
- union acpi_operand_obj **where;
-
-} ACPI_OBJECT_REFERENCE;
-
-
-/*
- * Extra object is used as additional storage for types that
- * have AML code in their declarations (Term_args) that must be
- * evaluated at run time.
- *
- * Currently: Region and Field_unit types
- */
-
-typedef struct /* EXTRA */
-{
- ACPI_OBJECT_COMMON_HEADER
- u8 byte_fill1;
- u16 word_fill1;
- u32 pcode_length;
- u8 *pcode;
- ACPI_NAMESPACE_NODE *method_REG; /* _REG method for this region (if any) */
- void *region_context; /* Region-specific data */
-
-} ACPI_OBJECT_EXTRA;
-
-
-/******************************************************************************
- *
- * ACPI_OPERAND_OBJECT Descriptor - a giant union of all of the above
- *
- *****************************************************************************/
-
-typedef union acpi_operand_obj
-{
- ACPI_OBJECT_COMMON common;
- ACPI_OBJECT_CACHE_LIST cache;
- ACPI_OBJECT_INTEGER integer;
- ACPI_OBJECT_STRING string;
- ACPI_OBJECT_BUFFER buffer;
- ACPI_OBJECT_PACKAGE package;
- ACPI_OBJECT_FIELD_UNIT field_unit;
- ACPI_OBJECT_DEVICE device;
- ACPI_OBJECT_EVENT event;
- ACPI_OBJECT_METHOD method;
- ACPI_OBJECT_MUTEX mutex;
- ACPI_OBJECT_REGION region;
- ACPI_OBJECT_POWER_RESOURCE power_resource;
- ACPI_OBJECT_PROCESSOR processor;
- ACPI_OBJECT_THERMAL_ZONE thermal_zone;
- ACPI_OBJECT_FIELD field;
- ACPI_OBJECT_BANK_FIELD bank_field;
- ACPI_OBJECT_INDEX_FIELD index_field;
- ACPI_OBJECT_REFERENCE reference;
- ACPI_OBJECT_NOTIFY_HANDLER notify_handler;
- ACPI_OBJECT_ADDR_HANDLER addr_handler;
- ACPI_OBJECT_EXTRA extra;
-
-} ACPI_OPERAND_OBJECT;
-
-#endif /* _ACOBJECT_H */
diff --git a/reactos/drivers/bus/acpi/include/acoutput.h b/reactos/drivers/bus/acpi/include/acoutput.h
deleted file mode 100644
index 82d137bb5b7..00000000000
--- a/reactos/drivers/bus/acpi/include/acoutput.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/******************************************************************************
- *
- * Name: acoutput.h -- debug output
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACOUTPUT_H__
-#define __ACOUTPUT_H__
-
-/*
- * Debug levels and component IDs. These are used to control the
- * granularity of the output of the DEBUG_PRINT macro -- on a per-
- * component basis and a per-exception-type basis.
- */
-
-/* Component IDs -- used in the global "Debug_layer" */
-
-#define ACPI_UTILITIES 0x00000001
-#define ACPI_HARDWARE 0x00000002
-#define ACPI_EVENTS 0x00000003
-#define ACPI_TABLES 0x00000008
-#define ACPI_NAMESPACE 0x00000010
-#define ACPI_PARSER 0x00000020
-#define ACPI_DISPATCHER 0x00000040
-#define ACPI_EXECUTER 0x00000080
-#define ACPI_RESOURCES 0x00000100
-#define ACPI_DEVICES 0x00000200
-#define ACPI_POWER 0x00000400
-
-
-#define ACPI_BUS_MANAGER 0x00001000
-#define ACPI_POWER_CONTROL 0x00002000
-#define ACPI_EMBEDDED_CONTROLLER 0x00004000
-#define ACPI_PROCESSOR_CONTROL 0x00008000
-#define ACPI_AC_ADAPTER 0x00010000
-#define ACPI_BATTERY 0x00020000
-#define ACPI_BUTTON 0x00040000
-#define ACPI_SYSTEM 0x00080000
-#define ACPI_THERMAL_ZONE 0x00100000
-
-#define ACPI_DEBUGGER 0x01000000
-#define ACPI_OS_SERVICES 0x02000000
-#define ACPI_ALL_COMPONENTS 0x01FFFFFF
-
-#define ACPI_COMPONENT_DEFAULT (ACPI_ALL_COMPONENTS)
-
-
-#define ACPI_COMPILER 0x10000000
-#define ACPI_TOOLS 0x20000000
-
-
-/* Exception level -- used in the global "Debug_level" */
-
-#define ACPI_OK 0x00000001
-#define ACPI_INFO 0x00000002
-#define ACPI_WARN 0x00000004
-#define ACPI_ERROR 0x00000008
-#define ACPI_FATAL 0x00000010
-#define ACPI_DEBUG_OBJECT 0x00000020
-#define ACPI_ALL 0x0000003F
-
-
-/* Trace level -- also used in the global "Debug_level" */
-
-#define TRACE_PARSE 0x00000100
-#define TRACE_DISPATCH 0x00000200
-#define TRACE_LOAD 0x00000400
-#define TRACE_EXEC 0x00000800
-#define TRACE_NAMES 0x00001000
-#define TRACE_OPREGION 0x00002000
-#define TRACE_BFIELD 0x00004000
-#define TRACE_TRASH 0x00008000
-#define TRACE_TABLES 0x00010000
-#define TRACE_FUNCTIONS 0x00020000
-#define TRACE_VALUES 0x00040000
-#define TRACE_OBJECTS 0x00080000
-#define TRACE_ALLOCATIONS 0x00100000
-#define TRACE_RESOURCES 0x00200000
-#define TRACE_IO 0x00400000
-#define TRACE_INTERRUPTS 0x00800000
-#define TRACE_USER_REQUESTS 0x01000000
-#define TRACE_PACKAGE 0x02000000
-#define TRACE_MUTEX 0x04000000
-#define TRACE_INIT 0x08000000
-
-#define TRACE_ALL 0x0FFFFF00
-
-
-/* Exceptionally verbose output -- also used in the global "Debug_level" */
-
-#define VERBOSE_AML_DISASSEMBLE 0x10000000
-#define VERBOSE_INFO 0x20000000
-#define VERBOSE_TABLES 0x40000000
-#define VERBOSE_EVENTS 0x80000000
-
-#define VERBOSE_ALL 0xF0000000
-
-
-/* Defaults for Debug_level, debug and normal */
-
-#define DEBUG_DEFAULT (ACPI_OK | ACPI_WARN | ACPI_ERROR | ACPI_DEBUG_OBJECT)
-#define NORMAL_DEFAULT (ACPI_OK | ACPI_WARN | ACPI_ERROR | ACPI_DEBUG_OBJECT)
-#define DEBUG_ALL (VERBOSE_AML_DISASSEMBLE | TRACE_ALL | ACPI_ALL)
-
-/* Misc defines */
-
-#define HEX 0x01
-#define ASCII 0x02
-#define FULL_ADDRESS 0x04
-#define CHARS_PER_LINE 16 /* used in Dump_buf function */
-
-
-#endif /* __ACOUTPUT_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acparser.h b/reactos/drivers/bus/acpi/include/acparser.h
deleted file mode 100644
index 83a6c6761d6..00000000000
--- a/reactos/drivers/bus/acpi/include/acparser.h
+++ /dev/null
@@ -1,346 +0,0 @@
-/******************************************************************************
- *
- * Module Name: acparser.h - AML Parser subcomponent prototypes and defines
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#ifndef __ACPARSER_H__
-#define __ACPARSER_H__
-
-
-#define OP_HAS_RETURN_VALUE 1
-
-/* variable # arguments */
-
-#define ACPI_VAR_ARGS ACPI_UINT32_MAX
-
-/* maximum virtual address */
-
-#define ACPI_MAX_AML ((u8 *)(~0UL))
-
-
-#define ACPI_PARSE_DELETE_TREE 0x0001
-#define ACPI_PARSE_NO_TREE_DELETE 0x0000
-#define ACPI_PARSE_TREE_MASK 0x0001
-
-#define ACPI_PARSE_LOAD_PASS1 0x0010
-#define ACPI_PARSE_LOAD_PASS2 0x0020
-#define ACPI_PARSE_EXECUTE 0x0030
-#define ACPI_PARSE_MODE_MASK 0x0030
-
-/* psapi - Parser external interfaces */
-
-ACPI_STATUS
-acpi_psx_load_table (
- u8 *pcode_addr,
- u32 pcode_length);
-
-ACPI_STATUS
-acpi_psx_execute (
- ACPI_NAMESPACE_NODE *method_node,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_obj_desc);
-
-
-u8
-acpi_ps_is_namespace_object_op (
- u16 opcode);
-u8
-acpi_ps_is_namespace_op (
- u16 opcode);
-
-
-/******************************************************************************
- *
- * Parser interfaces
- *
- *****************************************************************************/
-
-
-/* psargs - Parse AML opcode arguments */
-
-u8 *
-acpi_ps_get_next_package_end (
- ACPI_PARSE_STATE *parser_state);
-
-u32
-acpi_ps_get_next_package_length (
- ACPI_PARSE_STATE *parser_state);
-
-NATIVE_CHAR *
-acpi_ps_get_next_namestring (
- ACPI_PARSE_STATE *parser_state);
-
-void
-acpi_ps_get_next_simple_arg (
- ACPI_PARSE_STATE *parser_state,
- u32 arg_type, /* type of argument */
- ACPI_PARSE_OBJECT *arg); /* (OUT) argument data */
-
-void
-acpi_ps_get_next_namepath (
- ACPI_PARSE_STATE *parser_state,
- ACPI_PARSE_OBJECT *arg,
- u32 *arg_count,
- u8 method_call);
-
-ACPI_PARSE_OBJECT *
-acpi_ps_get_next_field (
- ACPI_PARSE_STATE *parser_state);
-
-ACPI_PARSE_OBJECT *
-acpi_ps_get_next_arg (
- ACPI_PARSE_STATE *parser_state,
- u32 arg_type,
- u32 *arg_count);
-
-
-/* psopcode - AML Opcode information */
-
-ACPI_OPCODE_INFO *
-acpi_ps_get_opcode_info (
- u16 opcode);
-
-NATIVE_CHAR *
-acpi_ps_get_opcode_name (
- u16 opcode);
-
-
-/* psparse - top level parsing routines */
-
-ACPI_STATUS
-acpi_ps_find_object (
- u16 opcode,
- ACPI_PARSE_OBJECT *op,
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT **out_op);
-
-void
-acpi_ps_delete_parse_tree (
- ACPI_PARSE_OBJECT *root);
-
-ACPI_STATUS
-acpi_ps_parse_loop (
- ACPI_WALK_STATE *walk_state);
-
-ACPI_STATUS
-acpi_ps_parse_aml (
- ACPI_PARSE_OBJECT *start_scope,
- u8 *aml,
- u32 aml_size,
- u32 parse_flags,
- ACPI_NAMESPACE_NODE *method_node,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **caller_return_desc,
- ACPI_PARSE_DOWNWARDS descending_callback,
- ACPI_PARSE_UPWARDS ascending_callback);
-
-ACPI_STATUS
-acpi_ps_parse_table (
- u8 *aml,
- u32 aml_size,
- ACPI_PARSE_DOWNWARDS descending_callback,
- ACPI_PARSE_UPWARDS ascending_callback,
- ACPI_PARSE_OBJECT **root_object);
-
-u16
-acpi_ps_peek_opcode (
- ACPI_PARSE_STATE *state);
-
-
-/* psscope - Scope stack management routines */
-
-
-ACPI_STATUS
-acpi_ps_init_scope (
- ACPI_PARSE_STATE *parser_state,
- ACPI_PARSE_OBJECT *root);
-
-ACPI_PARSE_OBJECT *
-acpi_ps_get_parent_scope (
- ACPI_PARSE_STATE *state);
-
-u8
-acpi_ps_has_completed_scope (
- ACPI_PARSE_STATE *parser_state);
-
-void
-acpi_ps_pop_scope (
- ACPI_PARSE_STATE *parser_state,
- ACPI_PARSE_OBJECT **op,
- u32 *arg_list,
- u32 *arg_count);
-
-ACPI_STATUS
-acpi_ps_push_scope (
- ACPI_PARSE_STATE *parser_state,
- ACPI_PARSE_OBJECT *op,
- u32 remaining_args,
- u32 arg_count);
-
-void
-acpi_ps_cleanup_scope (
- ACPI_PARSE_STATE *state);
-
-
-/* pstree - parse tree manipulation routines */
-
-void
-acpi_ps_append_arg(
- ACPI_PARSE_OBJECT *op,
- ACPI_PARSE_OBJECT *arg);
-
-ACPI_PARSE_OBJECT*
-acpi_ps_find (
- ACPI_PARSE_OBJECT *scope,
- NATIVE_CHAR *path,
- u16 opcode,
- u32 create);
-
-ACPI_PARSE_OBJECT *
-acpi_ps_get_arg(
- ACPI_PARSE_OBJECT *op,
- u32 argn);
-
-ACPI_PARSE_OBJECT *
-acpi_ps_get_child (
- ACPI_PARSE_OBJECT *op);
-
-ACPI_PARSE_OBJECT *
-acpi_ps_get_depth_next (
- ACPI_PARSE_OBJECT *origin,
- ACPI_PARSE_OBJECT *op);
-
-
-/* pswalk - parse tree walk routines */
-
-ACPI_STATUS
-acpi_ps_walk_parsed_aml (
- ACPI_PARSE_OBJECT *start_op,
- ACPI_PARSE_OBJECT *end_op,
- ACPI_OPERAND_OBJECT *mth_desc,
- ACPI_NAMESPACE_NODE *start_node,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **caller_return_desc,
- ACPI_OWNER_ID owner_id,
- ACPI_PARSE_DOWNWARDS descending_callback,
- ACPI_PARSE_UPWARDS ascending_callback);
-
-ACPI_STATUS
-acpi_ps_get_next_walk_op (
- ACPI_WALK_STATE *walk_state,
- ACPI_PARSE_OBJECT *op,
- ACPI_PARSE_UPWARDS ascending_callback);
-
-
-/* psutils - parser utilities */
-
-
-ACPI_PARSE_STATE *
-acpi_ps_create_state (
- u8 *aml,
- u32 aml_size);
-
-void
-acpi_ps_init_op (
- ACPI_PARSE_OBJECT *op,
- u16 opcode);
-
-ACPI_PARSE_OBJECT *
-acpi_ps_alloc_op (
- u16 opcode);
-
-void
-acpi_ps_free_op (
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_ps_delete_parse_cache (
- void);
-
-u8
-acpi_ps_is_leading_char (
- u32 c);
-
-u8
-acpi_ps_is_prefix_char (
- u32 c);
-
-u8
-acpi_ps_is_named_op (
- u16 opcode);
-
-u8
-acpi_ps_is_node_op (
- u16 opcode);
-
-u8
-acpi_ps_is_deferred_op (
- u16 opcode);
-
-u8
-acpi_ps_is_bytelist_op(
- u16 opcode);
-
-u8
-acpi_ps_is_field_op(
- u16 opcode);
-
-u8
-acpi_ps_is_create_field_op (
- u16 opcode);
-
-ACPI_PARSE2_OBJECT*
-acpi_ps_to_extended_op(
- ACPI_PARSE_OBJECT *op);
-
-u32
-acpi_ps_get_name(
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_ps_set_name(
- ACPI_PARSE_OBJECT *op,
- u32 name);
-
-
-/* psdump - display parser tree */
-
-u32
-acpi_ps_sprint_path (
- NATIVE_CHAR *buffer_start,
- u32 buffer_size,
- ACPI_PARSE_OBJECT *op);
-
-u32
-acpi_ps_sprint_op (
- NATIVE_CHAR *buffer_start,
- u32 buffer_size,
- ACPI_PARSE_OBJECT *op);
-
-void
-acpi_ps_show (
- ACPI_PARSE_OBJECT *op);
-
-
-#endif /* __ACPARSER_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acpi.h b/reactos/drivers/bus/acpi/include/acpi.h
deleted file mode 100644
index c1226f84659..00000000000
--- a/reactos/drivers/bus/acpi/include/acpi.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/******************************************************************************
- *
- * Name: acpi.h - Master include file, Publics and external data.
- * $Revision: 1.2 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACPI_H__
-#define __ACPI_H__
-
-#include "platform/types.h"
-#undef ROUND_DOWN
-#undef ROUND_UP
-#define DEFINE_ACPI_GLOBALS
-
-/*
- * Common includes for all ACPI driver files
- * We put them here because we don't want to duplicate them
- * in the rest of the source code again and again.
- */
-#include "acconfig.h" /* Configuration constants */
-#include "platform/acenv.h" /* Target environment specific items */
-#include "actypes.h" /* Fundamental common data types */
-#include "acexcep.h" /* ACPI exception codes */
-#include "acmacros.h" /* C macros */
-#include "actbl.h" /* ACPI table definitions */
-#include "aclocal.h" /* Internal data types */
-#include "acoutput.h" /* Error output and Debug macros */
-#include "acpiosxf.h" /* Interfaces to the ACPI-to-OS layer*/
-#include "acpixf.h" /* ACPI core subsystem external interfaces */
-#include "acobject.h" /* ACPI internal object */
-#include "acstruct.h" /* Common structures */
-#include "acglobal.h" /* All global variables */
-#include "achware.h" /* Hardware defines and interfaces */
-#include "accommon.h" /* Common interfaces */
-#include "acresrc.h" /* Resource Manager function prototypes */
-#include "acparser.h"
-#include "acinterp.h"
-#include "amlcode.h"
-#include "acnamesp.h"
-#include "acevents.h"
-#include "actables.h"
-#include "acdispat.h"
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#endif /* __ACPI_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acpiosxf.h b/reactos/drivers/bus/acpi/include/acpiosxf.h
deleted file mode 100644
index f65e03846b1..00000000000
--- a/reactos/drivers/bus/acpi/include/acpiosxf.h
+++ /dev/null
@@ -1,341 +0,0 @@
-
-/******************************************************************************
- *
- * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL). These
- * interfaces must be implemented by OSL to interface the
- * ACPI components to the host operating system.
- *
- *****************************************************************************/
-
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACPIOSXF_H__
-#define __ACPIOSXF_H__
-
-#include "platform/acenv.h"
-#include "actypes.h"
-
-
-/* Priorities for Acpi_os_queue_for_execution */
-
-#define OSD_PRIORITY_GPE 1
-#define OSD_PRIORITY_HIGH 2
-#define OSD_PRIORITY_MED 3
-#define OSD_PRIORITY_LO 4
-
-#define ACPI_NO_UNIT_LIMIT ((u32) -1)
-#define ACPI_MUTEX_SEM 1
-
-
-/*
- * Types specific to the OS service interfaces
- */
-
-typedef
-u32 (*OSD_HANDLER) (
- void *context);
-
-typedef
-void (*OSD_EXECUTION_CALLBACK) (
- void *context);
-
-
-/*
- * OSL Initialization and shutdown primitives
- */
-
-ACPI_STATUS
-acpi_os_initialize (
- void);
-
-ACPI_STATUS
-acpi_os_terminate (
- void);
-
-
-/*
- * Synchronization primitives
- */
-
-ACPI_STATUS
-acpi_os_create_semaphore (
- u32 max_units,
- u32 initial_units,
- ACPI_HANDLE *out_handle);
-
-ACPI_STATUS
-acpi_os_delete_semaphore (
- ACPI_HANDLE handle);
-
-ACPI_STATUS
-acpi_os_wait_semaphore (
- ACPI_HANDLE handle,
- u32 units,
- u32 timeout);
-
-ACPI_STATUS
-acpi_os_signal_semaphore (
- ACPI_HANDLE handle,
- u32 units);
-
-
-/*
- * Memory allocation and mapping
- */
-
-void *
-acpi_os_allocate (
- u32 size);
-
-void *
-acpi_os_callocate (
- u32 size);
-
-void
-acpi_os_free (
- void * memory);
-
-ACPI_STATUS
-acpi_os_map_memory (
- ACPI_PHYSICAL_ADDRESS physical_address,
- u32 length,
- void **logical_address);
-
-void
-acpi_os_unmap_memory (
- void *logical_address,
- u32 length);
-
-ACPI_STATUS
-acpi_os_get_physical_address (
- void *logical_address,
- ACPI_PHYSICAL_ADDRESS *physical_address);
-
-
-/*
- * Interrupt handlers
- */
-
-ACPI_STATUS
-acpi_os_install_interrupt_handler (
- u32 interrupt_number,
- OSD_HANDLER service_routine,
- void *context);
-
-ACPI_STATUS
-acpi_os_remove_interrupt_handler (
- u32 interrupt_number,
- OSD_HANDLER service_routine);
-
-
-/*
- * Threads and Scheduling
- */
-
-u32
-acpi_os_get_thread_id (
- void);
-
-ACPI_STATUS
-acpi_os_queue_for_execution (
- u32 priority,
- OSD_EXECUTION_CALLBACK function,
- void *context);
-
-void
-acpi_os_sleep (
- u32 seconds,
- u32 milliseconds);
-
-void
-acpi_os_sleep_usec (
- u32 microseconds);
-
-
-/*
- * Platform/Hardware independent I/O interfaces
- */
-
-u8
-acpi_os_in8 (
- ACPI_IO_ADDRESS in_port);
-
-
-u16
-acpi_os_in16 (
- ACPI_IO_ADDRESS in_port);
-
-u32
-acpi_os_in32 (
- ACPI_IO_ADDRESS in_port);
-
-void
-acpi_os_out8 (
- ACPI_IO_ADDRESS out_port,
- u8 value);
-
-void
-acpi_os_out16 (
- ACPI_IO_ADDRESS out_port,
- u16 value);
-
-void
-acpi_os_out32 (
- ACPI_IO_ADDRESS out_port,
- u32 value);
-
-
-/*
- * Platform/Hardware independent physical memory interfaces
- */
-
-u8
-acpi_os_mem_in8 (
- ACPI_PHYSICAL_ADDRESS in_addr);
-
-u16
-acpi_os_mem_in16 (
- ACPI_PHYSICAL_ADDRESS in_addr);
-
-u32
-acpi_os_mem_in32 (
- ACPI_PHYSICAL_ADDRESS in_addr);
-
-void
-acpi_os_mem_out8 (
- ACPI_PHYSICAL_ADDRESS out_addr,
- u8 value);
-
-void
-acpi_os_mem_out16 (
- ACPI_PHYSICAL_ADDRESS out_addr,
- u16 value);
-
-void
-acpi_os_mem_out32 (
- ACPI_PHYSICAL_ADDRESS out_addr,
- u32 value);
-
-
-/*
- * Standard access to PCI configuration space
- */
-
-ACPI_STATUS
-acpi_os_read_pci_cfg_byte (
- u32 bus,
- u32 device_function,
- u32 register,
- u8 *value);
-
-ACPI_STATUS
-acpi_os_read_pci_cfg_word (
- u32 bus,
- u32 device_function,
- u32 register,
- u16 *value);
-
-ACPI_STATUS
-acpi_os_read_pci_cfg_dword (
- u32 bus,
- u32 device_function,
- u32 register,
- u32 *value);
-
-ACPI_STATUS
-acpi_os_write_pci_cfg_byte (
- u32 bus,
- u32 device_function,
- u32 register,
- u8 value);
-
-ACPI_STATUS
-acpi_os_write_pci_cfg_word (
- u32 bus,
- u32 device_function,
- u32 register,
- u16 value);
-
-
-ACPI_STATUS
-acpi_os_write_pci_cfg_dword (
- u32 bus,
- u32 device_function,
- u32 register,
- u32 value);
-
-
-/*
- * Miscellaneous
- */
-
-ACPI_STATUS
-acpi_os_breakpoint (
- NATIVE_CHAR *message);
-
-u8
-acpi_os_readable (
- void *pointer,
- u32 length);
-
-
-u8
-acpi_os_writable (
- void *pointer,
- u32 length);
-
-
-/*
- * Debug print routines
- */
-
-s32
-acpi_os_printf (
- const NATIVE_CHAR *format,
- ...);
-
-s32
-acpi_os_vprintf (
- const NATIVE_CHAR *format,
- va_list args);
-
-
-/*
- * Debug input
- */
-
-u32
-acpi_os_get_line (
- NATIVE_CHAR *buffer);
-
-
-/*
- * Debug
- */
-
-void
-acpi_os_dbg_assert(
- void *failed_assertion,
- void *file_name,
- u32 line_number,
- NATIVE_CHAR *message);
-
-
-#endif /* __ACPIOSXF_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acpixf.h b/reactos/drivers/bus/acpi/include/acpixf.h
deleted file mode 100644
index ef4b1dca32c..00000000000
--- a/reactos/drivers/bus/acpi/include/acpixf.h
+++ /dev/null
@@ -1,340 +0,0 @@
-
-/******************************************************************************
- *
- * Name: acpixf.h - External interfaces to the ACPI subsystem
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#ifndef __ACXFACE_H__
-#define __ACXFACE_H__
-
-#include "actypes.h"
-#include "actbl.h"
-
-
-/*
- * Global interfaces
- */
-
-ACPI_STATUS
-acpi_initialize_subsystem (
- void);
-
-ACPI_STATUS
-acpi_enable_subsystem (
- u32 flags);
-
-ACPI_STATUS
-acpi_terminate (
- void);
-
-ACPI_STATUS
-acpi_enable (
- void);
-
-ACPI_STATUS
-acpi_disable (
- void);
-
-ACPI_STATUS
-acpi_get_system_info(
- ACPI_BUFFER *ret_buffer);
-
-ACPI_STATUS
-acpi_format_exception (
- ACPI_STATUS exception,
- ACPI_BUFFER *out_buffer);
-
-
-/*
- * ACPI Memory manager
- */
-
-void *
-acpi_allocate (
- u32 size);
-
-void *
-acpi_callocate (
- u32 size);
-
-void
-acpi_free (
- void *address);
-
-
-/*
- * ACPI table manipulation interfaces
- */
-
-ACPI_STATUS
-acpi_find_root_pointer (
- ACPI_PHYSICAL_ADDRESS *rsdp_physical_address);
-
-ACPI_STATUS
-acpi_load_tables (
- ACPI_PHYSICAL_ADDRESS rsdp_physical_address);
-
-ACPI_STATUS
-acpi_load_table (
- ACPI_TABLE_HEADER *table_ptr);
-
-ACPI_STATUS
-acpi_unload_table (
- ACPI_TABLE_TYPE table_type);
-
-ACPI_STATUS
-acpi_get_table_header (
- ACPI_TABLE_TYPE table_type,
- u32 instance,
- ACPI_TABLE_HEADER *out_table_header);
-
-ACPI_STATUS
-acpi_get_table (
- ACPI_TABLE_TYPE table_type,
- u32 instance,
- ACPI_BUFFER *ret_buffer);
-
-
-/*
- * Namespace and name interfaces
- */
-
-ACPI_STATUS
-acpi_walk_namespace (
- ACPI_OBJECT_TYPE type,
- ACPI_HANDLE start_object,
- u32 max_depth,
- WALK_CALLBACK user_function,
- void *context,
- void * *return_value);
-
-ACPI_STATUS
-acpi_get_devices (
- NATIVE_CHAR *HID,
- WALK_CALLBACK user_function,
- void *context,
- void **return_value);
-
-ACPI_STATUS
-acpi_get_name (
- ACPI_HANDLE handle,
- u32 name_type,
- ACPI_BUFFER *ret_path_ptr);
-
-ACPI_STATUS
-acpi_get_handle (
- ACPI_HANDLE parent,
- ACPI_STRING pathname,
- ACPI_HANDLE *ret_handle);
-
-
-/*
- * Object manipulation and enumeration
- */
-
-ACPI_STATUS
-acpi_evaluate_object (
- ACPI_HANDLE object,
- ACPI_STRING pathname,
- ACPI_OBJECT_LIST *parameter_objects,
- ACPI_BUFFER *return_object_buffer);
-
-ACPI_STATUS
-acpi_get_object_info (
- ACPI_HANDLE device,
- ACPI_DEVICE_INFO *info);
-
-ACPI_STATUS
-acpi_get_next_object (
- ACPI_OBJECT_TYPE type,
- ACPI_HANDLE parent,
- ACPI_HANDLE child,
- ACPI_HANDLE *out_handle);
-
-ACPI_STATUS
-acpi_get_type (
- ACPI_HANDLE object,
- ACPI_OBJECT_TYPE *out_type);
-
-ACPI_STATUS
-acpi_get_parent (
- ACPI_HANDLE object,
- ACPI_HANDLE *out_handle);
-
-
-/*
- * Event handler interfaces
- */
-
-ACPI_STATUS
-acpi_install_fixed_event_handler (
- u32 acpi_event,
- FIXED_EVENT_HANDLER handler,
- void *context);
-
-ACPI_STATUS
-acpi_remove_fixed_event_handler (
- u32 acpi_event,
- FIXED_EVENT_HANDLER handler);
-
-ACPI_STATUS
-acpi_install_notify_handler (
- ACPI_HANDLE device,
- u32 handler_type,
- NOTIFY_HANDLER handler,
- void *context);
-
-ACPI_STATUS
-acpi_remove_notify_handler (
- ACPI_HANDLE device,
- u32 handler_type,
- NOTIFY_HANDLER handler);
-
-ACPI_STATUS
-acpi_install_address_space_handler (
- ACPI_HANDLE device,
- ACPI_ADDRESS_SPACE_TYPE space_id,
- ADDRESS_SPACE_HANDLER handler,
- ADDRESS_SPACE_SETUP setup,
- void *context);
-
-ACPI_STATUS
-acpi_remove_address_space_handler (
- ACPI_HANDLE device,
- ACPI_ADDRESS_SPACE_TYPE space_id,
- ADDRESS_SPACE_HANDLER handler);
-
-ACPI_STATUS
-acpi_install_gpe_handler (
- u32 gpe_number,
- u32 type,
- GPE_HANDLER handler,
- void *context);
-
-ACPI_STATUS
-acpi_acquire_global_lock (
- void);
-
-ACPI_STATUS
-acpi_release_global_lock (
- void);
-
-ACPI_STATUS
-acpi_remove_gpe_handler (
- u32 gpe_number,
- GPE_HANDLER handler);
-
-ACPI_STATUS
-acpi_enable_event (
- u32 acpi_event,
- u32 type);
-
-ACPI_STATUS
-acpi_disable_event (
- u32 acpi_event,
- u32 type);
-
-ACPI_STATUS
-acpi_clear_event (
- u32 acpi_event,
- u32 type);
-
-ACPI_STATUS
-acpi_get_event_status (
- u32 acpi_event,
- u32 type,
- ACPI_EVENT_STATUS *event_status);
-
-/*
- * Resource interfaces
- */
-
-ACPI_STATUS
-acpi_get_current_resources(
- ACPI_HANDLE device_handle,
- ACPI_BUFFER *ret_buffer);
-
-ACPI_STATUS
-acpi_get_possible_resources(
- ACPI_HANDLE device_handle,
- ACPI_BUFFER *ret_buffer);
-
-ACPI_STATUS
-acpi_set_current_resources (
- ACPI_HANDLE device_handle,
- ACPI_BUFFER *in_buffer);
-
-ACPI_STATUS
-acpi_get_irq_routing_table (
- ACPI_HANDLE bus_device_handle,
- ACPI_BUFFER *ret_buffer);
-
-
-/*
- * Hardware (ACPI device) interfaces
- */
-
-ACPI_STATUS
-acpi_set_firmware_waking_vector (
- ACPI_PHYSICAL_ADDRESS physical_address);
-
-ACPI_STATUS
-acpi_get_firmware_waking_vector (
- ACPI_PHYSICAL_ADDRESS *physical_address);
-
-ACPI_STATUS
-acpi_enter_sleep_state (
- u8 sleep_state);
-
-ACPI_STATUS
-acpi_get_processor_throttling_info (
- ACPI_HANDLE processor_handle,
- ACPI_BUFFER *user_buffer);
-
-ACPI_STATUS
-acpi_set_processor_throttling_state (
- ACPI_HANDLE processor_handle,
- u32 throttle_state);
-
-ACPI_STATUS
-acpi_get_processor_throttling_state (
- ACPI_HANDLE processor_handle,
- u32 *throttle_state);
-
-ACPI_STATUS
-acpi_get_processor_cx_info (
- ACPI_HANDLE processor_handle,
- ACPI_BUFFER *user_buffer);
-
-ACPI_STATUS
-acpi_set_processor_sleep_state (
- ACPI_HANDLE processor_handle,
- u32 cx_state);
-
-ACPI_STATUS
-acpi_processor_sleep (
- ACPI_HANDLE processor_handle,
- u32 *pm_timer_ticks);
-
-
-#endif /* __ACXFACE_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acresrc.h b/reactos/drivers/bus/acpi/include/acresrc.h
deleted file mode 100644
index 239d1f989c9..00000000000
--- a/reactos/drivers/bus/acpi/include/acresrc.h
+++ /dev/null
@@ -1,304 +0,0 @@
-/******************************************************************************
- *
- * Name: acresrc.h - Resource Manager function prototypes
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACRESRC_H__
-#define __ACRESRC_H__
-
-
-/*
- * Function prototypes called from Acpi* APIs
- */
-
-ACPI_STATUS
-acpi_rs_get_prt_method_data (
- ACPI_HANDLE handle,
- ACPI_BUFFER *ret_buffer);
-
-
-ACPI_STATUS
-acpi_rs_get_crs_method_data (
- ACPI_HANDLE handle,
- ACPI_BUFFER *ret_buffer);
-
-ACPI_STATUS
-acpi_rs_get_prs_method_data (
- ACPI_HANDLE handle,
- ACPI_BUFFER *ret_buffer);
-
-ACPI_STATUS
-acpi_rs_set_srs_method_data (
- ACPI_HANDLE handle,
- ACPI_BUFFER *ret_buffer);
-
-ACPI_STATUS
-acpi_rs_create_resource_list (
- ACPI_OPERAND_OBJECT *byte_stream_buffer,
- u8 *output_buffer,
- u32 *output_buffer_length);
-
-ACPI_STATUS
-acpi_rs_create_byte_stream (
- RESOURCE *linked_list_buffer,
- u8 *output_buffer,
- u32 *output_buffer_length);
-
-ACPI_STATUS
-acpi_rs_create_pci_routing_table (
- ACPI_OPERAND_OBJECT *method_return_object,
- u8 *output_buffer,
- u32 *output_buffer_length);
-
-
-/*
- *Function prototypes called from Acpi_rs_create*APIs
- */
-
-void
-acpi_rs_dump_resource_list (
- RESOURCE *resource);
-
-void
-acpi_rs_dump_irq_list (
- u8 *route_table);
-
-ACPI_STATUS
-acpi_rs_get_byte_stream_start (
- u8 *byte_stream_buffer,
- u8 **byte_stream_start,
- u32 *size);
-
-ACPI_STATUS
-acpi_rs_calculate_list_length (
- u8 *byte_stream_buffer,
- u32 byte_stream_buffer_length,
- u32 *size_needed);
-
-ACPI_STATUS
-acpi_rs_calculate_byte_stream_length (
- RESOURCE *linked_list_buffer,
- u32 *size_needed);
-
-ACPI_STATUS
-acpi_rs_calculate_pci_routing_table_length (
- ACPI_OPERAND_OBJECT *package_object,
- u32 *buffer_size_needed);
-
-ACPI_STATUS
-acpi_rs_byte_stream_to_list (
- u8 *byte_stream_buffer,
- u32 byte_stream_buffer_length,
- u8 **output_buffer);
-
-ACPI_STATUS
-acpi_rs_list_to_byte_stream (
- RESOURCE *linked_list,
- u32 byte_stream_size_needed,
- u8 **output_buffer);
-
-ACPI_STATUS
-acpi_rs_io_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_fixed_io_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_io_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_fixed_io_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_irq_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_irq_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_dma_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_dma_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_address16_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_address16_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_address32_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_address32_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_start_dependent_functions_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_end_dependent_functions_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_start_dependent_functions_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_end_dependent_functions_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_memory24_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_memory24_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_memory32_range_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size
-);
-
-ACPI_STATUS
-acpi_rs_fixed_memory32_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_memory32_range_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_fixed_memory32_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_extended_irq_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_extended_irq_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_end_tag_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_end_tag_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-ACPI_STATUS
-acpi_rs_vendor_resource (
- u8 *byte_stream_buffer,
- u32 *bytes_consumed,
- u8 **output_buffer,
- u32 *structure_size);
-
-ACPI_STATUS
-acpi_rs_vendor_stream (
- RESOURCE *linked_list,
- u8 **output_buffer,
- u32 *bytes_consumed);
-
-
-#endif /* __ACRESRC_H__ */
diff --git a/reactos/drivers/bus/acpi/include/acstruct.h b/reactos/drivers/bus/acpi/include/acstruct.h
deleted file mode 100644
index c8abf99cbed..00000000000
--- a/reactos/drivers/bus/acpi/include/acstruct.h
+++ /dev/null
@@ -1,157 +0,0 @@
-/******************************************************************************
- *
- * Name: acstruct.h - Internal structs
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACSTRUCT_H__
-#define __ACSTRUCT_H__
-
-
-/*****************************************************************************
- *
- * Tree walking typedefs and structs
- *
- ****************************************************************************/
-
-
-/*
- * Walk state - current state of a parse tree walk. Used for both a leisurely stroll through
- * the tree (for whatever reason), and for control method execution.
- */
-
-#define NEXT_OP_DOWNWARD 1
-#define NEXT_OP_UPWARD 2
-
-#define WALK_NON_METHOD 0
-#define WALK_METHOD 1
-#define WALK_METHOD_RESTART 2
-
-typedef struct acpi_walk_state
-{
- u8 data_type; /* To differentiate various internal objs */\
- ACPI_OWNER_ID owner_id; /* Owner of objects created during the walk */
- u8 last_predicate; /* Result of last predicate */
- u8 next_op_info; /* Info about Next_op */
- u8 num_operands; /* Stack pointer for Operands[] array */
- u8 current_result; /* */
-
- struct acpi_walk_state *next; /* Next Walk_state in list */
- ACPI_PARSE_OBJECT *origin; /* Start of walk [Obsolete] */
-
-/* TBD: Obsolete with removal of WALK procedure ? */
- ACPI_PARSE_OBJECT *prev_op; /* Last op that was processed */
- ACPI_PARSE_OBJECT *next_op; /* next op to be processed */
-
-
- ACPI_GENERIC_STATE *results; /* Stack of accumulated results */
- ACPI_GENERIC_STATE *control_state; /* List of control states (nested IFs) */
- ACPI_GENERIC_STATE *scope_info; /* Stack of nested scopes */
- ACPI_PARSE_STATE *parser_state; /* Current state of parser */
- u8 *aml_last_while;
- ACPI_OPCODE_INFO *op_info; /* Info on current opcode */
- ACPI_PARSE_DOWNWARDS descending_callback;
- ACPI_PARSE_UPWARDS ascending_callback;
-
- union acpi_operand_obj *return_desc; /* Return object, if any */
- union acpi_operand_obj *method_desc; /* Method descriptor if running a method */
- struct acpi_node *method_node; /* Method Node if running a method */
- ACPI_PARSE_OBJECT *method_call_op; /* Method_call Op if running a method */
- struct acpi_node *method_call_node; /* Called method Node*/
- union acpi_operand_obj *operands[OBJ_NUM_OPERANDS]; /* Operands passed to the interpreter */
- struct acpi_node arguments[MTH_NUM_ARGS]; /* Control method arguments */
- struct acpi_node local_variables[MTH_NUM_LOCALS]; /* Control method locals */
- struct acpi_walk_list *walk_list;
- u32 parse_flags;
- u8 walk_type;
- u8 return_used;
- u16 opcode; /* Current AML opcode */
- u32 prev_arg_types;
- u16 current_sync_level; /* Mutex Sync (nested acquire) level */
-
- /* Debug support */
-
- u32 method_breakpoint;
-
-
-} ACPI_WALK_STATE;
-
-
-/*
- * Walk list - head of a tree of walk states. Multiple walk states are created when there
- * are nested control methods executing.
- */
-typedef struct acpi_walk_list
-{
-
- ACPI_WALK_STATE *walk_state;
- ACPI_OBJECT_MUTEX acquired_mutex_list; /* List of all currently acquired mutexes */
-
-} ACPI_WALK_LIST;
-
-
-/* Info used by Acpi_ps_init_objects */
-
-typedef struct acpi_init_walk_info
-{
- u16 method_count;
- u16 op_region_count;
- u16 field_count;
- u16 op_region_init;
- u16 field_init;
- u16 object_count;
- ACPI_TABLE_DESC *table_desc;
-
-} ACPI_INIT_WALK_INFO;
-
-
-/* Info used by TBD */
-
-typedef struct acpi_device_walk_info
-{
- u16 device_count;
- u16 num_STA;
- u16 num_INI;
- ACPI_TABLE_DESC *table_desc;
-
-} ACPI_DEVICE_WALK_INFO;
-
-
-/* TBD: [Restructure] Merge with struct above */
-
-typedef struct acpi_walk_info
-{
- u32 debug_level;
- u32 owner_id;
-
-} ACPI_WALK_INFO;
-
-typedef struct acpi_get_devices_info
-{
- WALK_CALLBACK user_function;
- void *context;
- NATIVE_CHAR *hid;
-
-} ACPI_GET_DEVICES_INFO;
-
-
-#endif
diff --git a/reactos/drivers/bus/acpi/include/actables.h b/reactos/drivers/bus/acpi/include/actables.h
deleted file mode 100644
index c70208485be..00000000000
--- a/reactos/drivers/bus/acpi/include/actables.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/******************************************************************************
- *
- * Name: actables.h - ACPI table management
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACTABLES_H__
-#define __ACTABLES_H__
-
-
-/* Used in Acpi_tb_map_acpi_table for size parameter if table header is to be used */
-
-#define SIZE_IN_HEADER 0
-
-
-ACPI_STATUS
-acpi_tb_handle_to_object (
- u16 table_id,
- ACPI_TABLE_DESC **table_desc);
-
-/*
- * tbconvrt - Table conversion routines
- */
-
-ACPI_STATUS
-acpi_tb_convert_to_xsdt (
- ACPI_TABLE_DESC *table_info,
- u32 *number_of_tables);
-
-ACPI_STATUS
-acpi_tb_convert_table_fadt (
- void);
-
-ACPI_STATUS
-acpi_tb_build_common_facs (
- ACPI_TABLE_DESC *table_info);
-
-
-/*
- * tbget - Table "get" routines
- */
-
-ACPI_STATUS
-acpi_tb_get_table_ptr (
- ACPI_TABLE_TYPE table_type,
- u32 instance,
- ACPI_TABLE_HEADER **table_ptr_loc);
-
-ACPI_STATUS
-acpi_tb_get_table (
- ACPI_PHYSICAL_ADDRESS physical_address,
- ACPI_TABLE_HEADER *buffer_ptr,
- ACPI_TABLE_DESC *table_info);
-
-ACPI_STATUS
-acpi_tb_verify_rsdp (
- ACPI_PHYSICAL_ADDRESS RSDP_physical_address);
-
-ACPI_STATUS
-acpi_tb_get_table_facs (
- ACPI_TABLE_HEADER *buffer_ptr,
- ACPI_TABLE_DESC *table_info);
-
-
-/*
- * tbgetall - Get all firmware ACPI tables
- */
-
-ACPI_STATUS
-acpi_tb_get_all_tables (
- u32 number_of_tables,
- ACPI_TABLE_HEADER *buffer_ptr);
-
-
-/*
- * tbinstall - Table installation
- */
-
-ACPI_STATUS
-acpi_tb_install_table (
- ACPI_TABLE_HEADER *table_ptr,
- ACPI_TABLE_DESC *table_info);
-
-ACPI_STATUS
-acpi_tb_recognize_table (
- ACPI_TABLE_HEADER *table_ptr,
- ACPI_TABLE_DESC *table_info);
-
-ACPI_STATUS
-acpi_tb_init_table_descriptor (
- ACPI_TABLE_TYPE table_type,
- ACPI_TABLE_DESC *table_info);
-
-
-/*
- * tbremove - Table removal and deletion
- */
-
-void
-acpi_tb_delete_acpi_tables (
- void);
-
-void
-acpi_tb_delete_acpi_table (
- ACPI_TABLE_TYPE type);
-
-void
-acpi_tb_delete_single_table (
- ACPI_TABLE_DESC *table_desc);
-
-ACPI_TABLE_DESC *
-acpi_tb_uninstall_table (
- ACPI_TABLE_DESC *table_desc);
-
-void
-acpi_tb_free_acpi_tables_of_type (
- ACPI_TABLE_DESC *table_info);
-
-
-/*
- * tbrsd - RSDP, RSDT utilities
- */
-
-ACPI_STATUS
-acpi_tb_get_table_rsdt (
- u32 *number_of_tables);
-
-u8 *
-acpi_tb_scan_memory_for_rsdp (
- u8 *start_address,
- u32 length);
-
-ACPI_STATUS
-acpi_tb_find_rsdp (
- ACPI_TABLE_DESC *table_info);
-
-
-/*
- * tbutils - common table utilities
- */
-
-u8
-acpi_tb_system_table_pointer (
- void *where);
-
-ACPI_STATUS
-acpi_tb_map_acpi_table (
- ACPI_PHYSICAL_ADDRESS physical_address,
- u32 *size,
- void **logical_address);
-
-ACPI_STATUS
-acpi_tb_verify_table_checksum (
- ACPI_TABLE_HEADER *table_header);
-
-u8
-acpi_tb_checksum (
- void *buffer,
- u32 length);
-
-ACPI_STATUS
-acpi_tb_validate_table_header (
- ACPI_TABLE_HEADER *table_header);
-
-
-#endif /* __ACTABLES_H__ */
diff --git a/reactos/drivers/bus/acpi/include/actbl.h b/reactos/drivers/bus/acpi/include/actbl.h
deleted file mode 100644
index 7472372e9fd..00000000000
--- a/reactos/drivers/bus/acpi/include/actbl.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/******************************************************************************
- *
- * Name: actbl.h - Table data structures defined in ACPI specification
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACTBL_H__
-#define __ACTBL_H__
-
-
-/*
- * Values for description table header signatures
- */
-
-#define RSDP_NAME "RSDP"
-#define RSDP_SIG "RSD PTR " /* RSDT Pointer signature */
-#define APIC_SIG "APIC" /* Multiple APIC Description Table */
-#define DSDT_SIG "DSDT" /* Differentiated System Description Table */
-#define FADT_SIG "FACP" /* Fixed ACPI Description Table */
-#define FACS_SIG "FACS" /* Firmware ACPI Control Structure */
-#define PSDT_SIG "PSDT" /* Persistent System Description Table */
-#define RSDT_SIG "RSDT" /* Root System Description Table */
-#define XSDT_SIG "XSDT" /* Extended System Description Table */
-#define SSDT_SIG "SSDT" /* Secondary System Description Table */
-#define SBST_SIG "SBST" /* Smart Battery Specification Table */
-#define SPIC_SIG "SPIC" /* iosapic table */
-#define BOOT_SIG "BOOT" /* Boot table */
-
-
-#define GL_OWNED 0x02 /* Ownership of global lock is bit 1 */
-
-/* values of Mapic.Model */
-
-#define DUAL_PIC 0
-#define MULTIPLE_APIC 1
-
-/* values of Type in APIC_HEADER */
-
-#define APIC_PROC 0
-#define APIC_IO 1
-
-
-/*
- * Common table types. The base code can remain
- * constant if the underlying tables are changed
- */
-#define RSDT_DESCRIPTOR RSDT_DESCRIPTOR_REV2
-#define XSDT_DESCRIPTOR XSDT_DESCRIPTOR_REV2
-#define FACS_DESCRIPTOR FACS_DESCRIPTOR_REV2
-#define FADT_DESCRIPTOR FADT_DESCRIPTOR_REV2
-
-
-#pragma pack(1)
-
-/*
- * Architecture-independent tables
- * The architecture dependent tables are in separate files
- */
-
-typedef struct /* Root System Descriptor Pointer */
-{
- NATIVE_CHAR signature [8]; /* contains "RSD PTR " */
- u8 checksum; /* to make sum of struct == 0 */
- NATIVE_CHAR oem_id [6]; /* OEM identification */
- u8 revision; /* Must be 0 for 1.0, 2 for 2.0 */
- u32 rsdt_physical_address; /* 32-bit physical address of RSDT */
- u32 length; /* XSDT Length in bytes including hdr */
- UINT64 xsdt_physical_address; /* 64-bit physical address of XSDT */
- u8 extended_checksum; /* Checksum of entire table */
- NATIVE_CHAR reserved [3]; /* reserved field must be 0 */
-
-} RSDP_DESCRIPTOR;
-
-
-typedef struct /* ACPI common table header */
-{
- NATIVE_CHAR signature [4]; /* identifies type of table */
- u32 length; /* length of table, in bytes,
- * including header */
- u8 revision; /* specification minor version # */
- u8 checksum; /* to make sum of entire table == 0 */
- NATIVE_CHAR oem_id [6]; /* OEM identification */
- NATIVE_CHAR oem_table_id [8]; /* OEM table identification */
- u32 oem_revision; /* OEM revision number */
- NATIVE_CHAR asl_compiler_id [4]; /* ASL compiler vendor ID */
- u32 asl_compiler_revision; /* ASL compiler revision number */
-
-} ACPI_TABLE_HEADER;
-
-
-typedef struct /* Common FACS for internal use */
-{
- u32 *global_lock;
- UINT64 *firmware_waking_vector;
- u8 vector_width;
-
-} ACPI_COMMON_FACS;
-
-
-typedef struct /* APIC Table */
-{
- ACPI_TABLE_HEADER header; /* table header */
- u32 local_apic_address; /* Physical address for accessing local APICs */
- u32 PCATcompat : 1; /* a one indicates system also has dual 8259s */
- u32 reserved1 : 31;
-
-} APIC_TABLE;
-
-
-typedef struct /* APIC Header */
-{
- u8 type; /* APIC type. Either APIC_PROC or APIC_IO */
- u8 length; /* Length of APIC structure */
-
-} APIC_HEADER;
-
-
-typedef struct /* Processor APIC */
-{
- APIC_HEADER header;
- u8 processor_apic_id; /* ACPI processor id */
- u8 local_apic_id; /* processor's local APIC id */
- u32 processor_enabled: 1; /* Processor is usable if set */
- u32 reserved1 : 32;
-
-} PROCESSOR_APIC;
-
-
-typedef struct /* IO APIC */
-{
- APIC_HEADER header;
- u8 io_apic_id; /* I/O APIC ID */
- u8 reserved; /* reserved - must be zero */
- u32 io_apic_address; /* APIC's physical address */
- u32 vector; /* interrupt vector index where INTI
- * lines start */
-} IO_APIC;
-
-
-/*
-** IA64 TODO: Add SAPIC Tables
-*/
-
-/*
-** IA64 TODO: Modify Smart Battery Description to comply with ACPI IA64
-** extensions.
-*/
-typedef struct /* Smart Battery Description Table */
-{
- ACPI_TABLE_HEADER header;
- u32 warning_level;
- u32 low_level;
- u32 critical_level;
-
-} SMART_BATTERY_DESCRIPTION_TABLE;
-
-
-#pragma pack()
-
-
-/*
- * ACPI Table information. We save the table address, length,
- * and type of memory allocation (mapped or allocated) for each
- * table for 1) when we exit, and 2) if a new table is installed
- */
-
-#define ACPI_MEM_NOT_ALLOCATED 0
-#define ACPI_MEM_ALLOCATED 1
-#define ACPI_MEM_MAPPED 2
-
-/* Definitions for the Flags bitfield member of ACPI_TABLE_SUPPORT */
-
-#define ACPI_TABLE_SINGLE 0
-#define ACPI_TABLE_MULTIPLE 1
-
-
-/* Data about each known table type */
-
-typedef struct _acpi_table_support
-{
- NATIVE_CHAR *name;
- NATIVE_CHAR *signature;
- u8 sig_length;
- u8 flags;
- u16 status;
- void **global_ptr;
-
-} ACPI_TABLE_SUPPORT;
-
-/*
- * Get the architecture-specific tables
- */
-
-#include "actbl1.h" /* Acpi 1.0 table defintions */
-#include "actbl71.h" /* Acpi 0.71 IA-64 Extension table defintions */
-#include "actbl2.h" /* Acpi 2.0 table definitions */
-
-#endif /* __ACTBL_H__ */
diff --git a/reactos/drivers/bus/acpi/include/actbl1.h b/reactos/drivers/bus/acpi/include/actbl1.h
deleted file mode 100644
index 8cb88b459dc..00000000000
--- a/reactos/drivers/bus/acpi/include/actbl1.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/******************************************************************************
- *
- * Name: actbl1.h - ACPI 1.0 tables
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACTBL1_H__
-#define __ACTBL1_H__
-
-#pragma pack(1)
-
-/*************************************/
-/* ACPI Specification Rev 1.0 for */
-/* the Root System Description Table */
-/*************************************/
-typedef struct
-{
- ACPI_TABLE_HEADER header; /* Table header */
- u32 table_offset_entry [1]; /* Array of pointers to other */
- /* ACPI tables */
-} RSDT_DESCRIPTOR_REV1;
-
-
-/***************************************/
-/* ACPI Specification Rev 1.0 for */
-/* the Firmware ACPI Control Structure */
-/***************************************/
-typedef struct
-{
- NATIVE_CHAR signature[4]; /* signature "FACS" */
- u32 length; /* length of structure, in bytes */
- u32 hardware_signature; /* hardware configuration signature */
- u32 firmware_waking_vector; /* ACPI OS waking vector */
- u32 global_lock; /* Global Lock */
- u32 S4_bios_f : 1; /* Indicates if S4_bIOS support is present */
- u32 reserved1 : 31; /* must be 0 */
- u8 resverved3 [40]; /* reserved - must be zero */
-
-} FACS_DESCRIPTOR_REV1;
-
-
-/************************************/
-/* ACPI Specification Rev 1.0 for */
-/* the Fixed ACPI Description Table */
-/************************************/
-typedef struct
-{
- ACPI_TABLE_HEADER header; /* table header */
- u32 firmware_ctrl; /* Physical address of FACS */
- u32 dsdt; /* Physical address of DSDT */
- u8 model; /* System Interrupt Model */
- u8 reserved1; /* reserved */
- u16 sci_int; /* System vector of SCI interrupt */
- u32 smi_cmd; /* Port address of SMI command port */
- u8 acpi_enable; /* value to write to smi_cmd to enable ACPI */
- u8 acpi_disable; /* value to write to smi_cmd to disable ACPI */
- u8 S4_bios_req; /* Value to write to SMI CMD to enter S4_bIOS state */
- u8 reserved2; /* reserved - must be zero */
- u32 pm1a_evt_blk; /* Port address of Power Mgt 1a Acpi_event Reg Blk */
- u32 pm1b_evt_blk; /* Port address of Power Mgt 1b Acpi_event Reg Blk */
- u32 pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */
- u32 pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */
- u32 pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */
- u32 pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */
- u32 gpe0blk; /* Port addr of General Purpose Acpi_event 0 Reg Blk */
- u32 gpe1_blk; /* Port addr of General Purpose Acpi_event 1 Reg Blk */
- u8 pm1_evt_len; /* Byte Length of ports at pm1_x_evt_blk */
- u8 pm1_cnt_len; /* Byte Length of ports at pm1_x_cnt_blk */
- u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */
- u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */
- u8 gpe0blk_len; /* Byte Length of ports at gpe0_blk */
- u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */
- u8 gpe1_base; /* offset in gpe model where gpe1 events start */
- u8 reserved3; /* reserved */
- u16 plvl2_lat; /* worst case HW latency to enter/exit C2 state */
- u16 plvl3_lat; /* worst case HW latency to enter/exit C3 state */
- u16 flush_size; /* Size of area read to flush caches */
- u16 flush_stride; /* Stride used in flushing caches */
- u8 duty_offset; /* bit location of duty cycle field in p_cnt reg */
- u8 duty_width; /* bit width of duty cycle field in p_cnt reg */
- u8 day_alrm; /* index to day-of-month alarm in RTC CMOS RAM */
- u8 mon_alrm; /* index to month-of-year alarm in RTC CMOS RAM */
- u8 century; /* index to century in RTC CMOS RAM */
- u8 reserved4; /* reserved */
- u8 reserved4a; /* reserved */
- u8 reserved4b; /* reserved */
- u32 wb_invd : 1; /* wbinvd instruction works properly */
- u32 wb_invd_flush : 1; /* wbinvd flushes but does not invalidate */
- u32 proc_c1 : 1; /* all processors support C1 state */
- u32 plvl2_up : 1; /* C2 state works on MP system */
- u32 pwr_button : 1; /* Power button is handled as a generic feature */
- u32 sleep_button : 1; /* Sleep button is handled as a generic feature, or not present */
- u32 fixed_rTC : 1; /* RTC wakeup stat not in fixed register space */
- u32 rtcs4 : 1; /* RTC wakeup stat not possible from S4 */
- u32 tmr_val_ext : 1; /* tmr_val is 32 bits */
- u32 reserved5 : 23; /* reserved - must be zero */
-
-} FADT_DESCRIPTOR_REV1;
-
-#pragma pack()
-
-#endif /* __ACTBL1_H__ */
-
-
diff --git a/reactos/drivers/bus/acpi/include/actbl2.h b/reactos/drivers/bus/acpi/include/actbl2.h
deleted file mode 100644
index 8b6fe8f6e32..00000000000
--- a/reactos/drivers/bus/acpi/include/actbl2.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/******************************************************************************
- *
- * Name: actbl2.h - ACPI Specification Revision 2.0 Tables
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACTBL2_H__
-#define __ACTBL2_H__
-
-/**************************************/
-/* Prefered Power Management Profiles */
-/**************************************/
-#define PM_UNSPECIFIED 0
-#define PM_DESKTOP 1
-#define PM_MOBILE 2
-#define PM_WORKSTATION 3
-#define PM_ENTERPRISE_SERVER 4
-#define PM_SOHO_SERVER 5
-#define PM_APPLIANCE_PC 6
-
-/*********************************************/
-/* ACPI Boot Arch Flags, See spec Table 5-10 */
-/*********************************************/
-#define BAF_LEGACY_DEVICES 0x0001
-#define BAF_8042_KEYBOARD_CONTROLLER 0x0002
-
-#define FADT2_REVISION_ID 3
-
-#pragma pack(1)
-
-/*************************************/
-/* ACPI Specification Rev 2.0 for */
-/* the Root System Description Table */
-/*************************************/
-typedef struct
-{
- ACPI_TABLE_HEADER header; /* Table header */
- u32 table_offset_entry [1]; /* Array of pointers to */
- /* other tables' headers */
-} RSDT_DESCRIPTOR_REV2;
-
-
-/********************************************/
-/* ACPI Specification Rev 2.0 for the */
-/* Extended System Description Table (XSDT) */
-/********************************************/
-typedef struct
-{
- ACPI_TABLE_HEADER header; /* Table header */
- UINT64 table_offset_entry [1]; /* Array of pointers to */
- /* other tables' headers */
-} XSDT_DESCRIPTOR_REV2;
-
-/***************************************/
-/* ACPI Specification Rev 2.0 for */
-/* the Firmware ACPI Control Structure */
-/***************************************/
-typedef struct
-{
- NATIVE_CHAR signature[4]; /* signature "FACS" */
- u32 length; /* length of structure, in bytes */
- u32 hardware_signature; /* hardware configuration signature */
- u32 firmware_waking_vector; /* 32bit physical address of the Firmware Waking Vector. */
- u32 global_lock; /* Global Lock used to synchronize access to shared hardware resources */
- u32 S4_bios_f : 1; /* Indicates if S4_bIOS support is present */
- u32 reserved1 : 31; /* must be 0 */
- UINT64 Xfirmware_waking_vector; /* 64bit physical address of the Firmware Waking Vector. */
- u8 version; /* Version of this table */
- u8 reserved3 [31]; /* reserved - must be zero */
-
-} FACS_DESCRIPTOR_REV2;
-
-
-/***************************************/
-/* ACPI Specification Rev 2.0 for */
-/* the Generic Address Structure (GAS) */
-/***************************************/
-typedef struct
-{
- u8 address_space_id; /* Address space where struct or register exists. */
- u8 register_bit_width; /* Size in bits of given register */
- u8 register_bit_offset; /* Bit offset within the register */
- u8 reserved; /* Must be 0 */
- UINT64 address; /* 64-bit address of struct or register */
-
-} ACPI_GAS;
-
-
-/************************************/
-/* ACPI Specification Rev 2.0 for */
-/* the Fixed ACPI Description Table */
-/************************************/
-typedef struct
-{
- ACPI_TABLE_HEADER header; /* table header */
- u32 V1_firmware_ctrl; /* 32-bit physical address of FACS */
- u32 V1_dsdt; /* 32-bit physical address of DSDT */
- u8 reserved1; /* System Interrupt Model isn't used in ACPI 2.0*/
- u8 prefer_PM_profile; /* Conveys preferred power management profile to OSPM. */
- u16 sci_int; /* System vector of SCI interrupt */
- u32 smi_cmd; /* Port address of SMI command port */
- u8 acpi_enable; /* value to write to smi_cmd to enable ACPI */
- u8 acpi_disable; /* value to write to smi_cmd to disable ACPI */
- u8 S4_bios_req; /* Value to write to SMI CMD to enter S4_bIOS state */
- u8 pstate_cnt; /* processor performance state control*/
- u32 V1_pm1a_evt_blk; /* Port address of Power Mgt 1a Acpi_event Reg Blk */
- u32 V1_pm1b_evt_blk; /* Port address of Power Mgt 1b Acpi_event Reg Blk */
- u32 V1_pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */
- u32 V1_pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */
- u32 V1_pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */
- u32 V1_pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */
- u32 V1_gpe0blk; /* Port addr of General Purpose Acpi_event 0 Reg Blk */
- u32 V1_gpe1_blk; /* Port addr of General Purpose Acpi_event 1 Reg Blk */
- u8 pm1_evt_len; /* Byte Length of ports at pm1_x_evt_blk */
- u8 pm1_cnt_len; /* Byte Length of ports at pm1_x_cnt_blk */
- u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */
- u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */
- u8 gpe0blk_len; /* Byte Length of ports at gpe0_blk */
- u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */
- u8 gpe1_base; /* offset in gpe model where gpe1 events start */
- u8 cst_cnt; /* Support for the _CST object and C States change notification.*/
- u16 plvl2_lat; /* worst case HW latency to enter/exit C2 state */
- u16 plvl3_lat; /* worst case HW latency to enter/exit C3 state */
- u16 flush_size; /* number of flush strides that need to be read */
- u16 flush_stride; /* Processor's memory cache line width, in bytes */
- u8 duty_offset; /* Processor_s duty cycle index in processor's P_CNT reg*/
- u8 duty_width; /* Processor_s duty cycle value bit width in P_CNT register.*/
- u8 day_alrm; /* index to day-of-month alarm in RTC CMOS RAM */
- u8 mon_alrm; /* index to month-of-year alarm in RTC CMOS RAM */
- u8 century; /* index to century in RTC CMOS RAM */
- u16 iapc_boot_arch; /* IA-PC Boot Architecture Flags. See Table 5-10 for description*/
- u8 reserved2; /* reserved */
- u32 wb_invd : 1; /* wbinvd instruction works properly */
- u32 wb_invd_flush : 1; /* wbinvd flushes but does not invalidate */
- u32 proc_c1 : 1; /* all processors support C1 state */
- u32 plvl2_up : 1; /* C2 state works on MP system */
- u32 pwr_button : 1; /* Power button is handled as a generic feature */
- u32 sleep_button : 1; /* Sleep button is handled as a generic feature, or not present */
- u32 fixed_rTC : 1; /* RTC wakeup stat not in fixed register space */
- u32 rtcs4 : 1; /* RTC wakeup stat not possible from S4 */
- u32 tmr_val_ext : 1; /* tmr_val is 32 bits */
- u32 dock_cap : 1; /* Supports Docking */
- u32 reset_reg_sup : 1; /* Indicates system supports system reset via the FADT RESET_REG*/
- u32 sealed_case : 1; /* Indicates system has no internal expansion capabilities and case is sealed. */
- u32 headless : 1; /* Indicates system does not have local video capabilities or local input devices.*/
- u32 cpu_sw_sleep : 1; /* Indicates to OSPM that a processor native instruction */
- /* must be executed after writing the SLP_TYPx register. */
- u32 reserved6 : 18; /* reserved - must be zero */
-
- ACPI_GAS reset_register; /* Reset register address in GAS format */
- u8 reset_value; /* Value to write to the Reset_register port to reset the system. */
- u8 reserved7[3]; /* These three bytes must be zero */
- UINT64 Xfirmware_ctrl; /* 64-bit physical address of FACS */
- UINT64 Xdsdt; /* 64-bit physical address of DSDT */
- ACPI_GAS Xpm1a_evt_blk; /* Extended Power Mgt 1a Acpi_event Reg Blk address */
- ACPI_GAS Xpm1b_evt_blk; /* Extended Power Mgt 1b Acpi_event Reg Blk address */
- ACPI_GAS Xpm1a_cnt_blk; /* Extended Power Mgt 1a Control Reg Blk address */
- ACPI_GAS Xpm1b_cnt_blk; /* Extended Power Mgt 1b Control Reg Blk address */
- ACPI_GAS Xpm2_cnt_blk; /* Extended Power Mgt 2 Control Reg Blk address */
- ACPI_GAS Xpm_tmr_blk; /* Extended Power Mgt Timer Ctrl Reg Blk address */
- ACPI_GAS Xgpe0blk; /* Extended General Purpose Acpi_event 0 Reg Blk address */
- ACPI_GAS Xgpe1_blk; /* Extended General Purpose Acpi_event 1 Reg Blk address */
-
-} FADT_DESCRIPTOR_REV2;
-
-
-#pragma pack()
-
-#endif /* __ACTBL2_H__ */
-
diff --git a/reactos/drivers/bus/acpi/include/actbl71.h b/reactos/drivers/bus/acpi/include/actbl71.h
deleted file mode 100644
index 0390d6f8de6..00000000000
--- a/reactos/drivers/bus/acpi/include/actbl71.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/******************************************************************************
- *
- * Name: actbl71.h - IA-64 Extensions to the ACPI Spec Rev. 0.71
- * This file includes tables specific to this
- * specification revision.
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACTBL71_H__
-#define __ACTBL71_H__
-
-/* 0.71 FADT Address_space data item bitmasks defines */
-/* If the associated bit is zero then it is in memory space else in io space */
-#define SMI_CMD_ADDRESS_SPACE 0x01
-#define PM1_BLK_ADDRESS_SPACE 0x02
-#define PM2_CNT_BLK_ADDRESS_SPACE 0x04
-#define PM_TMR_BLK_ADDRESS_SPACE 0x08
-#define GPE0_BLK_ADDRESS_SPACE 0x10
-#define GPE1_BLK_ADDRESS_SPACE 0x20
-
-/* Only for clarity in declarations */
-typedef UINT64 IO_ADDRESS;
-
-#pragma pack(1)
-
-typedef struct /* Root System Descriptor Pointer */
-{
- NATIVE_CHAR signature [8]; /* contains "RSD PTR " */
- u8 checksum; /* to make sum of struct == 0 */
- NATIVE_CHAR oem_id [6]; /* OEM identification */
- u8 reserved; /* Must be 0 for 1.0, 2 for 2.0 */
- UINT64 rsdt_physical_address; /* 64-bit physical address of RSDT */
-} RSDP_DESCRIPTOR_REV071;
-
-
-/*****************************************/
-/* IA64 Extensions to ACPI Spec Rev 0.71 */
-/* for the Root System Description Table */
-/*****************************************/
-typedef struct
-{
- ACPI_TABLE_HEADER header; /* Table header */
- u32 reserved_pad; /* IA64 alignment, must be 0 */
- UINT64 table_offset_entry [1]; /* Array of pointers to other */
- /* tables' headers */
-} RSDT_DESCRIPTOR_REV071;
-
-
-/*******************************************/
-/* IA64 Extensions to ACPI Spec Rev 0.71 */
-/* for the Firmware ACPI Control Structure */
-/*******************************************/
-typedef struct
-{
- NATIVE_CHAR signature[4]; /* signature "FACS" */
- u32 length; /* length of structure, in bytes */
- u32 hardware_signature; /* hardware configuration signature */
- u32 reserved4; /* must be 0 */
- UINT64 firmware_waking_vector; /* ACPI OS waking vector */
- UINT64 global_lock; /* Global Lock */
- u32 S4_bios_f : 1; /* Indicates if S4_bIOS support is present */
- u32 reserved1 : 31; /* must be 0 */
- u8 reserved3 [28]; /* reserved - must be zero */
-
-} FACS_DESCRIPTOR_REV071;
-
-
-/******************************************/
-/* IA64 Extensions to ACPI Spec Rev 0.71 */
-/* for the Fixed ACPI Description Table */
-/******************************************/
-typedef struct
-{
- ACPI_TABLE_HEADER header; /* table header */
- u32 reserved_pad; /* IA64 alignment, must be 0 */
- UINT64 firmware_ctrl; /* 64-bit Physical address of FACS */
- UINT64 dsdt; /* 64-bit Physical address of DSDT */
- u8 model; /* System Interrupt Model */
- u8 address_space; /* Address Space Bitmask */
- u16 sci_int; /* System vector of SCI interrupt */
- u8 acpi_enable; /* value to write to smi_cmd to enable ACPI */
- u8 acpi_disable; /* value to write to smi_cmd to disable ACPI */
- u8 S4_bios_req; /* Value to write to SMI CMD to enter S4_bIOS state */
- u8 reserved2; /* reserved - must be zero */
- UINT64 smi_cmd; /* Port address of SMI command port */
- UINT64 pm1a_evt_blk; /* Port address of Power Mgt 1a Acpi_event Reg Blk */
- UINT64 pm1b_evt_blk; /* Port address of Power Mgt 1b Acpi_event Reg Blk */
- UINT64 pm1a_cnt_blk; /* Port address of Power Mgt 1a Control Reg Blk */
- UINT64 pm1b_cnt_blk; /* Port address of Power Mgt 1b Control Reg Blk */
- UINT64 pm2_cnt_blk; /* Port address of Power Mgt 2 Control Reg Blk */
- UINT64 pm_tmr_blk; /* Port address of Power Mgt Timer Ctrl Reg Blk */
- UINT64 gpe0blk; /* Port addr of General Purpose Acpi_event 0 Reg Blk */
- UINT64 gpe1_blk; /* Port addr of General Purpose Acpi_event 1 Reg Blk */
- u8 pm1_evt_len; /* Byte Length of ports at pm1_x_evt_blk */
- u8 pm1_cnt_len; /* Byte Length of ports at pm1_x_cnt_blk */
- u8 pm2_cnt_len; /* Byte Length of ports at pm2_cnt_blk */
- u8 pm_tm_len; /* Byte Length of ports at pm_tm_blk */
- u8 gpe0blk_len; /* Byte Length of ports at gpe0_blk */
- u8 gpe1_blk_len; /* Byte Length of ports at gpe1_blk */
- u8 gpe1_base; /* offset in gpe model where gpe1 events start */
- u8 reserved3; /* reserved */
- u16 plvl2_lat; /* worst case HW latency to enter/exit C2 state */
- u16 plvl3_lat; /* worst case HW latency to enter/exit C3 state */
- u8 day_alrm; /* index to day-of-month alarm in RTC CMOS RAM */
- u8 mon_alrm; /* index to month-of-year alarm in RTC CMOS RAM */
- u8 century; /* index to century in RTC CMOS RAM */
- u8 reserved4; /* reserved */
- u32 flush_cash : 1; /* PAL_FLUSH_CACHE is correctly supported */
- u32 reserved5 : 1; /* reserved - must be zero */
- u32 proc_c1 : 1; /* all processors support C1 state */
- u32 plvl2_up : 1; /* C2 state works on MP system */
- u32 pwr_button : 1; /* Power button is handled as a generic feature */
- u32 sleep_button : 1; /* Sleep button is handled as a generic feature, or not present */
- u32 fixed_rTC : 1; /* RTC wakeup stat not in fixed register space */
- u32 rtcs4 : 1; /* RTC wakeup stat not possible from S4 */
- u32 tmr_val_ext : 1; /* tmr_val is 32 bits */
- u32 dock_cap : 1; /* Supports Docking */
- u32 reserved6 : 22; /* reserved - must be zero */
-
-} FADT_DESCRIPTOR_REV071;
-
-#pragma pack()
-
-#endif /* __ACTBL71_H__ */
-
diff --git a/reactos/drivers/bus/acpi/include/actypes.h b/reactos/drivers/bus/acpi/include/actypes.h
deleted file mode 100644
index 16c7b76ddf7..00000000000
--- a/reactos/drivers/bus/acpi/include/actypes.h
+++ /dev/null
@@ -1,1077 +0,0 @@
-/******************************************************************************
- *
- * Name: actypes.h - Common data types for the entire ACPI subsystem
- * $Revision: 1.5 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACTYPES_H__
-#define __ACTYPES_H__
-
-/*! [Begin] no source code translation (keep the typedefs) */
-
-/*
- * Data types - Fixed across all compilation models
- *
- * BOOLEAN Logical Boolean.
- * 1 byte value containing a 0 for FALSE or a 1 for TRUE.
- * Other values are undefined.
- *
- * INT8 8-bit (1 byte) signed value
- * UINT8 8-bit (1 byte) unsigned value
- * INT16 16-bit (2 byte) signed value
- * UINT16 16-bit (2 byte) unsigned value
- * INT32 32-bit (4 byte) signed value
- * UINT32 32-bit (4 byte) unsigned value
- * INT64 64-bit (8 byte) signed value
- * UINT64 64-bit (8 byte) unsigned value
- * NATIVE_INT 32-bit on IA-32, 64-bit on IA-64 signed value
- * NATIVE_UINT 32-bit on IA-32, 64-bit on IA-64 unsigned value
- * UCHAR Character. 1 byte unsigned value.
- */
-
-
-#if defined (_IA64) || defined(_AMD64_)
-/*
- * 64-bit type definitions
- */
-//typedef unsigned char UINT8;
-//typedef unsigned char BOOLEAN;
-//typedef unsigned char UCHAR;
-//typedef unsigned short UINT16;
-//typedef int INT32;
-//typedef unsigned int UINT32;
-//typedef COMPILER_DEPENDENT_UINT64 UINT64;
-
-typedef UINT64 NATIVE_UINT;
-typedef INT64 NATIVE_INT;
-
-typedef NATIVE_UINT ACPI_TBLPTR;
-typedef UINT64 ACPI_IO_ADDRESS;
-typedef UINT64 ACPI_PHYSICAL_ADDRESS;
-
-#define ALIGNED_ADDRESS_BOUNDARY 0x00000008
-
-/* (No hardware alignment support in IA64) */
-
-
-#elif _IA16
-/*
- * 16-bit type definitions
- */
-typedef unsigned char UINT8;
-typedef unsigned char BOOLEAN;
-typedef unsigned char UCHAR;
-typedef unsigned int UINT16;
-typedef long INT32;
-typedef int INT16;
-typedef unsigned long UINT32;
-
-typedef struct
-{
- UINT32 Lo;
- UINT32 Hi;
-
-} UINT64;
-
-typedef UINT16 NATIVE_UINT;
-typedef INT16 NATIVE_INT;
-
-typedef UINT32 ACPI_TBLPTR;
-typedef UINT32 ACPI_IO_ADDRESS;
-typedef char *ACPI_PHYSICAL_ADDRESS;
-
-#define ALIGNED_ADDRESS_BOUNDARY 0x00000002
-#define _HW_ALIGNMENT_SUPPORT
-
-/*
- * (16-bit only) internal integers must be 32-bits, so
- * 64-bit integers cannot be supported
- */
-#define ACPI_NO_INTEGER64_SUPPORT
-
-
-#else
-/*
- * 32-bit type definitions (default)
- */
-//typedef unsigned char UINT8;
-//typedef unsigned char BOOLEAN;
-//typedef unsigned char UCHAR;
-//typedef unsigned short UINT16;
-//typedef int INT32;
-//typedef unsigned int UINT32;
-//typedef COMPILER_DEPENDENT_UINT64 UINT64;
-
-typedef UINT32 NATIVE_UINT;
-typedef INT32 NATIVE_INT;
-
-typedef NATIVE_UINT ACPI_TBLPTR;
-typedef UINT32 ACPI_IO_ADDRESS;
-typedef UINT64 ACPI_PHYSICAL_ADDRESS;
-
-#define ALIGNED_ADDRESS_BOUNDARY 0x00000004
-#define _HW_ALIGNMENT_SUPPORT
-#endif
-
-
-
-/*
- * Miscellaneous common types
- */
-
-typedef UINT32 UINT32_BIT;
-typedef NATIVE_UINT ACPI_PTRDIFF;
-typedef char NATIVE_CHAR;
-
-
-/*
- * Data type ranges
- */
-
-#define ACPI_UINT8_MAX (UINT8) 0xFF
-#define ACPI_UINT16_MAX (UINT16) 0xFFFF
-#define ACPI_UINT32_MAX (UINT32) 0xFFFFFFFF
-#ifdef __GNUC__
-#define ACPI_UINT64_MAX (UINT64) 0xFFFFFFFFFFFFFFFFULL
-#else
-#define ACPI_UINT64_MAX (UINT64) 0xFFFFFFFFFFFFFFFF
-#endif
-
-#ifdef DEFINE_ALTERNATE_TYPES
-/*
- * Types used only in translated source
- */
-typedef INT32 s32;
-typedef UINT8 u8;
-typedef UINT16 u16;
-typedef UINT32 u32;
-typedef UINT64 u64;
-#endif
-/*! [End] no source code translation !*/
-
-
-/*
- * Useful defines
- */
-
-#ifdef FALSE
-#undef FALSE
-#endif
-#define FALSE (1 == 0)
-
-#ifdef TRUE
-#undef TRUE
-#endif
-#define TRUE (1 == 1)
-
-#ifndef NULL
-#define NULL (void *) 0
-#endif
-
-
-/*
- * Local datatypes
- */
-#ifdef _MSC_VER
-typedef ULONGLONG u64;
-typedef ULONG u32;
-typedef USHORT u16;
-typedef UCHAR u8;
-typedef LONGLONG s64;
-typedef LONG s32;
-typedef SHORT s16;
-typedef CHAR s8;
-#endif
-
-typedef u32 ACPI_STATUS; /* All ACPI Exceptions */
-typedef u32 ACPI_NAME; /* 4-s8 ACPI name */
-typedef char* ACPI_STRING; /* Null terminated ASCII string */
-typedef void* ACPI_HANDLE; /* Actually a ptr to an Node */
-
-
-/*
- * Acpi integer width. In ACPI version 1, integers are
- * 32 bits. In ACPI version 2, integers are 64 bits.
- * Note that this pertains to the ACPI integer type only, not
- * other integers used in the implementation of the ACPI CA
- * subsystem.
- */
-#ifdef ACPI_NO_INTEGER64_SUPPORT
-
-/* 32-bit integers only, no 64-bit support */
-
-typedef u32 ACPI_INTEGER;
-#define ACPI_INTEGER_MAX ACPI_UINT32_MAX
-#define ACPI_INTEGER_BIT_SIZE 32
-#define ACPI_MAX_BCD_VALUE 99999999
-#define ACPI_MAX_BCD_DIGITS 8
-
-#else
-
-/* 64-bit integers */
-
-typedef UINT64 ACPI_INTEGER;
-#define ACPI_INTEGER_MAX ACPI_UINT64_MAX
-#define ACPI_INTEGER_BIT_SIZE 64
-#ifdef __GNUC__
-#define ACPI_MAX_BCD_VALUE 9999999999999999ULL
-#else
-#define ACPI_MAX_BCD_VALUE 9999999999999999
-#endif
-#define ACPI_MAX_BCD_DIGITS 16
-
-#endif
-
-
-/*
- * Constants with special meanings
- */
-
-#define ACPI_ROOT_OBJECT (ACPI_HANDLE)(-1)
-
-#define ACPI_FULL_INITIALIZATION 0x00
-#define ACPI_NO_ADDRESS_SPACE_INIT 0x01
-#define ACPI_NO_HARDWARE_INIT 0x02
-#define ACPI_NO_EVENT_INIT 0x04
-#define ACPI_NO_ACPI_ENABLE 0x08
-#define ACPI_NO_DEVICE_INIT 0x10
-#define ACPI_NO_OBJECT_INIT 0x20
-
-
-/*
- * System states
- */
-#define ACPI_STATE_S0 (u8) 0
-#define ACPI_STATE_S1 (u8) 1
-#define ACPI_STATE_S2 (u8) 2
-#define ACPI_STATE_S3 (u8) 3
-#define ACPI_STATE_S4 (u8) 4
-#define ACPI_STATE_S5 (u8) 5
-/* let's pretend S4_bIOS didn't exist for now. ASG */
-#define ACPI_STATE_S4_bIOS (u8) 6
-#define ACPI_S_STATES_MAX ACPI_STATE_S5
-#define ACPI_S_STATE_COUNT 6
-
-/*
- * Device power states
- */
-#define ACPI_STATE_D0 (u8) 0
-#define ACPI_STATE_D1 (u8) 1
-#define ACPI_STATE_D2 (u8) 2
-#define ACPI_STATE_D3 (u8) 3
-#define ACPI_D_STATES_MAX ACPI_STATE_D3
-#define ACPI_D_STATE_COUNT 4
-
-#define ACPI_STATE_UNKNOWN (u8) 0xFF
-
-
-/*
- * Table types. These values are passed to the table related APIs
- */
-
-typedef u32 ACPI_TABLE_TYPE;
-
-#define ACPI_TABLE_RSDP (ACPI_TABLE_TYPE) 0
-#define ACPI_TABLE_DSDT (ACPI_TABLE_TYPE) 1
-#define ACPI_TABLE_FADT (ACPI_TABLE_TYPE) 2
-#define ACPI_TABLE_FACS (ACPI_TABLE_TYPE) 3
-#define ACPI_TABLE_PSDT (ACPI_TABLE_TYPE) 4
-#define ACPI_TABLE_SSDT (ACPI_TABLE_TYPE) 5
-#define ACPI_TABLE_XSDT (ACPI_TABLE_TYPE) 6
-#define ACPI_TABLE_MAX 6
-#define NUM_ACPI_TABLES (ACPI_TABLE_MAX+1)
-
-
-/*
- * Types associated with names. The first group of
- * values correspond to the definition of the ACPI
- * Object_type operator (See the ACPI Spec). Therefore,
- * only add to the first group if the spec changes!
- *
- * Types must be kept in sync with the Acpi_ns_properties
- * and Acpi_ns_type_names arrays
- */
-
-typedef u32 ACPI_OBJECT_TYPE;
-typedef u8 OBJECT_TYPE_INTERNAL;
-
-#define ACPI_BTYPE_ANY 0x00000000
-#define ACPI_BTYPE_INTEGER 0x00000001
-#define ACPI_BTYPE_STRING 0x00000002
-#define ACPI_BTYPE_BUFFER 0x00000004
-#define ACPI_BTYPE_PACKAGE 0x00000008
-#define ACPI_BTYPE_FIELD_UNIT 0x00000010
-#define ACPI_BTYPE_DEVICE 0x00000020
-#define ACPI_BTYPE_EVENT 0x00000040
-#define ACPI_BTYPE_METHOD 0x00000080
-#define ACPI_BTYPE_MUTEX 0x00000100
-#define ACPI_BTYPE_REGION 0x00000200
-#define ACPI_BTYPE_POWER 0x00000400
-#define ACPI_BTYPE_PROCESSOR 0x00000800
-#define ACPI_BTYPE_THERMAL 0x00001000
-#define ACPI_BTYPE_BUFFER_FIELD 0x00002000
-#define ACPI_BTYPE_DDB_HANDLE 0x00004000
-#define ACPI_BTYPE_DEBUG_OBJECT 0x00008000
-#define ACPI_BTYPE_REFERENCE 0x00010000
-#define ACPI_BTYPE_RESOURCE 0x00020000
-
-#define ACPI_BTYPE_COMPUTE_DATA (ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING | ACPI_BTYPE_BUFFER)
-
-#define ACPI_BTYPE_DATA (ACPI_BTYPE_COMPUTE_DATA | ACPI_BTYPE_PACKAGE)
-#define ACPI_BTYPE_DATA_REFERENCE (ACPI_BTYPE_DATA | ACPI_BTYPE_REFERENCE | ACPI_BTYPE_DDB_HANDLE)
-#define ACPI_BTYPE_DEVICE_OBJECTS (ACPI_BTYPE_DEVICE | ACPI_BTYPE_THERMAL | ACPI_BTYPE_PROCESSOR)
-#define ACPI_BTYPE_OBJECTS_AND_REFS 0x00017FFF /* ARG or LOCAL */
-#define ACPI_BTYPE_ALL_OBJECTS 0x00007FFF
-
-
-#define ACPI_TYPE_ANY 0 /* 0x00 */
-#define ACPI_TYPE_INTEGER 1 /* 0x01 Byte/Word/Dword/Zero/One/Ones */
-#define ACPI_TYPE_STRING 2 /* 0x02 */
-#define ACPI_TYPE_BUFFER 3 /* 0x03 */
-#define ACPI_TYPE_PACKAGE 4 /* 0x04 Byte_const, multiple Data_term/Constant/Super_name */
-#define ACPI_TYPE_FIELD_UNIT 5 /* 0x05 */
-#define ACPI_TYPE_DEVICE 6 /* 0x06 Name, multiple Node */
-#define ACPI_TYPE_EVENT 7 /* 0x07 */
-#define ACPI_TYPE_METHOD 8 /* 0x08 Name, Byte_const, multiple Code */
-#define ACPI_TYPE_MUTEX 9 /* 0x09 */
-#define ACPI_TYPE_REGION 10 /* 0x0A */
-#define ACPI_TYPE_POWER 11 /* 0x0B Name,Byte_const,Word_const,multi Node */
-#define ACPI_TYPE_PROCESSOR 12 /* 0x0C Name,Byte_const,DWord_const,Byte_const,multi Nm_o */
-#define ACPI_TYPE_THERMAL 13 /* 0x0D Name, multiple Node */
-#define ACPI_TYPE_BUFFER_FIELD 14 /* 0x0E */
-#define ACPI_TYPE_DDB_HANDLE 15 /* 0x0F */
-#define ACPI_TYPE_DEBUG_OBJECT 16 /* 0x10 */
-
-#define ACPI_TYPE_MAX 16
-
-/*
- * This section contains object types that do not relate to the ACPI Object_type operator.
- * They are used for various internal purposes only. If new predefined ACPI_TYPEs are
- * added (via the ACPI specification), these internal types must move upwards.
- * Also, values exceeding the largest official ACPI Object_type must not overlap with
- * defined AML opcodes.
- */
-#define INTERNAL_TYPE_BEGIN 17
-
-#define INTERNAL_TYPE_DEF_FIELD 17 /* 0x11 */
-#define INTERNAL_TYPE_BANK_FIELD 18 /* 0x12 */
-#define INTERNAL_TYPE_INDEX_FIELD 19 /* 0x13 */
-#define INTERNAL_TYPE_REFERENCE 20 /* 0x14 Arg#, Local#, Name, Debug; used only in descriptors */
-#define INTERNAL_TYPE_ALIAS 21 /* 0x15 */
-#define INTERNAL_TYPE_NOTIFY 22 /* 0x16 */
-#define INTERNAL_TYPE_ADDRESS_HANDLER 23 /* 0x17 */
-#define INTERNAL_TYPE_RESOURCE 24 /* 0x18 */
-
-
-#define INTERNAL_TYPE_NODE_MAX 24
-
-/* These are pseudo-types because there are never any namespace nodes with these types */
-
-#define INTERNAL_TYPE_DEF_FIELD_DEFN 25 /* 0x19 Name, Byte_const, multiple Field_element */
-#define INTERNAL_TYPE_BANK_FIELD_DEFN 26 /* 0x1A 2 Name,DWord_const,Byte_const,multi Field_element */
-#define INTERNAL_TYPE_INDEX_FIELD_DEFN 27 /* 0x1B 2 Name, Byte_const, multiple Field_element */
-#define INTERNAL_TYPE_IF 28 /* 0x1C */
-#define INTERNAL_TYPE_ELSE 29 /* 0x1D */
-#define INTERNAL_TYPE_WHILE 30 /* 0x1E */
-#define INTERNAL_TYPE_SCOPE 31 /* 0x1F Name, multiple Node */
-#define INTERNAL_TYPE_DEF_ANY 32 /* 0x20 type is Any, suppress search of enclosing scopes */
-#define INTERNAL_TYPE_EXTRA 33 /* 0x21 */
-
-#define INTERNAL_TYPE_MAX 33
-
-#define INTERNAL_TYPE_INVALID 34
-#define ACPI_TYPE_NOT_FOUND 0xFF
-
-/*
- * Acpi_event Types:
- * ------------
- * Fixed & general purpose...
- */
-
-typedef u32 ACPI_EVENT_TYPE;
-
-#define ACPI_EVENT_FIXED (ACPI_EVENT_TYPE) 0
-#define ACPI_EVENT_GPE (ACPI_EVENT_TYPE) 1
-
-/*
- * Fixed events
- */
-
-#define ACPI_EVENT_PMTIMER (ACPI_EVENT_TYPE) 0
- /*
- * There's no bus master event so index 1 is used for IRQ's that are not
- * handled by the SCI handler
- */
-#define ACPI_EVENT_NOT_USED (ACPI_EVENT_TYPE) 1
-#define ACPI_EVENT_GLOBAL (ACPI_EVENT_TYPE) 2
-#define ACPI_EVENT_POWER_BUTTON (ACPI_EVENT_TYPE) 3
-#define ACPI_EVENT_SLEEP_BUTTON (ACPI_EVENT_TYPE) 4
-#define ACPI_EVENT_RTC (ACPI_EVENT_TYPE) 5
-#define ACPI_EVENT_GENERAL (ACPI_EVENT_TYPE) 6
-#define ACPI_EVENT_MAX 6
-#define NUM_FIXED_EVENTS (ACPI_EVENT_TYPE) 7
-
-#define ACPI_GPE_INVALID 0xFF
-#define ACPI_GPE_MAX 0xFF
-#define NUM_GPE 256
-
-#define ACPI_EVENT_LEVEL_TRIGGERED (ACPI_EVENT_TYPE) 1
-#define ACPI_EVENT_EDGE_TRIGGERED (ACPI_EVENT_TYPE) 2
-
-/*
- * Acpi_event Status:
- * -------------
- * The encoding of ACPI_EVENT_STATUS is illustrated below.
- * Note that a set bit (1) indicates the property is TRUE
- * (e.g. if bit 0 is set then the event is enabled).
- * +---------------+-+-+
- * | Bits 31:2 |1|0|
- * +---------------+-+-+
- * | | |
- * | | +- Enabled?
- * | +--- Set?
- * +-----------
- */
-typedef u32 ACPI_EVENT_STATUS;
-
-#define ACPI_EVENT_FLAG_DISABLED (ACPI_EVENT_STATUS) 0x00
-#define ACPI_EVENT_FLAG_ENABLED (ACPI_EVENT_STATUS) 0x01
-#define ACPI_EVENT_FLAG_SET (ACPI_EVENT_STATUS) 0x02
-
-
-/* Notify types */
-
-#define ACPI_SYSTEM_NOTIFY 0
-#define ACPI_DEVICE_NOTIFY 1
-#define ACPI_MAX_NOTIFY_HANDLER_TYPE 1
-
-#define MAX_SYS_NOTIFY 0x7f
-
-
-/* Address Space (Operation Region) Types */
-
-typedef u8 ACPI_ADDRESS_SPACE_TYPE;
-
-#define ADDRESS_SPACE_SYSTEM_MEMORY (ACPI_ADDRESS_SPACE_TYPE) 0
-#define ADDRESS_SPACE_SYSTEM_IO (ACPI_ADDRESS_SPACE_TYPE) 1
-#define ADDRESS_SPACE_PCI_CONFIG (ACPI_ADDRESS_SPACE_TYPE) 2
-#define ADDRESS_SPACE_EC (ACPI_ADDRESS_SPACE_TYPE) 3
-#define ADDRESS_SPACE_SMBUS (ACPI_ADDRESS_SPACE_TYPE) 4
-#define ADDRESS_SPACE_CMOS (ACPI_ADDRESS_SPACE_TYPE) 5
-#define ADDRESS_SPACE_PCI_BAR_TARGET (ACPI_ADDRESS_SPACE_TYPE) 6
-
-
-/*
- * External ACPI object definition
- */
-
-typedef union acpi_obj
-{
- ACPI_OBJECT_TYPE type; /* See definition of Acpi_ns_type for values */
- struct
- {
- ACPI_OBJECT_TYPE type;
- ACPI_INTEGER value; /* The actual number */
- } integer;
-
- struct
- {
- ACPI_OBJECT_TYPE type;
- u32 length; /* # of bytes in string, excluding trailing null */
- NATIVE_CHAR *pointer; /* points to the string value */
- } string;
-
- struct
- {
- ACPI_OBJECT_TYPE type;
- u32 length; /* # of bytes in buffer */
- u8 *pointer; /* points to the buffer */
- } buffer;
-
- struct
- {
- ACPI_OBJECT_TYPE type;
- u32 fill1;
- ACPI_HANDLE handle; /* object reference */
- } reference;
-
- struct
- {
- ACPI_OBJECT_TYPE type;
- u32 count; /* # of elements in package */
- union acpi_obj *elements; /* Pointer to an array of ACPI_OBJECTs */
- } package;
-
- struct
- {
- ACPI_OBJECT_TYPE type;
- u32 proc_id;
- ACPI_IO_ADDRESS pblk_address;
- u32 pblk_length;
- } processor;
-
- struct
- {
- ACPI_OBJECT_TYPE type;
- u32 system_level;
- u32 resource_order;
- } power_resource;
-
-} ACPI_OBJECT, *PACPI_OBJECT;
-
-
-/*
- * List of objects, used as a parameter list for control method evaluation
- */
-
-typedef struct acpi_obj_list
-{
- u32 count;
- ACPI_OBJECT *pointer;
-
-} ACPI_OBJECT_LIST, *PACPI_OBJECT_LIST;
-
-
-/*
- * Miscellaneous common Data Structures used by the interfaces
- */
-
-typedef struct
-{
- u32 length; /* Length in bytes of the buffer */
- void *pointer; /* pointer to buffer */
-
-} ACPI_BUFFER;
-
-
-/*
- * Name_type for Acpi_get_name
- */
-
-#define ACPI_FULL_PATHNAME 0
-#define ACPI_SINGLE_NAME 1
-#define ACPI_NAME_TYPE_MAX 1
-
-
-/*
- * Structure and flags for Acpi_get_system_info
- */
-
-#define SYS_MODE_UNKNOWN 0x0000
-#define SYS_MODE_ACPI 0x0001
-#define SYS_MODE_LEGACY 0x0002
-#define SYS_MODES_MASK 0x0003
-
-/*
- * ACPI CPU Cx state handler
- */
-typedef
-ACPI_STATUS (*ACPI_SET_C_STATE_HANDLER) (
- NATIVE_UINT pblk_address);
-
-/*
- * ACPI Cx State info
- */
-typedef struct
-{
- u32 state_number;
- u32 latency;
-} ACPI_CX_STATE;
-
-/*
- * ACPI CPU throttling info
- */
-typedef struct
-{
- u32 state_number;
- u32 percent_of_clock;
-} ACPI_CPU_THROTTLING_STATE;
-
-/*
- * ACPI Table Info. One per ACPI table _type_
- */
-typedef struct acpi_table_info
-{
- u32 count;
-
-} ACPI_TABLE_INFO;
-
-
-/*
- * System info returned by Acpi_get_system_info()
- */
-
-typedef struct _acpi_sys_info
-{
- u32 acpi_ca_version;
- u32 flags;
- u32 timer_resolution;
- u32 reserved1;
- u32 reserved2;
- u32 debug_level;
- u32 debug_layer;
- u32 num_table_types;
- ACPI_TABLE_INFO table_info [NUM_ACPI_TABLES];
-
-} ACPI_SYSTEM_INFO;
-
-
-/*
- * System Initiailization data. This data is passed to ACPIInitialize
- * copyied to global data and retained by ACPI CA
- */
-
-typedef struct _acpi_init_data
-{
- void *RSDP_physical_address; /* Address of RSDP, needed it it is */
- /* not found in the IA32 manner */
-} ACPI_INIT_DATA;
-
-/*
- * Various handlers and callback procedures
- */
-
-typedef
-u32 (*FIXED_EVENT_HANDLER) (
- void *context);
-
-typedef
-void (*GPE_HANDLER) (
- void *context);
-
-typedef
-void (*NOTIFY_HANDLER) (
- ACPI_HANDLE device,
- u32 value,
- void *context);
-
-#define ADDRESS_SPACE_READ 1
-#define ADDRESS_SPACE_WRITE 2
-
-typedef
-ACPI_STATUS (*ADDRESS_SPACE_HANDLER) (
- u32 function,
- ACPI_PHYSICAL_ADDRESS address,
- u32 bit_width,
- u32 *value,
- void *handler_context,
- void *region_context);
-
-#define ACPI_DEFAULT_HANDLER ((ADDRESS_SPACE_HANDLER) NULL)
-
-
-typedef
-ACPI_STATUS (*ADDRESS_SPACE_SETUP) (
- ACPI_HANDLE region_handle,
- u32 function,
- void *handler_context,
- void **region_context);
-
-#define ACPI_REGION_ACTIVATE 0
-#define ACPI_REGION_DEACTIVATE 1
-
-typedef
-ACPI_STATUS (*WALK_CALLBACK) (
- ACPI_HANDLE obj_handle,
- u32 nesting_level,
- void *context,
- void **return_value);
-
-
-/* Interrupt handler return values */
-
-#define INTERRUPT_NOT_HANDLED 0x00
-#define INTERRUPT_HANDLED 0x01
-
-
-/* Structure and flags for Acpi_get_device_info */
-
-#define ACPI_VALID_HID 0x1
-#define ACPI_VALID_UID 0x2
-#define ACPI_VALID_ADR 0x4
-#define ACPI_VALID_STA 0x8
-
-
-#define ACPI_COMMON_OBJ_INFO \
- ACPI_OBJECT_TYPE type; /* ACPI object type */ \
- ACPI_NAME name /* ACPI object Name */
-
-
-typedef struct
-{
- ACPI_COMMON_OBJ_INFO;
-} ACPI_OBJ_INFO_HEADER;
-
-
-typedef struct
-{
- ACPI_COMMON_OBJ_INFO;
-
- u32 valid; /* Are the next bits legit? */
- NATIVE_CHAR hardware_id [9]; /* _HID value if any */
- NATIVE_CHAR unique_id[9]; /* _UID value if any */
- ACPI_INTEGER address; /* _ADR value if any */
- u32 current_status; /* _STA value */
-} ACPI_DEVICE_INFO;
-
-
-/* Context structs for address space handlers */
-
-typedef struct
-{
- u32 seg;
- u32 bus;
- u32 dev_func;
-} PCI_HANDLER_CONTEXT;
-
-
-typedef struct
-{
- ACPI_PHYSICAL_ADDRESS mapped_physical_address;
- u8 *mapped_logical_address;
- u32 mapped_length;
-} MEM_HANDLER_CONTEXT;
-
-
-/*
- * C-state handler
- */
-
-typedef ACPI_STATUS (*ACPI_C_STATE_HANDLER) (ACPI_IO_ADDRESS, u32*);
-
-
-/*
- * Definitions for Resource Attributes
- */
-
-/*
- * Memory Attributes
- */
-#define READ_ONLY_MEMORY (u8) 0x00
-#define READ_WRITE_MEMORY (u8) 0x01
-
-#define NON_CACHEABLE_MEMORY (u8) 0x00
-#define CACHABLE_MEMORY (u8) 0x01
-#define WRITE_COMBINING_MEMORY (u8) 0x02
-#define PREFETCHABLE_MEMORY (u8) 0x03
-
-/*
- * IO Attributes
- * The ISA IO ranges are: n000-n0FFh, n400-n4_fFh, n800-n8_fFh, n_c00-n_cFFh.
- * The non-ISA IO ranges are: n100-n3_fFh, n500-n7_fFh, n900-n_bFFh, n_cD0-n_fFFh.
- */
-#define NON_ISA_ONLY_RANGES (u8) 0x01
-#define ISA_ONLY_RANGES (u8) 0x02
-#define ENTIRE_RANGE (NON_ISA_ONLY_RANGES | ISA_ONLY_RANGES)
-
-/*
- * IO Port Descriptor Decode
- */
-#define DECODE_10 (u8) 0x00 /* 10-bit IO address decode */
-#define DECODE_16 (u8) 0x01 /* 16-bit IO address decode */
-
-/*
- * IRQ Attributes
- */
-#define EDGE_SENSITIVE (u8) 0x00
-#define LEVEL_SENSITIVE (u8) 0x01
-
-#define ACTIVE_HIGH (u8) 0x00
-#define ACTIVE_LOW (u8) 0x01
-
-#define EXCLUSIVE (u8) 0x00
-#define SHARED (u8) 0x01
-
-/*
- * DMA Attributes
- */
-#define COMPATIBILITY (u8) 0x00
-#define TYPE_A (u8) 0x01
-#define TYPE_B (u8) 0x02
-#define TYPE_F (u8) 0x03
-
-#define NOT_BUS_MASTER (u8) 0x00
-#define BUS_MASTER (u8) 0x01
-
-#define TRANSFER_8 (u8) 0x00
-#define TRANSFER_8_16 (u8) 0x01
-#define TRANSFER_16 (u8) 0x02
-
-/*
- * Start Dependent Functions Priority definitions
- */
-#define GOOD_CONFIGURATION (u8) 0x00
-#define ACCEPTABLE_CONFIGURATION (u8) 0x01
-#define SUB_OPTIMAL_CONFIGURATION (u8) 0x02
-
-/*
- * 16, 32 and 64-bit Address Descriptor resource types
- */
-#define MEMORY_RANGE (u8) 0x00
-#define IO_RANGE (u8) 0x01
-#define BUS_NUMBER_RANGE (u8) 0x02
-
-#define ADDRESS_NOT_FIXED (u8) 0x00
-#define ADDRESS_FIXED (u8) 0x01
-
-#define POS_DECODE (u8) 0x00
-#define SUB_DECODE (u8) 0x01
-
-#define PRODUCER (u8) 0x00
-#define CONSUMER (u8) 0x01
-
-
-/*
- * Structures used to describe device resources
- */
-typedef struct
-{
- u32 edge_level;
- u32 active_high_low;
- u32 shared_exclusive;
- u32 number_of_interrupts;
- u32 interrupts[1];
-
-} IRQ_RESOURCE;
-
-typedef struct
-{
- u32 type;
- u32 bus_master;
- u32 transfer;
- u32 number_of_channels;
- u32 channels[1];
-
-} DMA_RESOURCE;
-
-typedef struct
-{
- u32 compatibility_priority;
- u32 performance_robustness;
-
-} START_DEPENDENT_FUNCTIONS_RESOURCE;
-
-/*
- * END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
- * needed because it has no fields
- */
-
-typedef struct
-{
- u32 io_decode;
- u32 min_base_address;
- u32 max_base_address;
- u32 alignment;
- u32 range_length;
-
-} IO_RESOURCE;
-
-typedef struct
-{
- u32 base_address;
- u32 range_length;
-
-} FIXED_IO_RESOURCE;
-
-typedef struct
-{
- u32 length;
- u8 reserved[1];
-
-} VENDOR_RESOURCE;
-
-typedef struct
-{
- u32 read_write_attribute;
- u32 min_base_address;
- u32 max_base_address;
- u32 alignment;
- u32 range_length;
-
-} MEMORY24_RESOURCE;
-
-typedef struct
-{
- u32 read_write_attribute;
- u32 min_base_address;
- u32 max_base_address;
- u32 alignment;
- u32 range_length;
-
-} MEMORY32_RESOURCE;
-
-typedef struct
-{
- u32 read_write_attribute;
- u32 range_base_address;
- u32 range_length;
-
-} FIXED_MEMORY32_RESOURCE;
-
-typedef struct
-{
- u16 cache_attribute;
- u16 read_write_attribute;
-
-} MEMORY_ATTRIBUTE;
-
-typedef struct
-{
- u16 range_attribute;
- u16 reserved;
-
-} IO_ATTRIBUTE;
-
-typedef struct
-{
- u16 reserved1;
- u16 reserved2;
-
-} BUS_ATTRIBUTE;
-
-typedef union
-{
- MEMORY_ATTRIBUTE memory;
- IO_ATTRIBUTE io;
- BUS_ATTRIBUTE bus;
-
-} ATTRIBUTE_DATA;
-
-typedef struct
-{
- u32 resource_type;
- u32 producer_consumer;
- u32 decode;
- u32 min_address_fixed;
- u32 max_address_fixed;
- ATTRIBUTE_DATA attribute;
- u32 granularity;
- u32 min_address_range;
- u32 max_address_range;
- u32 address_translation_offset;
- u32 address_length;
- u32 resource_source_index;
- u32 resource_source_string_length;
- NATIVE_CHAR resource_source[1];
-
-} ADDRESS16_RESOURCE;
-
-typedef struct
-{
- u32 resource_type;
- u32 producer_consumer;
- u32 decode;
- u32 min_address_fixed;
- u32 max_address_fixed;
- ATTRIBUTE_DATA attribute;
- u32 granularity;
- u32 min_address_range;
- u32 max_address_range;
- u32 address_translation_offset;
- u32 address_length;
- u32 resource_source_index;
- u32 resource_source_string_length;
- NATIVE_CHAR resource_source[1];
-
-} ADDRESS32_RESOURCE;
-
-typedef struct
-{
- u32 producer_consumer;
- u32 edge_level;
- u32 active_high_low;
- u32 shared_exclusive;
- u32 number_of_interrupts;
- u32 interrupts[1];
- u32 resource_source_index;
- u32 resource_source_string_length;
- NATIVE_CHAR resource_source[1];
-
-} EXTENDED_IRQ_RESOURCE;
-
-typedef enum
-{
- irq,
- dma,
- start_dependent_functions,
- end_dependent_functions,
- io,
- fixed_io,
- vendor_specific,
- end_tag,
- memory24,
- memory32,
- fixed_memory32,
- address16,
- address32,
- extended_irq
-} RESOURCE_TYPE;
-
-typedef union
-{
- IRQ_RESOURCE irq;
- DMA_RESOURCE dma;
- START_DEPENDENT_FUNCTIONS_RESOURCE start_dependent_functions;
- IO_RESOURCE io;
- FIXED_IO_RESOURCE fixed_io;
- VENDOR_RESOURCE vendor_specific;
- MEMORY24_RESOURCE memory24;
- MEMORY32_RESOURCE memory32;
- FIXED_MEMORY32_RESOURCE fixed_memory32;
- ADDRESS16_RESOURCE address16;
- ADDRESS32_RESOURCE address32;
- EXTENDED_IRQ_RESOURCE extended_irq;
-} RESOURCE_DATA;
-
-typedef struct _resource_tag
-{
- RESOURCE_TYPE id;
- u32 length;
- RESOURCE_DATA data;
-} RESOURCE;
-
-#define RESOURCE_LENGTH 12
-#define RESOURCE_LENGTH_NO_DATA 8
-
-#define NEXT_RESOURCE(res) (RESOURCE*)((u8*) res + res->length)
-
-/*
- * END: Definitions for Resource Attributes
- */
-
-
-typedef struct pci_routing_table
-{
- u32 length;
- u32 pin;
- ACPI_INTEGER address; /* here for 64-bit alignment */
- u32 source_index;
- NATIVE_CHAR source[4]; /* pad to 64 bits so sizeof() works in all cases */
-
-} PCI_ROUTING_TABLE;
-
-
-/*
- * END: Definitions for PCI Routing tables
- */
-
-#endif /* __ACTYPES_H__ */
diff --git a/reactos/drivers/bus/acpi/include/amlcode.h b/reactos/drivers/bus/acpi/include/amlcode.h
deleted file mode 100644
index 917722d897d..00000000000
--- a/reactos/drivers/bus/acpi/include/amlcode.h
+++ /dev/null
@@ -1,420 +0,0 @@
-/******************************************************************************
- *
- * Name: amlcode.h - Definitions for AML, as included in "definition blocks"
- * Declarations and definitions contained herein are derived
- * directly from the ACPI specification.
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __AMLCODE_H__
-#define __AMLCODE_H__
-
-
-/* primary opcodes */
-
-#define AML_NULL_CHAR (u16) 0x00
-
-#define AML_ZERO_OP (u16) 0x00
-#define AML_ONE_OP (u16) 0x01
-#define AML_UNASSIGNED (u16) 0x02
-#define AML_ALIAS_OP (u16) 0x06
-#define AML_NAME_OP (u16) 0x08
-#define AML_BYTE_OP (u16) 0x0a
-#define AML_WORD_OP (u16) 0x0b
-#define AML_DWORD_OP (u16) 0x0c
-#define AML_STRING_OP (u16) 0x0d
-#define AML_QWORD_OP (u16) 0x0e /* ACPI 2.0 */
-#define AML_SCOPE_OP (u16) 0x10
-#define AML_BUFFER_OP (u16) 0x11
-#define AML_PACKAGE_OP (u16) 0x12
-#define AML_VAR_PACKAGE_OP (u16) 0x13 /* ACPI 2.0 */
-#define AML_METHOD_OP (u16) 0x14
-#define AML_DUAL_NAME_PREFIX (u16) 0x2e
-#define AML_MULTI_NAME_PREFIX_OP (u16) 0x2f
-#define AML_NAME_CHAR_SUBSEQ (u16) 0x30
-#define AML_NAME_CHAR_FIRST (u16) 0x41
-#define AML_OP_PREFIX (u16) 0x5b
-#define AML_ROOT_PREFIX (u16) 0x5c
-#define AML_PARENT_PREFIX (u16) 0x5e
-#define AML_LOCAL_OP (u16) 0x60
-#define AML_LOCAL0 (u16) 0x60
-#define AML_LOCAL1 (u16) 0x61
-#define AML_LOCAL2 (u16) 0x62
-#define AML_LOCAL3 (u16) 0x63
-#define AML_LOCAL4 (u16) 0x64
-#define AML_LOCAL5 (u16) 0x65
-#define AML_LOCAL6 (u16) 0x66
-#define AML_LOCAL7 (u16) 0x67
-#define AML_ARG_OP (u16) 0x68
-#define AML_ARG0 (u16) 0x68
-#define AML_ARG1 (u16) 0x69
-#define AML_ARG2 (u16) 0x6a
-#define AML_ARG3 (u16) 0x6b
-#define AML_ARG4 (u16) 0x6c
-#define AML_ARG5 (u16) 0x6d
-#define AML_ARG6 (u16) 0x6e
-#define AML_STORE_OP (u16) 0x70
-#define AML_REF_OF_OP (u16) 0x71
-#define AML_ADD_OP (u16) 0x72
-#define AML_CONCAT_OP (u16) 0x73
-#define AML_SUBTRACT_OP (u16) 0x74
-#define AML_INCREMENT_OP (u16) 0x75
-#define AML_DECREMENT_OP (u16) 0x76
-#define AML_MULTIPLY_OP (u16) 0x77
-#define AML_DIVIDE_OP (u16) 0x78
-#define AML_SHIFT_LEFT_OP (u16) 0x79
-#define AML_SHIFT_RIGHT_OP (u16) 0x7a
-#define AML_BIT_AND_OP (u16) 0x7b
-#define AML_BIT_NAND_OP (u16) 0x7c
-#define AML_BIT_OR_OP (u16) 0x7d
-#define AML_BIT_NOR_OP (u16) 0x7e
-#define AML_BIT_XOR_OP (u16) 0x7f
-#define AML_BIT_NOT_OP (u16) 0x80
-#define AML_FIND_SET_LEFT_BIT_OP (u16) 0x81
-#define AML_FIND_SET_RIGHT_BIT_OP (u16) 0x82
-#define AML_DEREF_OF_OP (u16) 0x83
-#define AML_CONCAT_RES_OP (u16) 0x84 /* ACPI 2.0 */
-#define AML_MOD_OP (u16) 0x85 /* ACPI 2.0 */
-#define AML_NOTIFY_OP (u16) 0x86
-#define AML_SIZE_OF_OP (u16) 0x87
-#define AML_INDEX_OP (u16) 0x88
-#define AML_MATCH_OP (u16) 0x89
-#define AML_DWORD_FIELD_OP (u16) 0x8a
-#define AML_WORD_FIELD_OP (u16) 0x8b
-#define AML_BYTE_FIELD_OP (u16) 0x8c
-#define AML_BIT_FIELD_OP (u16) 0x8d
-#define AML_TYPE_OP (u16) 0x8e
-#define AML_QWORD_FIELD_OP (u16) 0x8f /* ACPI 2.0 */
-#define AML_LAND_OP (u16) 0x90
-#define AML_LOR_OP (u16) 0x91
-#define AML_LNOT_OP (u16) 0x92
-#define AML_LEQUAL_OP (u16) 0x93
-#define AML_LGREATER_OP (u16) 0x94
-#define AML_LLESS_OP (u16) 0x95
-#define AML_TO_BUFFER_OP (u16) 0x96 /* ACPI 2.0 */
-#define AML_TO_DECSTRING_OP (u16) 0x97 /* ACPI 2.0 */
-#define AML_TO_HEXSTRING_OP (u16) 0x98 /* ACPI 2.0 */
-#define AML_TO_INTEGER_OP (u16) 0x99 /* ACPI 2.0 */
-#define AML_TO_STRING_OP (u16) 0x9c /* ACPI 2.0 */
-#define AML_COPY_OP (u16) 0x9d /* ACPI 2.0 */
-#define AML_MID_OP (u16) 0x9e /* ACPI 2.0 */
-#define AML_CONTINUE_OP (u16) 0x9f /* ACPI 2.0 */
-#define AML_IF_OP (u16) 0xa0
-#define AML_ELSE_OP (u16) 0xa1
-#define AML_WHILE_OP (u16) 0xa2
-#define AML_NOOP_OP (u16) 0xa3
-#define AML_RETURN_OP (u16) 0xa4
-#define AML_BREAK_OP (u16) 0xa5
-#define AML_BREAK_POINT_OP (u16) 0xcc
-#define AML_ONES_OP (u16) 0xff
-
-/* prefixed opcodes */
-
-#define AML_EXTOP (u16) 0x005b
-
-
-#define AML_MUTEX_OP (u16) 0x5b01
-#define AML_EVENT_OP (u16) 0x5b02
-#define AML_SHIFT_RIGHT_BIT_OP (u16) 0x5b10
-#define AML_SHIFT_LEFT_BIT_OP (u16) 0x5b11
-#define AML_COND_REF_OF_OP (u16) 0x5b12
-#define AML_CREATE_FIELD_OP (u16) 0x5b13
-#define AML_LOAD_TABLE_OP (u16) 0x5b1f /* ACPI 2.0 */
-#define AML_LOAD_OP (u16) 0x5b20
-#define AML_STALL_OP (u16) 0x5b21
-#define AML_SLEEP_OP (u16) 0x5b22
-#define AML_ACQUIRE_OP (u16) 0x5b23
-#define AML_SIGNAL_OP (u16) 0x5b24
-#define AML_WAIT_OP (u16) 0x5b25
-#define AML_RESET_OP (u16) 0x5b26
-#define AML_RELEASE_OP (u16) 0x5b27
-#define AML_FROM_BCD_OP (u16) 0x5b28
-#define AML_TO_BCD_OP (u16) 0x5b29
-#define AML_UNLOAD_OP (u16) 0x5b2a
-#define AML_REVISION_OP (u16) 0x5b30
-#define AML_DEBUG_OP (u16) 0x5b31
-#define AML_FATAL_OP (u16) 0x5b32
-#define AML_REGION_OP (u16) 0x5b80
-#define AML_DEF_FIELD_OP (u16) 0x5b81
-#define AML_DEVICE_OP (u16) 0x5b82
-#define AML_PROCESSOR_OP (u16) 0x5b83
-#define AML_POWER_RES_OP (u16) 0x5b84
-#define AML_THERMAL_ZONE_OP (u16) 0x5b85
-#define AML_INDEX_FIELD_OP (u16) 0x5b86
-#define AML_BANK_FIELD_OP (u16) 0x5b87
-#define AML_DATA_REGION_OP (u16) 0x5b88 /* ACPI 2.0 */
-
-
-/* Bogus opcodes (they are actually two separate opcodes) */
-
-#define AML_LGREATEREQUAL_OP (u16) 0x9295
-#define AML_LLESSEQUAL_OP (u16) 0x9294
-#define AML_LNOTEQUAL_OP (u16) 0x9293
-
-
-/*
- * Internal opcodes
- * Use only "Unknown" AML opcodes, don't attempt to use
- * any valid ACPI ASCII values (A-Z, 0-9, '-')
- */
-
-#define AML_NAMEPATH_OP (u16) 0x002d
-#define AML_NAMEDFIELD_OP (u16) 0x0030
-#define AML_RESERVEDFIELD_OP (u16) 0x0031
-#define AML_ACCESSFIELD_OP (u16) 0x0032
-#define AML_BYTELIST_OP (u16) 0x0033
-#define AML_STATICSTRING_OP (u16) 0x0034
-#define AML_METHODCALL_OP (u16) 0x0035
-#define AML_RETURN_VALUE_OP (u16) 0x0036
-
-
-#define ARG_NONE 0x0
-
-/*
- * Argument types for the AML Parser
- * Each field in the Arg_types u32 is 5 bits, allowing for a maximum of 6 arguments.
- * There can be up to 31 unique argument types
- */
-
-#define ARGP_BYTEDATA 0x01
-#define ARGP_BYTELIST 0x02
-#define ARGP_CHARLIST 0x03
-#define ARGP_DATAOBJ 0x04
-#define ARGP_DATAOBJLIST 0x05
-#define ARGP_DWORDDATA 0x06
-#define ARGP_FIELDLIST 0x07
-#define ARGP_NAME 0x08
-#define ARGP_NAMESTRING 0x09
-#define ARGP_OBJLIST 0x0A
-#define ARGP_PKGLENGTH 0x0B
-#define ARGP_SUPERNAME 0x0C
-#define ARGP_TARGET 0x0D
-#define ARGP_TERMARG 0x0E
-#define ARGP_TERMLIST 0x0F
-#define ARGP_WORDDATA 0x10
-#define ARGP_QWORDDATA 0x11
-#define ARGP_SIMPLENAME 0x12
-
-/*
- * Resolved argument types for the AML Interpreter
- * Each field in the Arg_types u32 is 5 bits, allowing for a maximum of 6 arguments.
- * There can be up to 31 unique argument types (0 is end-of-arg-list indicator)
- */
-
-/* "Standard" ACPI types are 1-15 (0x0F) */
-
-#define ARGI_INTEGER ACPI_TYPE_INTEGER /* 1 */
-#define ARGI_STRING ACPI_TYPE_STRING /* 2 */
-#define ARGI_BUFFER ACPI_TYPE_BUFFER /* 3 */
-#define ARGI_PACKAGE ACPI_TYPE_PACKAGE /* 4 */
-#define ARGI_EVENT ACPI_TYPE_EVENT
-#define ARGI_MUTEX ACPI_TYPE_MUTEX
-#define ARGI_REGION ACPI_TYPE_REGION
-#define ARGI_DDBHANDLE ACPI_TYPE_DDB_HANDLE
-
-/* Custom types are 0x10 through 0x1F */
-
-#define ARGI_IF 0x10
-#define ARGI_ANYOBJECT 0x11
-#define ARGI_ANYTYPE 0x12
-#define ARGI_COMPUTEDATA 0x13 /* Buffer, String, or Integer */
-#define ARGI_DATAOBJECT 0x14 /* Buffer, string, package or reference to a Node - Used only by Size_of operator*/
-#define ARGI_COMPLEXOBJ 0x15 /* Buffer or package */
-#define ARGI_INTEGER_REF 0x16
-#define ARGI_OBJECT_REF 0x17
-#define ARGI_DEVICE_REF 0x18
-#define ARGI_REFERENCE 0x19
-#define ARGI_TARGETREF 0x1A /* Target, subject to implicit conversion */
-#define ARGI_FIXED_TARGET 0x1B /* Target, no implicit conversion */
-#define ARGI_SIMPLE_TARGET 0x1C /* Name, Local, Arg -- no implicit conversion */
-#define ARGI_BUFFERSTRING 0x1D
-
-#define ARGI_INVALID_OPCODE 0xFFFFFFFF
-
-
-/*
- * hash offsets
- */
-#define AML_EXTOP_HASH_OFFSET 22
-#define AML_LNOT_HASH_OFFSET 19
-
-
-/*
- * opcode groups and types
- */
-
-#define OPGRP_NAMED 0x01
-#define OPGRP_FIELD 0x02
-#define OPGRP_BYTELIST 0x04
-
-#define OPTYPE_UNDEFINED 0
-
-
-#define OPTYPE_LITERAL 1
-#define OPTYPE_CONSTANT 2
-#define OPTYPE_METHOD_ARGUMENT 3
-#define OPTYPE_LOCAL_VARIABLE 4
-#define OPTYPE_DATA_TERM 5
-
-/* Type 1 opcodes */
-
-#define OPTYPE_MONADIC1 6
-#define OPTYPE_DYADIC1 7
-
-
-/* Type 2 opcodes */
-
-#define OPTYPE_MONADIC2 8
-#define OPTYPE_MONADIC2_r 9
-#define OPTYPE_DYADIC2 10
-#define OPTYPE_DYADIC2_r 11
-#define OPTYPE_DYADIC2_s 12
-#define OPTYPE_INDEX 13
-#define OPTYPE_MATCH 14
-
-/* Generic for an op that returns a value */
-
-#define OPTYPE_METHOD_CALL 15
-
-
-/* Misc */
-
-#define OPTYPE_CREATE_FIELD 16
-#define OPTYPE_FATAL 17
-#define OPTYPE_CONTROL 18
-#define OPTYPE_RECONFIGURATION 19
-#define OPTYPE_NAMED_OBJECT 20
-#define OPTYPE_RETURN 21
-
-#define OPTYPE_BOGUS 22
-
-
-/* Predefined Operation Region Space_iDs */
-
-typedef enum
-{
- REGION_MEMORY = 0,
- REGION_IO,
- REGION_PCI_CONFIG,
- REGION_EC,
- REGION_SMBUS,
- REGION_CMOS,
- REGION_PCI_BAR
-
-} AML_REGION_TYPES;
-
-
-/* Comparison operation codes for Match_op operator */
-
-typedef enum
-{
- MATCH_MTR = 0,
- MATCH_MEQ = 1,
- MATCH_MLE = 2,
- MATCH_MLT = 3,
- MATCH_MGE = 4,
- MATCH_MGT = 5
-
-} AML_MATCH_OPERATOR;
-
-#define MAX_MATCH_OPERATOR 5
-
-
-/* Field Access Types */
-
-#define ACCESS_TYPE_MASK 0x0f
-#define ACCESS_TYPE_SHIFT 0
-
-typedef enum
-{
- ACCESS_ANY_ACC = 0,
- ACCESS_BYTE_ACC = 1,
- ACCESS_WORD_ACC = 2,
- ACCESS_DWORD_ACC = 3,
- ACCESS_BLOCK_ACC = 4,
- ACCESS_SMBSEND_RECV_ACC = 5,
- ACCESS_SMBQUICK_ACC = 6
-
-} AML_ACCESS_TYPE;
-
-
-/* Field Lock Rules */
-
-#define LOCK_RULE_MASK 0x10
-#define LOCK_RULE_SHIFT 4
-
-typedef enum
-{
- GLOCK_NEVER_LOCK = 0,
- GLOCK_ALWAYS_LOCK = 1
-
-} AML_LOCK_RULE;
-
-
-/* Field Update Rules */
-
-#define UPDATE_RULE_MASK 0x060
-#define UPDATE_RULE_SHIFT 5
-
-typedef enum
-{
- UPDATE_PRESERVE = 0,
- UPDATE_WRITE_AS_ONES = 1,
- UPDATE_WRITE_AS_ZEROS = 2
-
-} AML_UPDATE_RULE;
-
-
-/* bit fields in Method_flags byte */
-
-#define METHOD_FLAGS_ARG_COUNT 0x07
-#define METHOD_FLAGS_SERIALIZED 0x08
-#define METHOD_FLAGS_SYNCH_LEVEL 0xF0
-
-
-/* Array sizes. Used for range checking also */
-
-#define NUM_REGION_TYPES 7
-#define NUM_ACCESS_TYPES 7
-#define NUM_UPDATE_RULES 3
-#define NUM_MATCH_OPS 7
-#define NUM_OPCODES 256
-#define NUM_FIELD_NAMES 2
-
-
-#define USER_REGION_BEGIN 0x80
-
-/*
- * AML tables
- */
-
-#ifdef DEFINE_AML_GLOBALS
-
-/* External declarations of the AML tables */
-
-extern u8 acpi_gbl_aml [NUM_OPCODES];
-extern u16 acpi_gbl_pfx [NUM_OPCODES];
-
-
-#endif /* DEFINE_AML_GLOBALS */
-
-#endif /* __AMLCODE_H__ */
diff --git a/reactos/drivers/bus/acpi/include/platform/acenv.h b/reactos/drivers/bus/acpi/include/platform/acenv.h
deleted file mode 100644
index 9679222de8d..00000000000
--- a/reactos/drivers/bus/acpi/include/platform/acenv.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/******************************************************************************
- *
- * Name: acenv.h - Generation environment specific items
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACENV_H__
-#define __ACENV_H__
-
-
-/*
- * Configuration for ACPI tools and utilities
- */
-
-#ifdef _ACPI_DUMP_APP
-#define ACPI_DEBUG
-#define ACPI_APPLICATION
-#define ENABLE_DEBUGGER
-#define ACPI_USE_SYSTEM_CLIBRARY
-#define PARSER_ONLY
-#endif
-
-#ifdef _ACPI_EXEC_APP
-#undef DEBUGGER_THREADING
-#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
-#define ACPI_DEBUG
-#define ACPI_APPLICATION
-#define ENABLE_DEBUGGER
-#define ACPI_USE_SYSTEM_CLIBRARY
-#endif
-
-#ifdef _ACPI_ASL_COMPILER
-#define ACPI_DEBUG
-#define ACPI_APPLICATION
-#define ENABLE_DEBUGGER
-#define ACPI_USE_SYSTEM_CLIBRARY
-#endif
-
-/*
- * Memory allocation tracking. Used only if
- * 1) This is the debug version
- * 2) This is NOT a 16-bit version of the code (not enough real-mode memory)
- */
-#ifdef ACPI_DEBUG
-#ifndef _IA16
-#define ACPI_DEBUG_TRACK_ALLOCATIONS
-#endif
-#endif
-
-/*
- * Environment configuration. The purpose of this file is to interface to the
- * local generation environment.
- *
- * 1) ACPI_USE_SYSTEM_CLIBRARY - Define this if linking to an actual C library.
- * Otherwise, local versions of string/memory functions will be used.
- * 2) ACPI_USE_STANDARD_HEADERS - Define this if linking to a C library and
- * the standard header files may be used.
- *
- * The ACPI subsystem only uses low level C library functions that do not call
- * operating system services and may therefore be inlined in the code.
- *
- * It may be necessary to tailor these include files to the target
- * generation environment.
- *
- *
- * Functions and constants used from each header:
- *
- * string.h: memcpy
- * memset
- * strcat
- * strcmp
- * strcpy
- * strlen
- * strncmp
- * strncat
- * strncpy
- *
- * stdlib.h: strtoul
- *
- * stdarg.h: va_list
- * va_arg
- * va_start
- * va_end
- *
- */
-
-/*! [Begin] no source code translation */
-
-#ifdef _LINUX
-#include "aclinux.h"
-
-#elif _AED_EFI
-#include "acefi.h"
-
-#elif WIN32
-#include "acwin.h"
-
-#elif __FreeBSD__
-#include "acfreebsd.h"
-
-#else
-
-/* All other environments */
-
-#define ACPI_USE_STANDARD_HEADERS
-
-/* Name of host operating system (returned by the _OS_ namespace object) */
-
-#define ACPI_OS_NAME "Intel ACPI/CA Core Subsystem"
-
-#endif
-
-
-/*! [End] no source code translation !*/
-
-/******************************************************************************
- *
- * C library configuration
- *
- *****************************************************************************/
-
-#ifdef ACPI_USE_SYSTEM_CLIBRARY
-/*
- * Use the standard C library headers.
- * We want to keep these to a minimum.
- *
- */
-
-#ifdef ACPI_USE_STANDARD_HEADERS
-/*
- * Use the standard headers from the standard locations
- */
-#include
-#include
-#include
-#include
-
-#endif /* ACPI_USE_STANDARD_HEADERS */
-
-/*
- * We will be linking to the standard Clib functions
- */
-
-#define STRSTR(s1,s2) strstr((s1), (s2))
-#define STRUPR(s) strupr((s))
-#define STRLEN(s) (u32) strlen((s))
-#define STRCPY(d,s) strcpy((d), (s))
-#define STRNCPY(d,s,n) strncpy((d), (s), (NATIVE_INT)(n))
-#define STRNCMP(d,s,n) strncmp((d), (s), (NATIVE_INT)(n))
-#define STRCMP(d,s) strcmp((d), (s))
-#define STRCAT(d,s) strcat((d), (s))
-#define STRNCAT(d,s,n) strncat((d), (s), (NATIVE_INT)(n))
-#define STRTOUL(d,s,n) strtoul((d), (s), (NATIVE_INT)(n))
-#define MEMCPY(d,s,n) memcpy((d), (s), (NATIVE_INT)(n))
-#define MEMSET(d,s,n) memset((d), (s), (NATIVE_INT)(n))
-#define TOUPPER toupper
-#define TOLOWER tolower
-#define IS_XDIGIT isxdigit
-
-/******************************************************************************
- *
- * Not using native C library, use local implementations
- *
- *****************************************************************************/
-#else
-
-/*
- * Use local definitions of C library macros and functions
- * NOTE: The function implementations may not be as efficient
- * as an inline or assembly code implementation provided by a
- * native C library.
- */
-
-#ifndef va_arg
-
-#ifndef _VALIST
-#define _VALIST
-typedef char *va_list;
-#endif /* _VALIST */
-
-/*
- * Storage alignment properties
- */
-
-#define _AUPBND (sizeof (NATIVE_INT) - 1)
-#define _ADNBND (sizeof (NATIVE_INT) - 1)
-
-/*
- * Variable argument list macro definitions
- */
-
-#define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd)))
-#define va_arg(ap, T) (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
-#define va_end(ap) (void) 0
-#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
-
-#endif /* va_arg */
-
-
-#define STRSTR(s1,s2) acpi_cm_strstr ((s1), (s2))
-#define STRUPR(s) acpi_cm_strupr ((s))
-#define STRLEN(s) acpi_cm_strlen ((s))
-#define STRCPY(d,s) acpi_cm_strcpy ((d), (s))
-#define STRNCPY(d,s,n) acpi_cm_strncpy ((d), (s), (n))
-#define STRNCMP(d,s,n) acpi_cm_strncmp ((d), (s), (n))
-#define STRCMP(d,s) acpi_cm_strcmp ((d), (s))
-#define STRCAT(d,s) acpi_cm_strcat ((d), (s))
-#define STRNCAT(d,s,n) acpi_cm_strncat ((d), (s), (n))
-#define STRTOUL(d,s,n) acpi_cm_strtoul ((d), (s),(n))
-#define MEMCPY(d,s,n) acpi_cm_memcpy ((d), (s), (n))
-#define MEMSET(d,v,n) acpi_cm_memset ((d), (v), (n))
-#define TOUPPER acpi_cm_to_upper
-#define TOLOWER acpi_cm_to_lower
-
-#endif /* ACPI_USE_SYSTEM_CLIBRARY */
-
-
-/******************************************************************************
- *
- * Assembly code macros
- *
- *****************************************************************************/
-
-/*
- * Handle platform- and compiler-specific assembly language differences.
- * These should already have been defined by the platform includes above.
- *
- * Notes:
- * 1) Interrupt 3 is used to break into a debugger
- * 2) Interrupts are turned off during ACPI register setup
- */
-
-/* Unrecognized compiler, use defaults */
-#ifndef ACPI_ASM_MACROS
-
-#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
-#define BREAKPOINT3
-#define disable()
-#define enable()
-#define halt()
-#define ACPI_ACQUIRE_GLOBAL_LOCK(Glptr, acq)
-#define ACPI_RELEASE_GLOBAL_LOCK(Glptr, acq)
-
-#endif /* ACPI_ASM_MACROS */
-
-
-#ifdef ACPI_APPLICATION
-
-/* Don't want software interrupts within a ring3 application */
-
-#undef causeinterrupt
-#undef BREAKPOINT3
-#define causeinterrupt(level)
-#define BREAKPOINT3
-#endif
-
-
-/******************************************************************************
- *
- * Compiler-specific
- *
- *****************************************************************************/
-
-/* this has been moved to compiler-specific headers, which are included from the
- platform header. */
-
-
-#endif /* __ACENV_H__ */
diff --git a/reactos/drivers/bus/acpi/include/platform/acgcc.h b/reactos/drivers/bus/acpi/include/platform/acgcc.h
deleted file mode 100644
index bf8f5073348..00000000000
--- a/reactos/drivers/bus/acpi/include/platform/acgcc.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/******************************************************************************
- *
- * Name: acgcc.h - GCC specific defines, etc.
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACGCC_H__
-#define __ACGCC_H__
-
-
-#ifdef __ia64__
-#define _IA64
-
-#define COMPILER_DEPENDENT_UINT64 unsigned long
-/* Single threaded */
-#define ACPI_APPLICATION
-
-#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
-#define BREAKPOINT3
-#define disable() __cli()
-#define enable() __sti()
-#define wbinvd()
-
-/*! [Begin] no source code translation */
-
-#include
-
-#define halt() ia64_pal_halt_light() /* PAL_HALT[_LIGHT] */
-#define safe_halt() ia64_pal_halt(1) /* PAL_HALT */
-
-
-#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
- do { \
- __asm__ volatile ("1: ld4 r29=%1\n" \
- ";;\n" \
- "mov ar.ccv=r29\n" \
- "mov r2=r29\n" \
- "shr.u r30=r29,1\n" \
- "and r29=-4,r29\n" \
- ";;\n" \
- "add r29=2,r29\n" \
- "and r30=1,r30\n" \
- ";;\n" \
- "add r29=r29,r30\n" \
- ";;\n" \
- "cmpxchg4.acq r30=%1,r29,ar.ccv\n" \
- ";;\n" \
- "cmp.eq p6,p7=r2,r30\n" \
- "(p7) br.dpnt.few 1b\n" \
- "cmp.gt p8,p9=3,r29\n" \
- ";;\n" \
- "(p8) mov %0=-1\n" \
- "(p9) mov %0=r0\n" \
- :"=r"(Acq):"m"(GLptr):"r2","r29","r30","memory"); \
- } while (0)
-
-#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
- do { \
- __asm__ volatile ("1: ld4 r29=%1\n" \
- ";;\n" \
- "mov ar.ccv=r29\n" \
- "mov r2=r29\n" \
- "and r29=-4,r29\n" \
- ";;\n" \
- "cmpxchg4.acq r30=%1,r29,ar.ccv\n" \
- ";;\n" \
- "cmp.eq p6,p7=r2,r30\n" \
- "(p7) br.dpnt.few 1b\n" \
- "and %0=1,r2\n" \
- ";;\n" \
- :"=r"(Acq):"m"(GLptr):"r2","r29","r30","memory"); \
- } while (0)
-/*! [End] no source code translation !*/
-
-#elif defined (_AMD64_)
-
-#define COMPILER_DEPENDENT_UINT64 unsigned long long
-#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
-#define BREAKPOINT3
-#define disable() __cli()
-#define enable() __sti()
-#define halt() __asm__ __volatile__ ("sti; hlt":::"memory")
-#define wbinvd()
-
-/*! [Begin] no source code translation
- *
- * A brief explanation as GNU inline assembly is a bit hairy
- * %0 is the output parameter in EAX ("=a")
- * %1 and %2 are the input parameters in ECX ("c")
- * and an immediate value ("i") respectively
- * All actual register references are preceded with "%%" as in "%%edx"
- * Immediate values in the assembly are preceded by "$" as in "$0x1"
- * The final asm parameter are the operation altered non-output registers.
- */
-
-// FIXME: These are only sonly stubs to make it compile
-
-#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
- do { \
- int dummy; \
- asm("1: movl (%1),%%eax;" \
- "movl %%eax,%%edx;" \
- :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx"); \
- } while(0)
-
-#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
- do { \
- int dummy; \
- asm("1: movl (%1),%%eax;" \
- "movl %%eax,%%edx;" \
- :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx"); \
- } while(0)
-
-/*! [End] no source code translation !*/
-
-#else /* DO IA32 */
-
-#define COMPILER_DEPENDENT_UINT64 unsigned long long
-#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
-#define BREAKPOINT3
-#define disable() __cli()
-#define enable() __sti()
-#define halt() __asm__ __volatile__ ("sti; hlt":::"memory")
-#define wbinvd()
-
-/*! [Begin] no source code translation
- *
- * A brief explanation as GNU inline assembly is a bit hairy
- * %0 is the output parameter in EAX ("=a")
- * %1 and %2 are the input parameters in ECX ("c")
- * and an immediate value ("i") respectively
- * All actual register references are preceded with "%%" as in "%%edx"
- * Immediate values in the assembly are preceded by "$" as in "$0x1"
- * The final asm parameter are the operation altered non-output registers.
- */
-#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
- do { \
- int dummy; \
- asm("1: movl (%1),%%eax;" \
- "movl %%eax,%%edx;" \
- "andl %2,%%edx;" \
- "btsl $0x1,%%edx;" \
- "adcl $0x0,%%edx;" \
- "lock; cmpxchgl %%edx,(%1);" \
- "jnz 1b;" \
- "cmpb $0x3,%%dl;" \
- "sbbl %%eax,%%eax" \
- :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx"); \
- } while(0)
-
-#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
- do { \
- int dummy; \
- asm("1: movl (%1),%%eax;" \
- "movl %%eax,%%edx;" \
- "andl %2,%%edx;" \
- "lock; cmpxchgl %%edx,(%1);" \
- "jnz 1b;" \
- "andl $0x1,%%eax" \
- :"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx"); \
- } while(0)
-
-/*! [End] no source code translation !*/
-
-#endif /* IA 32 */
-
-#endif /* __ACGCC_H__ */
diff --git a/reactos/drivers/bus/acpi/include/platform/aclinux.h b/reactos/drivers/bus/acpi/include/platform/aclinux.h
deleted file mode 100644
index 81a6775f714..00000000000
--- a/reactos/drivers/bus/acpi/include/platform/aclinux.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/******************************************************************************
- *
- * Name: aclinux.h - OS specific defines, etc.
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACLINUX_H__
-#define __ACLINUX_H__
-
-#define ACPI_OS_NAME "Linux"
-
-#undef ACPI_USE_SYSTEM_CLIBRARY
-
-#ifdef __KERNEL__
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#else
-
-#include
-
-#endif
-
-/* Linux uses GCC */
-
-#include "acgcc.h"
-
-#undef DEBUGGER_THREADING
-#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
-
-#ifndef _IA64
-/* Linux ia32 can't do int64 well */
-#define ACPI_NO_INTEGER64_SUPPORT
-/* And the ia32 kernel doesn't include 64-bit divide support */
-#define ACPI_DIV64(dividend, divisor) do_div(dividend, divisor)
-#else
-#define ACPI_DIV64(dividend, divisor) ACPI_DIVIDE(dividend, divisor)
-#endif
-
-
-#endif /* __ACLINUX_H__ */
diff --git a/reactos/drivers/bus/acpi/include/platform/acmsc.h b/reactos/drivers/bus/acpi/include/platform/acmsc.h
deleted file mode 100644
index 612edf938c2..00000000000
--- a/reactos/drivers/bus/acpi/include/platform/acmsc.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef __ACMSC_H__
-#define __ACMSC_H__
-
-#define COMPILER_DEPENDENT_UINT64 unsigned __int64
-
-#if defined(_M_IX86)
-
-#define ACPI_ASM_MACROS
-#define causeinterrupt(level)
-#define BREAKPOINT3
-#define halt() { __asm { sti } __asm { hlt } }
-#define wbinvd()
-
-__forceinline void _ACPI_ACQUIRE_GLOBAL_LOCK(void * GLptr, unsigned char * Acq_)
-{
- unsigned char Acq;
-
- __asm
- {
- mov ecx, [GLptr]
-
- L1: mov eax, [ecx]
- mov edx, eax
- and edx, ecx
- bts edx, 1
- adc edx, 0
- lock cmpxchg [ecx], edx
- jne L1
- cmp dl, 3
- sbb eax, eax
-
- mov [Acq], al
- };
-
- *Acq_ = Acq;
-}
-
-#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
- _ACPI_ACQUIRE_GLOBAL_LOCK((GLptr), (unsigned char *)&(Acq))
-
-__forceinline void _ACPI_RELEASE_GLOBAL_LOCK(void * GLptr, unsigned char * Acq_)
-{
- unsigned char Acq;
-
- __asm
- {
- mov ecx, [GLptr]
-
- L1: mov eax, [ecx]
- mov edx, eax
- and edx, ecx
- lock cmpxchg [ecx], edx
- jnz L1
- and eax, 1
-
- mov [Acq], al
- };
-
- *Acq_ = Acq;
-}
-
-#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
- _ACPI_RELEASE_GLOBAL_LOCK((GLptr), (unsigned char *)&(Acq))
-
-#endif
-
-#endif /* __ACMSC_H__ */
diff --git a/reactos/drivers/bus/acpi/include/platform/acwin.h b/reactos/drivers/bus/acpi/include/platform/acwin.h
deleted file mode 100644
index cfab7728f6f..00000000000
--- a/reactos/drivers/bus/acpi/include/platform/acwin.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/******************************************************************************
- *
- * Name: aclinux.h - OS specific defines, etc.
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#ifndef __ACWIN_H__
-#define __ACWIN_H__
-
-#define ACPI_OS_NAME "ReactOS"
-#define DEFINE_ALTERNATE_TYPES
-
-#undef ACPI_USE_SYSTEM_CLIBRARY
-
-#ifdef __KERNEL__
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#else
-
-#include
-
-#endif
-
-#if defined(__GNUC__)
-
-#include "acgcc.h"
-
-#undef disable
-#define disable() __asm__("cli\n\t")
-#undef enable
-#define enable() __asm__("sti\n\t")
-
-#elif defined(_MSC_VER)
-
-#include "acmsc.h"
-
-#undef disable
-#define disable() __asm { cli }
-#undef enable
-#define enable() __asm { sti }
-
-#endif
-
-#undef DEBUGGER_THREADING
-#define DEBUGGER_THREADING DEBUGGER_SINGLE_THREADED
-
-#ifndef _IA64
-/* Linux ia32 can't do int64 well */
-#define ACPI_NO_INTEGER64_SUPPORT
-/* And the ia32 kernel doesn't include 64-bit divide support */
-#define ACPI_DIV64(dividend, divisor) do_div(dividend, divisor)
-#else
-#define ACPI_DIV64(dividend, divisor) ACPI_DIVIDE(dividend, divisor)
-#endif
-
-#endif /* __ACWIN_H__ */
diff --git a/reactos/drivers/bus/acpi/include/platform/types.h b/reactos/drivers/bus/acpi/include/platform/types.h
deleted file mode 100644
index e823dda3bf8..00000000000
--- a/reactos/drivers/bus/acpi/include/platform/types.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: include/types.h
- * PURPOSE: Types used by all the parts of the system
- * PROGRAMMER: David Welch
- * DEFINES: _WIN64: 64-bit architecture
- * _WIN32: 32-bit architecture (default)
- * UPDATE HISTORY:
- * 27/06/00: Created
- * 01/05/01: Portabillity changes
- */
-#ifndef __INCLUDE_ACPI_TYPES_H
-#define __INCLUDE_ACPI_TYPES_H
-
-#include
-#include
-
-#endif /* __INCLUDE_ACPI_TYPES_H */
diff --git a/reactos/drivers/bus/acpi/namespace/nsaccess.c b/reactos/drivers/bus/acpi/namespace/nsaccess.c
deleted file mode 100644
index 4da6b907bf7..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsaccess.c
+++ /dev/null
@@ -1,546 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: nsaccess - Top-level functions for accessing ACPI namespace
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsaccess")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_root_initialize
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Allocate and initialize the default root named objects
- *
- * MUTEX: Locks namespace for entire execution
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_root_initialize (void)
-{
- ACPI_STATUS status = AE_OK;
- PREDEFINED_NAMES *init_val = NULL;
- ACPI_NAMESPACE_NODE *new_node;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /*
- * The global root ptr is initially NULL, so a non-NULL value indicates
- * that Acpi_ns_root_initialize() has already been called; just return.
- */
-
- if (acpi_gbl_root_node) {
- status = AE_OK;
- goto unlock_and_exit;
- }
-
-
- /*
- * Tell the rest of the subsystem that the root is initialized
- * (This is OK because the namespace is locked)
- */
-
- acpi_gbl_root_node = &acpi_gbl_root_node_struct;
-
-
- /* Enter the pre-defined names in the name table */
-
- for (init_val = acpi_gbl_pre_defined_names; init_val->name; init_val++) {
- status = acpi_ns_lookup (NULL, init_val->name,
- (OBJECT_TYPE_INTERNAL) init_val->type,
- IMODE_LOAD_PASS2, NS_NO_UPSEARCH,
- NULL, &new_node);
-
-
- /*
- * Name entered successfully.
- * If entry in Pre_defined_names[] specifies an
- * initial value, create the initial value.
- */
-
- if (init_val->val) {
- /*
- * Entry requests an initial value, allocate a
- * descriptor for it.
- */
-
- obj_desc = acpi_cm_create_internal_object (
- (OBJECT_TYPE_INTERNAL) init_val->type);
-
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto unlock_and_exit;
- }
-
- /*
- * Convert value string from table entry to
- * internal representation. Only types actually
- * used for initial values are implemented here.
- */
-
- switch (init_val->type) {
-
- case ACPI_TYPE_INTEGER:
-
- obj_desc->integer.value =
- (ACPI_INTEGER) STRTOUL (init_val->val, NULL, 10);
- break;
-
-
- case ACPI_TYPE_STRING:
-
- obj_desc->string.length = STRLEN (init_val->val);
-
- /*
- * Allocate a buffer for the string. All
- * String.Pointers must be allocated buffers!
- * (makes deletion simpler)
- */
- obj_desc->string.pointer = acpi_cm_allocate (
- (obj_desc->string.length + 1));
- if (!obj_desc->string.pointer) {
- acpi_cm_remove_reference (obj_desc);
- status = AE_NO_MEMORY;
- goto unlock_and_exit;
- }
-
- STRCPY (obj_desc->string.pointer, init_val->val);
- break;
-
-
- case ACPI_TYPE_MUTEX:
-
- obj_desc->mutex.sync_level =
- (u16) STRTOUL (init_val->val, NULL, 10);
-
- if (STRCMP (init_val->name, "_GL_") == 0) {
- /*
- * Create a counting semaphore for the
- * global lock
- */
- status = acpi_os_create_semaphore (ACPI_NO_UNIT_LIMIT,
- 1, &obj_desc->mutex.semaphore);
-
- if (ACPI_FAILURE (status)) {
- goto unlock_and_exit;
- }
- /*
- * We just created the mutex for the
- * global lock, save it
- */
-
- acpi_gbl_global_lock_semaphore = obj_desc->mutex.semaphore;
- }
-
- else {
- /* Create a mutex */
-
- status = acpi_os_create_semaphore (1, 1,
- &obj_desc->mutex.semaphore);
-
- if (ACPI_FAILURE (status)) {
- goto unlock_and_exit;
- }
- }
- break;
-
-
- default:
- REPORT_ERROR (("Unsupported initial type value %X\n",
- init_val->type));
- acpi_cm_remove_reference (obj_desc);
- obj_desc = NULL;
- continue;
- }
-
- /* Store pointer to value descriptor in the Node */
-
- acpi_ns_attach_object (new_node, obj_desc, obj_desc->common.type);
- }
- }
-
-
-unlock_and_exit:
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_lookup
- *
- * PARAMETERS: Prefix_node - Search scope if name is not fully qualified
- * Pathname - Search pathname, in internal format
- * (as represented in the AML stream)
- * Type - Type associated with name
- * Interpreter_mode - IMODE_LOAD_PASS2 => add name if not found
- * Flags - Flags describing the search restrictions
- * Walk_state - Current state of the walk
- * Return_node - Where the Node is placed (if found
- * or created successfully)
- *
- * RETURN: Status
- *
- * DESCRIPTION: Find or enter the passed name in the name space.
- * Log an error if name not found in Exec mode.
- *
- * MUTEX: Assumes namespace is locked.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_lookup (
- ACPI_GENERIC_STATE *scope_info,
- NATIVE_CHAR *pathname,
- OBJECT_TYPE_INTERNAL type,
- OPERATING_MODE interpreter_mode,
- u32 flags,
- ACPI_WALK_STATE *walk_state,
- ACPI_NAMESPACE_NODE **return_node)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *prefix_node;
- ACPI_NAMESPACE_NODE *current_node = NULL;
- ACPI_NAMESPACE_NODE *scope_to_push = NULL;
- ACPI_NAMESPACE_NODE *this_node = NULL;
- u32 num_segments;
- ACPI_NAME simple_name;
- u8 null_name_path = FALSE;
- OBJECT_TYPE_INTERNAL type_to_check_for;
- OBJECT_TYPE_INTERNAL this_search_type;
- u32 local_flags = flags & ~NS_ERROR_IF_FOUND;
-
-
- if (!return_node) {
- return (AE_BAD_PARAMETER);
- }
-
-
- acpi_gbl_ns_lookup_count++;
-
- *return_node = ENTRY_NOT_FOUND;
-
-
- if (!acpi_gbl_root_node) {
- return (AE_NO_NAMESPACE);
- }
-
- /*
- * Get the prefix scope.
- * A null scope means use the root scope
- */
-
- if ((!scope_info) ||
- (!scope_info->scope.node)) {
- prefix_node = acpi_gbl_root_node;
- }
- else {
- prefix_node = scope_info->scope.node;
- }
-
-
- /*
- * This check is explicitly split provide relax the Type_to_check_for
- * conditions for Bank_field_defn. Originally, both Bank_field_defn and
- * Def_field_defn caused Type_to_check_for to be set to ACPI_TYPE_REGION,
- * but the Bank_field_defn may also check for a Field definition as well
- * as an Operation_region.
- */
-
- if (INTERNAL_TYPE_DEF_FIELD_DEFN == type) {
- /* Def_field_defn defines fields in a Region */
-
- type_to_check_for = ACPI_TYPE_REGION;
- }
-
- else if (INTERNAL_TYPE_BANK_FIELD_DEFN == type) {
- /* Bank_field_defn defines data fields in a Field Object */
-
- type_to_check_for = ACPI_TYPE_ANY;
- }
-
- else {
- type_to_check_for = type;
- }
-
-
- /* TBD: [Restructure] - Move the pathname stuff into a new procedure */
-
- /* Examine the name pointer */
-
- if (!pathname) {
- /* 8-12-98 ASL Grammar Update supports null Name_path */
-
- null_name_path = TRUE;
- num_segments = 0;
- this_node = acpi_gbl_root_node;
-
- }
-
- else {
- /*
- * Valid name pointer (Internal name format)
- *
- * Check for prefixes. As represented in the AML stream, a
- * Pathname consists of an optional scope prefix followed by
- * a segment part.
- *
- * If present, the scope prefix is either a Root_prefix (in
- * which case the name is fully qualified), or zero or more
- * Parent_prefixes (in which case the name's scope is relative
- * to the current scope).
- *
- * The segment part consists of either:
- * - A single 4-byte name segment, or
- * - A Dual_name_prefix followed by two 4-byte name segments, or
- * - A Multi_name_prefix_op, followed by a byte indicating the
- * number of segments and the segments themselves.
- */
-
- if (*pathname == AML_ROOT_PREFIX) {
- /* Pathname is fully qualified, look in root name table */
-
- current_node = acpi_gbl_root_node;
-
- /* point to segment part */
-
- pathname++;
-
- /* Direct reference to root, "\" */
-
- if (!(*pathname)) {
- this_node = acpi_gbl_root_node;
- goto check_for_new_scope_and_exit;
- }
- }
-
- else {
- /* Pathname is relative to current scope, start there */
-
- current_node = prefix_node;
-
- /*
- * Handle up-prefix (carat). More than one prefix
- * is supported
- */
-
- while (*pathname == AML_PARENT_PREFIX) {
- /* Point to segment part or next Parent_prefix */
-
- pathname++;
-
- /* Backup to the parent's scope */
-
- this_node = acpi_ns_get_parent_object (current_node);
- if (!this_node) {
- /* Current scope has no parent scope */
-
- REPORT_ERROR (
- ("Too many parent prefixes (^) - reached root\n"));
- return (AE_NOT_FOUND);
- }
-
- current_node = this_node;
- }
- }
-
-
- /*
- * Examine the name prefix opcode, if any,
- * to determine the number of segments
- */
-
- if (*pathname == AML_DUAL_NAME_PREFIX) {
- num_segments = 2;
-
- /* point to first segment */
-
- pathname++;
-
- }
-
- else if (*pathname == AML_MULTI_NAME_PREFIX_OP) {
- num_segments = (u32)* (u8 *) ++pathname;
-
- /* point to first segment */
-
- pathname++;
-
- }
-
- else {
- /*
- * No Dual or Multi prefix, hence there is only one
- * segment and Pathname is already pointing to it.
- */
- num_segments = 1;
-
- }
-
- }
-
-
- /*
- * Search namespace for each segment of the name.
- * Loop through and verify/add each name segment.
- */
-
-
- while (num_segments-- && current_node) {
- /*
- * Search for the current name segment under the current
- * named object. The Type is significant only at the last (topmost)
- * level. (We don't care about the types along the path, only
- * the type of the final target object.)
- */
- this_search_type = ACPI_TYPE_ANY;
- if (!num_segments) {
- this_search_type = type;
- local_flags = flags;
- }
-
- /* Pluck one ACPI name from the front of the pathname */
-
- MOVE_UNALIGNED32_TO_32 (&simple_name, pathname);
-
- /* Try to find the ACPI name */
-
- status = acpi_ns_search_and_enter (simple_name, walk_state,
- current_node, interpreter_mode,
- this_search_type, local_flags,
- &this_node);
-
- if (ACPI_FAILURE (status)) {
- if (status == AE_NOT_FOUND) {
- /* Name not found in ACPI namespace */
-
- }
-
- return (status);
- }
-
-
- /*
- * If 1) This is the last segment (Num_segments == 0)
- * 2) and looking for a specific type
- * (Not checking for TYPE_ANY)
- * 3) Which is not an alias
- * 4) which is not a local type (TYPE_DEF_ANY)
- * 5) which is not a local type (TYPE_SCOPE)
- * 6) which is not a local type (TYPE_INDEX_FIELD_DEFN)
- * 7) and type of object is known (not TYPE_ANY)
- * 8) and object does not match request
- *
- * Then we have a type mismatch. Just warn and ignore it.
- */
- if ((num_segments == 0) &&
- (type_to_check_for != ACPI_TYPE_ANY) &&
- (type_to_check_for != INTERNAL_TYPE_ALIAS) &&
- (type_to_check_for != INTERNAL_TYPE_DEF_ANY) &&
- (type_to_check_for != INTERNAL_TYPE_SCOPE) &&
- (type_to_check_for != INTERNAL_TYPE_INDEX_FIELD_DEFN) &&
- (this_node->type != ACPI_TYPE_ANY) &&
- (this_node->type != type_to_check_for)) {
- /* Complain about a type mismatch */
-
- REPORT_WARNING (
- ("Ns_lookup: %4.4s, type %X, checking for type %X\n",
- &simple_name, this_node->type, type_to_check_for));
- }
-
- /*
- * If this is the last name segment and we are not looking for a
- * specific type, but the type of found object is known, use that type
- * to see if it opens a scope.
- */
-
- if ((0 == num_segments) && (ACPI_TYPE_ANY == type)) {
- type = this_node->type;
- }
-
- if ((num_segments || acpi_ns_opens_scope (type)) &&
- (this_node->child == NULL)) {
- /*
- * More segments or the type implies enclosed scope,
- * and the next scope has not been allocated.
- */
-
- }
-
- current_node = this_node;
-
- /* point to next name segment */
-
- pathname += ACPI_NAME_SIZE;
- }
-
-
- /*
- * Always check if we need to open a new scope
- */
-
-check_for_new_scope_and_exit:
-
- if (!(flags & NS_DONT_OPEN_SCOPE) && (walk_state)) {
- /*
- * If entry is a type which opens a scope,
- * push the new scope on the scope stack.
- */
-
- if (acpi_ns_opens_scope (type_to_check_for)) {
- /* 8-12-98 ASL Grammar Update supports null Name_path */
-
- if (null_name_path) {
- /* TBD: [Investigate] - is this the correct thing to do? */
-
- scope_to_push = NULL;
- }
- else {
- scope_to_push = this_node;
- }
-
- status = acpi_ds_scope_stack_push (scope_to_push, type,
- walk_state);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- }
- }
-
- *return_node = this_node;
- return (AE_OK);
-}
-
diff --git a/reactos/drivers/bus/acpi/namespace/nsalloc.c b/reactos/drivers/bus/acpi/namespace/nsalloc.c
deleted file mode 100644
index 00f79882669..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsalloc.c
+++ /dev/null
@@ -1,563 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: nsalloc - Namespace allocation and deletion utilities
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsalloc")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_create_node
- *
- * PARAMETERS:
- *
- * RETURN: None
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_create_node (
- u32 acpi_name)
-{
- ACPI_NAMESPACE_NODE *node;
-
-
- node = acpi_cm_callocate (sizeof (ACPI_NAMESPACE_NODE));
- if (!node) {
- return (NULL);
- }
-
- INCREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE));
-
- node->data_type = ACPI_DESC_TYPE_NAMED;
- node->name = acpi_name;
- node->reference_count = 1;
-
- return (node);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_delete_node
- *
- * PARAMETERS:
- *
- * RETURN: None
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-void
-acpi_ns_delete_node (
- ACPI_NAMESPACE_NODE *node)
-{
- ACPI_NAMESPACE_NODE *parent_node;
- ACPI_NAMESPACE_NODE *prev_node;
- ACPI_NAMESPACE_NODE *next_node;
-
-
- parent_node = acpi_ns_get_parent_object (node);
-
- prev_node = NULL;
- next_node = parent_node->child;
-
- while (next_node != node) {
- prev_node = next_node;
- next_node = prev_node->peer;
- }
-
- if (prev_node) {
- prev_node->peer = next_node->peer;
- if (next_node->flags & ANOBJ_END_OF_PEER_LIST) {
- prev_node->flags |= ANOBJ_END_OF_PEER_LIST;
- }
- }
- else {
- parent_node->child = next_node->peer;
- }
-
-
- DECREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE));
-
- /*
- * Detach an object if there is one
- */
-
- if (node->object) {
- acpi_ns_detach_object (node);
- }
-
- acpi_cm_free (node);
-
-
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_install_node
- *
- * PARAMETERS: Walk_state - Current state of the walk
- * Parent_node - The parent of the new Node
- * Node - The new Node to install
- * Type - ACPI object type of the new Node
- *
- * RETURN: None
- *
- * DESCRIPTION: Initialize a new entry within a namespace table.
- *
- ******************************************************************************/
-
-void
-acpi_ns_install_node (
- ACPI_WALK_STATE *walk_state,
- ACPI_NAMESPACE_NODE *parent_node, /* Parent */
- ACPI_NAMESPACE_NODE *node, /* New Child*/
- OBJECT_TYPE_INTERNAL type)
-{
- u16 owner_id = TABLE_ID_DSDT;
- ACPI_NAMESPACE_NODE *child_node;
-
-
- /*
- * Get the owner ID from the Walk state
- * The owner ID is used to track table deletion and
- * deletion of objects created by methods
- */
- if (walk_state) {
- owner_id = walk_state->owner_id;
- }
-
-
- /* link the new entry into the parent and existing children */
-
- /* TBD: Could be first, last, or alphabetic */
-
- child_node = parent_node->child;
- if (!child_node) {
- parent_node->child = node;
- }
-
- else {
- while (!(child_node->flags & ANOBJ_END_OF_PEER_LIST)) {
- child_node = child_node->peer;
- }
-
- child_node->peer = node;
-
- /* Clear end-of-list flag */
-
- child_node->flags &= ~ANOBJ_END_OF_PEER_LIST;
- }
-
- /* Init the new entry */
-
- node->owner_id = owner_id;
- node->flags |= ANOBJ_END_OF_PEER_LIST;
- node->peer = parent_node;
-
-
- /*
- * If adding a name with unknown type, or having to
- * add the region in order to define fields in it, we
- * have a forward reference.
- */
-
- if ((ACPI_TYPE_ANY == type) ||
- (INTERNAL_TYPE_DEF_FIELD_DEFN == type) ||
- (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) {
- /*
- * We don't want to abort here, however!
- * We will fill in the actual type when the
- * real definition is found later.
- */
-
- }
-
- /*
- * The Def_field_defn and Bank_field_defn cases are actually
- * looking up the Region in which the field will be defined
- */
-
- if ((INTERNAL_TYPE_DEF_FIELD_DEFN == type) ||
- (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) {
- type = ACPI_TYPE_REGION;
- }
-
- /*
- * Scope, Def_any, and Index_field_defn are bogus "types" which do
- * not actually have anything to do with the type of the name
- * being looked up. Save any other value of Type as the type of
- * the entry.
- */
-
- if ((type != INTERNAL_TYPE_SCOPE) &&
- (type != INTERNAL_TYPE_DEF_ANY) &&
- (type != INTERNAL_TYPE_INDEX_FIELD_DEFN)) {
- node->type = (u8) type;
- }
-
- /*
- * Increment the reference count(s) of all parents up to
- * the root!
- */
-
- while ((node = acpi_ns_get_parent_object (node)) != NULL) {
- node->reference_count++;
- }
-
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_delete_children
- *
- * PARAMETERS: Parent_node - Delete this objects children
- *
- * RETURN: None.
- *
- * DESCRIPTION: Delete all children of the parent object. Deletes a
- * "scope".
- *
- ******************************************************************************/
-
-void
-acpi_ns_delete_children (
- ACPI_NAMESPACE_NODE *parent_node)
-{
- ACPI_NAMESPACE_NODE *child_node;
- ACPI_NAMESPACE_NODE *next_node;
- u8 flags;
-
-
- if (!parent_node) {
- return;
- }
-
- /* If no children, all done! */
-
- child_node = parent_node->child;
- if (!child_node) {
- return;
- }
-
- /*
- * Deallocate all children at this level
- */
- do {
- /* Get the things we need */
-
- next_node = child_node->peer;
- flags = child_node->flags;
-
- /* Grandchildren should have all been deleted already */
-
-
- /* Now we can free this child object */
-
- DECREMENT_NAME_TABLE_METRICS (sizeof (ACPI_NAMESPACE_NODE));
-
- /*
- * Detach an object if there is one
- */
-
- if (child_node->object) {
- acpi_ns_detach_object (child_node);
- }
-
- acpi_cm_free (child_node);
-
- /* And move on to the next child in the list */
-
- child_node = next_node;
-
- } while (!(flags & ANOBJ_END_OF_PEER_LIST));
-
-
- /* Clear the parent's child pointer */
-
- parent_node->child = NULL;
-
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_delete_namespace_subtree
- *
- * PARAMETERS: None.
- *
- * RETURN: None.
- *
- * DESCRIPTION: Delete a subtree of the namespace. This includes all objects
- * stored within the subtree. Scope tables are deleted also
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_delete_namespace_subtree (
- ACPI_NAMESPACE_NODE *parent_node)
-{
- ACPI_NAMESPACE_NODE *child_node;
- ACPI_OPERAND_OBJECT *obj_desc;
- u32 level;
-
-
- if (!parent_node) {
- return (AE_OK);
- }
-
-
- child_node = 0;
- level = 1;
-
- /*
- * Traverse the tree of objects until we bubble back up
- * to where we started.
- */
-
- while (level > 0) {
- /*
- * Get the next typed object in this scope.
- * Null returned if not found
- */
-
- child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY, parent_node,
- child_node);
- if (child_node) {
- /*
- * Found an object - delete the object within
- * the Value field
- */
-
- obj_desc = acpi_ns_get_attached_object (child_node);
- if (obj_desc) {
- acpi_ns_detach_object (child_node);
- acpi_cm_remove_reference (obj_desc);
- }
-
-
- /* Check if this object has any children */
-
- if (acpi_ns_get_next_object (ACPI_TYPE_ANY, child_node, 0)) {
- /*
- * There is at least one child of this object,
- * visit the object
- */
-
- level++;
- parent_node = child_node;
- child_node = 0;
- }
- }
-
- else {
- /*
- * No more children in this object.
- * We will move up to the grandparent.
- */
- level--;
-
- /*
- * Now delete all of the children of this parent
- * all at the same time.
- */
- acpi_ns_delete_children (parent_node);
-
- /* New "last child" is this parent object */
-
- child_node = parent_node;
-
- /* Now we can move up the tree to the grandparent */
-
- parent_node = acpi_ns_get_parent_object (parent_node);
- }
- }
-
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_remove_reference
- *
- * PARAMETERS: Node - Named object whose reference count is to be
- * decremented
- *
- * RETURN: None.
- *
- * DESCRIPTION: Remove a Node reference. Decrements the reference count
- * of all parent Nodes up to the root. Any object along
- * the way that reaches zero references is freed.
- *
- ******************************************************************************/
-
-static void
-acpi_ns_remove_reference (
- ACPI_NAMESPACE_NODE *node)
-{
- ACPI_NAMESPACE_NODE *next_node;
-
-
- /*
- * Decrement the reference count(s) of this object and all
- * objects up to the root, Delete anything with zero remaining references.
- */
- next_node = node;
- while (next_node) {
- /* Decrement the reference count on this object*/
-
- next_node->reference_count--;
-
- /* Delete the object if no more references */
-
- if (!next_node->reference_count) {
- /* Delete all children and delete the object */
-
- acpi_ns_delete_children (next_node);
- acpi_ns_delete_node (next_node);
- }
-
- /* Move up to parent */
-
- next_node = acpi_ns_get_parent_object (next_node);
- }
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_delete_namespace_by_owner
- *
- * PARAMETERS: None.
- *
- * RETURN: None.
- *
- * DESCRIPTION: Delete entries within the namespace that are owned by a
- * specific ID. Used to delete entire ACPI tables. All
- * reference counts are updated.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_delete_namespace_by_owner (
- u16 owner_id)
-{
- ACPI_NAMESPACE_NODE *child_node;
- u32 level;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_NAMESPACE_NODE *parent_node;
-
-
- parent_node = acpi_gbl_root_node;
- child_node = 0;
- level = 1;
-
- /*
- * Traverse the tree of objects until we bubble back up
- * to where we started.
- */
-
- while (level > 0) {
- /*
- * Get the next typed object in this scope.
- * Null returned if not found
- */
-
- child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY, parent_node,
- child_node);
-
- if (child_node) {
- if (child_node->owner_id == owner_id) {
- /*
- * Found an object - delete the object within
- * the Value field
- */
-
- obj_desc = acpi_ns_get_attached_object (child_node);
- if (obj_desc) {
- acpi_ns_detach_object (child_node);
- acpi_cm_remove_reference (obj_desc);
- }
- }
-
- /* Check if this object has any children */
-
- if (acpi_ns_get_next_object (ACPI_TYPE_ANY, child_node, 0)) {
- /*
- * There is at least one child of this object,
- * visit the object
- */
-
- level++;
- parent_node = child_node;
- child_node = 0;
- }
-
- else if (child_node->owner_id == owner_id) {
- acpi_ns_remove_reference (child_node);
- }
- }
-
- else {
- /*
- * No more children in this object. Move up to grandparent.
- */
- level--;
-
- if (level != 0) {
- if (parent_node->owner_id == owner_id) {
- acpi_ns_remove_reference (parent_node);
- }
- }
-
- /* New "last child" is this parent object */
-
- child_node = parent_node;
-
- /* Now we can move up the tree to the grandparent */
-
- parent_node = acpi_ns_get_parent_object (parent_node);
- }
- }
-
-
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/namespace/nseval.c b/reactos/drivers/bus/acpi/namespace/nseval.c
deleted file mode 100644
index 63647e0d92e..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nseval.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: nseval - Object evaluation interfaces -- includes control
- * method lookup and execution.
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nseval")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_evaluate_relative
- *
- * PARAMETERS: Handle - The relative containing object
- * *Pathname - Name of method to execute, If NULL, the
- * handle is the object to execute
- * **Params - List of parameters to pass to the method,
- * terminated by NULL. Params itself may be
- * NULL if no parameters are being passed.
- * *Return_object - Where to put method's return value (if
- * any). If NULL, no value is returned.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Find and execute the requested method using the handle as a
- * scope
- *
- * MUTEX: Locks Namespace
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_evaluate_relative (
- ACPI_NAMESPACE_NODE *handle,
- NATIVE_CHAR *pathname,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_object)
-{
- ACPI_NAMESPACE_NODE *prefix_node;
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *node = NULL;
- NATIVE_CHAR *internal_path = NULL;
- ACPI_GENERIC_STATE scope_info;
-
-
- /*
- * Must have a valid object handle
- */
- if (!handle) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Build an internal name string for the method */
-
- status = acpi_ns_internalize_name (pathname, &internal_path);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Get the prefix handle and Node */
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- prefix_node = acpi_ns_convert_handle_to_entry (handle);
- if (!prefix_node) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- status = AE_BAD_PARAMETER;
- goto cleanup;
- }
-
- /* Lookup the name in the namespace */
-
- scope_info.scope.node = prefix_node;
- status = acpi_ns_lookup (&scope_info, internal_path, ACPI_TYPE_ANY,
- IMODE_EXECUTE, NS_NO_UPSEARCH, NULL,
- &node);
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /*
- * Now that we have a handle to the object, we can attempt
- * to evaluate it.
- */
-
- status = acpi_ns_evaluate_by_handle (node, params, return_object);
-
-cleanup:
-
- /* Cleanup */
-
- acpi_cm_free (internal_path);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_evaluate_by_name
- *
- * PARAMETERS: Pathname - Fully qualified pathname to the object
- * *Return_object - Where to put method's return value (if
- * any). If NULL, no value is returned.
- * **Params - List of parameters to pass to the method,
- * terminated by NULL. Params itself may be
- * NULL if no parameters are being passed.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Find and execute the requested method passing the given
- * parameters
- *
- * MUTEX: Locks Namespace
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_evaluate_by_name (
- NATIVE_CHAR *pathname,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_object)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *node = NULL;
- NATIVE_CHAR *internal_path = NULL;
-
-
- /* Build an internal name string for the method */
-
- status = acpi_ns_internalize_name (pathname, &internal_path);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* Lookup the name in the namespace */
-
- status = acpi_ns_lookup (NULL, internal_path, ACPI_TYPE_ANY,
- IMODE_EXECUTE, NS_NO_UPSEARCH, NULL,
- &node);
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- if (ACPI_FAILURE (status)) {
- goto cleanup;
- }
-
- /*
- * Now that we have a handle to the object, we can attempt
- * to evaluate it.
- */
-
- status = acpi_ns_evaluate_by_handle (node, params, return_object);
-
-
-cleanup:
-
- /* Cleanup */
-
- if (internal_path) {
- acpi_cm_free (internal_path);
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_evaluate_by_handle
- *
- * PARAMETERS: Handle - Method Node to execute
- * **Params - List of parameters to pass to the method,
- * terminated by NULL. Params itself may be
- * NULL if no parameters are being passed.
- * *Return_object - Where to put method's return value (if
- * any). If NULL, no value is returned.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute the requested method passing the given parameters
- *
- * MUTEX: Locks Namespace
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_evaluate_by_handle (
- ACPI_NAMESPACE_NODE *handle,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_object)
-{
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *local_return_object;
-
-
- /* Check if namespace has been initialized */
-
- if (!acpi_gbl_root_node) {
- return (AE_NO_NAMESPACE);
- }
-
- /* Parameter Validation */
-
- if (!handle) {
- return (AE_BAD_PARAMETER);
- }
-
- if (return_object) {
- /* Initialize the return value to an invalid object */
-
- *return_object = NULL;
- }
-
- /* Get the prefix handle and Node */
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- node = acpi_ns_convert_handle_to_entry (handle);
- if (!node) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (AE_BAD_PARAMETER);
- }
-
-
- /*
- * Two major cases here:
- * 1) The object is an actual control method -- execute it.
- * 2) The object is not a method -- just return it's current
- * value
- *
- * In both cases, the namespace is unlocked by the
- * Acpi_ns* procedure
- */
- if (acpi_ns_get_type (node) == ACPI_TYPE_METHOD) {
- /*
- * Case 1) We have an actual control method to execute
- */
- status = acpi_ns_execute_control_method (node, params,
- &local_return_object);
- }
-
- else {
- /*
- * Case 2) Object is NOT a method, just return its
- * current value
- */
- status = acpi_ns_get_object_value (node, &local_return_object);
- }
-
-
- /*
- * Check if there is a return value on the stack that must
- * be dealt with
- */
- if (status == AE_CTRL_RETURN_VALUE) {
- /*
- * If the Method returned a value and the caller
- * provided a place to store a returned value, Copy
- * the returned value to the object descriptor provided
- * by the caller.
- */
- if (return_object) {
- /*
- * Valid return object, copy the pointer to
- * the returned object
- */
- *return_object = local_return_object;
- }
-
-
- /* Map AE_RETURN_VALUE to AE_OK, we are done with it */
-
- if (status == AE_CTRL_RETURN_VALUE) {
- status = AE_OK;
- }
- }
-
- /*
- * Namespace was unlocked by the handling Acpi_ns* function,
- * so we just return
- */
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_execute_control_method
- *
- * PARAMETERS: Method_node - The object/method
- * **Params - List of parameters to pass to the method,
- * terminated by NULL. Params itself may be
- * NULL if no parameters are being passed.
- * **Return_obj_desc - List of result objects to be returned
- * from the method.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Execute the requested method passing the given parameters
- *
- * MUTEX: Assumes namespace is locked
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_execute_control_method (
- ACPI_NAMESPACE_NODE *method_node,
- ACPI_OPERAND_OBJECT **params,
- ACPI_OPERAND_OBJECT **return_obj_desc)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- /* Verify that there is a method associated with this object */
-
- obj_desc = acpi_ns_get_attached_object ((ACPI_HANDLE) method_node);
- if (!obj_desc) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (AE_ERROR);
- }
-
-
- /*
- * Unlock the namespace before execution. This allows namespace access
- * via the external Acpi* interfaces while a method is being executed.
- * However, any namespace deletion must acquire both the namespace and
- * interpreter locks to ensure that no thread is using the portion of the
- * namespace that is being deleted.
- */
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- /*
- * Execute the method via the interpreter
- */
- status = acpi_aml_execute_method (method_node, params, return_obj_desc);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_get_object_value
- *
- * PARAMETERS: Node - The object
- *
- * RETURN: Status
- *
- * DESCRIPTION: Return the current value of the object
- *
- * MUTEX: Assumes namespace is locked
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_get_object_value (
- ACPI_NAMESPACE_NODE *node,
- ACPI_OPERAND_OBJECT **return_obj_desc)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *val_desc;
-
-
- /*
- * We take the value from certain objects directly
- */
-
- if ((node->type == ACPI_TYPE_PROCESSOR) ||
- (node->type == ACPI_TYPE_POWER)) {
- /*
- * Create a Reference object to contain the object
- */
- obj_desc = acpi_cm_create_internal_object (node->type);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto unlock_and_exit;
- }
-
- /*
- * Get the attached object
- */
-
- val_desc = acpi_ns_get_attached_object (node);
- if (!val_desc) {
- status = AE_NULL_OBJECT;
- goto unlock_and_exit;
- }
-
- /*
- * Just copy from the original to the return object
- *
- * TBD: [Future] - need a low-level object copy that handles
- * the reference count automatically. (Don't want to copy it)
- */
-
- MEMCPY (obj_desc, val_desc, sizeof (ACPI_OPERAND_OBJECT));
- obj_desc->common.reference_count = 1;
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- }
-
-
- /*
- * Other objects require a reference object wrapper which we
- * then attempt to resolve.
- */
- else {
- /* Create an Reference object to contain the object */
-
- obj_desc = acpi_cm_create_internal_object (INTERNAL_TYPE_REFERENCE);
- if (!obj_desc) {
- status = AE_NO_MEMORY;
- goto unlock_and_exit;
- }
-
- /* Construct a descriptor pointing to the name */
-
- obj_desc->reference.opcode = (u8) AML_NAME_OP;
- obj_desc->reference.object = (void *) node;
-
- /*
- * Use Resolve_to_value() to get the associated value. This call
- * always deletes Obj_desc (allocated above).
- *
- * NOTE: we can get away with passing in NULL for a walk state
- * because Obj_desc is guaranteed to not be a reference to either
- * a method local or a method argument
- *
- * Even though we do not directly invoke the interpreter
- * for this, we must enter it because we could access an opregion.
- * The opregion access code assumes that the interpreter
- * is locked.
- *
- * We must release the namespace lock before entering the
- * intepreter.
- */
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- status = acpi_aml_enter_interpreter ();
- if (ACPI_SUCCESS (status)) {
- status = acpi_aml_resolve_to_value (&obj_desc, NULL);
-
- acpi_aml_exit_interpreter ();
- }
- }
-
- /*
- * If Acpi_aml_resolve_to_value() succeeded, the return value was
- * placed in Obj_desc.
- */
-
- if (ACPI_SUCCESS (status)) {
- status = AE_CTRL_RETURN_VALUE;
-
- *return_obj_desc = obj_desc;
- }
-
- /* Namespace is unlocked */
-
- return (status);
-
-
-unlock_and_exit:
-
- /* Unlock the namespace */
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
diff --git a/reactos/drivers/bus/acpi/namespace/nsinit.c b/reactos/drivers/bus/acpi/namespace/nsinit.c
deleted file mode 100644
index 81ed0fe3c2c..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsinit.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/******************************************************************************
- *
- * Module Name: nsinit - namespace initialization
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsinit")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_initialize_objects
- *
- * PARAMETERS: None
- *
- * RETURN: Status
- *
- * DESCRIPTION: Walk the entire namespace and perform any necessary
- * initialization on the objects found therein
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_initialize_objects (
- void)
-{
- ACPI_STATUS status;
- ACPI_INIT_WALK_INFO info;
-
-
- info.field_count = 0;
- info.field_init = 0;
- info.op_region_count = 0;
- info.op_region_init = 0;
- info.object_count = 0;
-
-
- /* Walk entire namespace from the supplied root */
-
- status = acpi_walk_namespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
- ACPI_UINT32_MAX, acpi_ns_init_one_object,
- &info, NULL);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_initialize_devices
- *
- * PARAMETERS: None
- *
- * RETURN: ACPI_STATUS
- *
- * DESCRIPTION: Walk the entire namespace and initialize all ACPI devices.
- * This means running _INI on all present devices.
- *
- * Note: We install PCI config space handler on region access,
- * not here.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_initialize_devices (
- void)
-{
- ACPI_STATUS status;
- ACPI_DEVICE_WALK_INFO info;
-
-
- info.device_count = 0;
- info.num_STA = 0;
- info.num_INI = 0;
-
-
- status = acpi_ns_walk_namespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
- ACPI_UINT32_MAX, FALSE, acpi_ns_init_one_device, &info, NULL);
-
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_init_one_object
- *
- * PARAMETERS: Obj_handle - Node
- * Level - Current nesting level
- * Context - Points to a init info struct
- * Return_value - Not used
- *
- * RETURN: Status
- *
- * DESCRIPTION: Callback from Acpi_walk_namespace. Invoked for every object
- * within the namespace.
- *
- * Currently, the only objects that require initialization are:
- * 1) Methods
- * 2) Op Regions
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_init_one_object (
- ACPI_HANDLE obj_handle,
- u32 level,
- void *context,
- void **return_value)
-{
- OBJECT_TYPE_INTERNAL type;
- ACPI_STATUS status;
- ACPI_INIT_WALK_INFO *info = (ACPI_INIT_WALK_INFO *) context;
- ACPI_NAMESPACE_NODE *node = (ACPI_NAMESPACE_NODE *) obj_handle;
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- info->object_count++;
-
-
- /* And even then, we are only interested in a few object types */
-
- type = acpi_ns_get_type (obj_handle);
- obj_desc = node->object;
- if (!obj_desc) {
- return (AE_OK);
- }
-
- switch (type) {
-
- case ACPI_TYPE_REGION:
-
- info->op_region_count++;
- if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
- break;
- }
-
- info->op_region_init++;
- status = acpi_ds_get_region_arguments (obj_desc);
-
-
- break;
-
-
- case ACPI_TYPE_FIELD_UNIT:
-
- info->field_count++;
- if (obj_desc->common.flags & AOPOBJ_DATA_VALID) {
- break;
- }
-
- info->field_init++;
- status = acpi_ds_get_field_unit_arguments (obj_desc);
-
-
- break;
-
- default:
- break;
- }
-
- /*
- * We ignore errors from above, and always return OK, since
- * we don't want to abort the walk on a single error.
- */
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_init_one_device
- *
- * PARAMETERS: WALK_CALLBACK
- *
- * RETURN: ACPI_STATUS
- *
- * DESCRIPTION: This is called once per device soon after ACPI is enabled
- * to initialize each device. It determines if the device is
- * present, and if so, calls _INI.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_init_one_device (
- ACPI_HANDLE obj_handle,
- u32 nesting_level,
- void *context,
- void **return_value)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *node;
- u32 flags;
- ACPI_DEVICE_WALK_INFO *info = (ACPI_DEVICE_WALK_INFO *) context;
-
-
-
- info->device_count++;
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- node = acpi_ns_convert_handle_to_entry (obj_handle);
- if (!node) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- /*
- * Run _STA to determine if we can run _INI on the device.
- */
-
- status = acpi_cm_execute_STA (node, &flags);
- if (ACPI_FAILURE (status)) {
- /* Ignore error and move on to next device */
-
- return (AE_OK);
- }
-
- info->num_STA++;
-
- if (!(flags & 0x01)) {
- /* don't look at children of a not present device */
- return(AE_CTRL_DEPTH);
- }
-
-
- /*
- * The device is present. Run _INI.
- */
-
- status = acpi_ns_evaluate_relative (obj_handle, "_INI", NULL, NULL);
- if (AE_NOT_FOUND == status) {
- /* No _INI means device requires no initialization */
- status = AE_OK;
- }
-
- else if (ACPI_FAILURE (status)) {
- /* Ignore error and move on to next device */
-
- }
-
- else {
- /* Count of successful INIs */
-
- info->num_INI++;
- }
-
- return (AE_OK);
-}
diff --git a/reactos/drivers/bus/acpi/namespace/nsload.c b/reactos/drivers/bus/acpi/namespace/nsload.c
deleted file mode 100644
index a74bf573d40..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsload.c
+++ /dev/null
@@ -1,521 +0,0 @@
-/******************************************************************************
- *
- * Module Name: nsload - namespace loading/expanding/contracting procedures
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsload")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_load_namespace
- *
- * PARAMETERS: Display_aml_during_load
- *
- * RETURN: Status
- *
- * DESCRIPTION: Load the name space from what ever is pointed to by DSDT.
- * (DSDT points to either the BIOS or a buffer.)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_load_namespace (
- void)
-{
- ACPI_STATUS status;
-
-
- /* There must be at least a DSDT installed */
-
- if (acpi_gbl_DSDT == NULL) {
- return (AE_NO_ACPI_TABLES);
- }
-
-
- /*
- * Load the namespace. The DSDT is required,
- * but the SSDT and PSDT tables are optional.
- */
-
- status = acpi_ns_load_table_by_type (ACPI_TABLE_DSDT);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /* Ignore exceptions from these */
-
- acpi_ns_load_table_by_type (ACPI_TABLE_SSDT);
- acpi_ns_load_table_by_type (ACPI_TABLE_PSDT);
-
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_one_parse_pass
- *
- * PARAMETERS:
- *
- * RETURN: Status
- *
- * DESCRIPTION:
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_one_complete_parse (
- u32 pass_number,
- ACPI_TABLE_DESC *table_desc)
-{
- ACPI_PARSE_DOWNWARDS descending_callback;
- ACPI_PARSE_UPWARDS ascending_callback;
- ACPI_PARSE_OBJECT *parse_root;
- ACPI_STATUS status;
-
-
- switch (pass_number) {
- case 1:
- descending_callback = acpi_ds_load1_begin_op;
- ascending_callback = acpi_ds_load1_end_op;
- break;
-
- case 2:
- descending_callback = acpi_ds_load2_begin_op;
- ascending_callback = acpi_ds_load2_end_op;
- break;
-
- case 3:
- descending_callback = acpi_ds_exec_begin_op;
- ascending_callback = acpi_ds_exec_end_op;
- break;
-
- default:
- return (AE_BAD_PARAMETER);
- }
-
- /* Create and init a Root Node */
-
- parse_root = acpi_ps_alloc_op (AML_SCOPE_OP);
- if (!parse_root) {
- return (AE_NO_MEMORY);
- }
-
- ((ACPI_PARSE2_OBJECT *) parse_root)->name = ACPI_ROOT_NAME;
-
-
- /* Pass 1: Parse everything except control method bodies */
-
- status = acpi_ps_parse_aml (parse_root, table_desc->aml_pointer,
- table_desc->aml_length,
- ACPI_PARSE_LOAD_PASS1 | ACPI_PARSE_DELETE_TREE,
- NULL, NULL, NULL, descending_callback,
- ascending_callback);
-
- acpi_ps_delete_parse_tree (parse_root);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_parse_table
- *
- * PARAMETERS: Table_desc - An ACPI table descriptor for table to parse
- * Start_node - Where to enter the table into the namespace
- *
- * RETURN: Status
- *
- * DESCRIPTION: Parse AML within an ACPI table and return a tree of ops
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_parse_table (
- ACPI_TABLE_DESC *table_desc,
- ACPI_NAMESPACE_NODE *start_node)
-{
- ACPI_STATUS status;
-
-
- /*
- * AML Parse, pass 1
- *
- * In this pass, we load most of the namespace. Control methods
- * are not parsed until later. A parse tree is not created. Instead,
- * each Parser Op subtree is deleted when it is finished. This saves
- * a great deal of memory, and allows a small cache of parse objects
- * to service the entire parse. The second pass of the parse then
- * performs another complete parse of the AML..
- */
-
- status = acpi_ns_one_complete_parse (1, table_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- /*
- * AML Parse, pass 2
- *
- * In this pass, we resolve forward references and other things
- * that could not be completed during the first pass.
- * Another complete parse of the AML is performed, but the
- * overhead of this is compensated for by the fact that the
- * parse objects are all cached.
- */
-
- status = acpi_ns_one_complete_parse (2, table_desc);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_load_table
- *
- * PARAMETERS: *Pcode_addr - Address of pcode block
- * Pcode_length - Length of pcode block
- *
- * RETURN: Status
- *
- * DESCRIPTION: Load one ACPI table into the namespace
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_load_table (
- ACPI_TABLE_DESC *table_desc,
- ACPI_NAMESPACE_NODE *node)
-{
- ACPI_STATUS status;
-
-
- if (!table_desc->aml_pointer) {
- return (AE_BAD_PARAMETER);
- }
-
-
- if (!table_desc->aml_length) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /*
- * Parse the table and load the namespace with all named
- * objects found within. Control methods are NOT parsed
- * at this time. In fact, the control methods cannot be
- * parsed until the entire namespace is loaded, because
- * if a control method makes a forward reference (call)
- * to another control method, we can't continue parsing
- * because we don't know how many arguments to parse next!
- */
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
- status = acpi_ns_parse_table (table_desc, node->child);
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- /*
- * Now we can parse the control methods. We always parse
- * them here for a sanity check, and if configured for
- * just-in-time parsing, we delete the control method
- * parse trees.
- */
-
- status = acpi_ds_initialize_objects (table_desc, node);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_load_table_by_type
- *
- * PARAMETERS: Table_type - Id of the table type to load
- *
- * RETURN: Status
- *
- * DESCRIPTION: Load an ACPI table or tables into the namespace. All tables
- * of the given type are loaded. The mechanism allows this
- * routine to be called repeatedly.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_load_table_by_type (
- ACPI_TABLE_TYPE table_type)
-{
- u32 i;
- ACPI_STATUS status = AE_OK;
- ACPI_TABLE_HEADER *table_ptr;
- ACPI_TABLE_DESC *table_desc;
-
-
- acpi_cm_acquire_mutex (ACPI_MTX_TABLES);
-
-
- /*
- * Table types supported are:
- * DSDT (one), SSDT/PSDT (multiple)
- */
-
- switch (table_type) {
-
- case ACPI_TABLE_DSDT:
-
- table_desc = &acpi_gbl_acpi_tables[ACPI_TABLE_DSDT];
-
- /* If table already loaded into namespace, just return */
-
- if (table_desc->loaded_into_namespace) {
- goto unlock_and_exit;
- }
-
- table_desc->table_id = TABLE_ID_DSDT;
-
- /* Now load the single DSDT */
-
- status = acpi_ns_load_table (table_desc, acpi_gbl_root_node);
- if (ACPI_SUCCESS (status)) {
- table_desc->loaded_into_namespace = TRUE;
- }
-
- break;
-
-
- case ACPI_TABLE_SSDT:
-
- /*
- * Traverse list of SSDT tables
- */
-
- table_desc = &acpi_gbl_acpi_tables[ACPI_TABLE_SSDT];
- for (i = 0; i < acpi_gbl_acpi_tables[ACPI_TABLE_SSDT].count; i++) {
- table_ptr = table_desc->pointer;
-
- /*
- * Only attempt to load table if it is not
- * already loaded!
- */
-
- if (!table_desc->loaded_into_namespace) {
- status = acpi_ns_load_table (table_desc, acpi_gbl_root_node);
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- table_desc->loaded_into_namespace = TRUE;
- }
-
- table_desc = table_desc->next;
- }
- break;
-
-
- case ACPI_TABLE_PSDT:
-
- /*
- * Traverse list of PSDT tables
- */
-
- table_desc = &acpi_gbl_acpi_tables[ACPI_TABLE_PSDT];
-
- for (i = 0; i < acpi_gbl_acpi_tables[ACPI_TABLE_PSDT].count; i++) {
- table_ptr = table_desc->pointer;
-
- /* Only attempt to load table if it is not already loaded! */
-
- if (!table_desc->loaded_into_namespace) {
- status = acpi_ns_load_table (table_desc, acpi_gbl_root_node);
- if (ACPI_FAILURE (status)) {
- break;
- }
-
- table_desc->loaded_into_namespace = TRUE;
- }
-
- table_desc = table_desc->next;
- }
-
- break;
-
-
- default:
- status = AE_SUPPORT;
- break;
- }
-
-
-unlock_and_exit:
-
- acpi_cm_release_mutex (ACPI_MTX_TABLES);
-
- return (status);
-
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_delete_subtree
- *
- * PARAMETERS: Start_handle - Handle in namespace where search begins
- *
- * RETURNS Status
- *
- * DESCRIPTION: Walks the namespace starting at the given handle and deletes
- * all objects, entries, and scopes in the entire subtree.
- *
- * TBD: [Investigate] What if any part of this subtree is in use?
- * (i.e. on one of the object stacks?)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_delete_subtree (
- ACPI_HANDLE start_handle)
-{
- ACPI_STATUS status;
- ACPI_HANDLE child_handle;
- ACPI_HANDLE parent_handle;
- ACPI_HANDLE next_child_handle;
- ACPI_HANDLE dummy;
- u32 level;
-
-
- parent_handle = start_handle;
- child_handle = 0;
- level = 1;
-
- /*
- * Traverse the tree of objects until we bubble back up
- * to where we started.
- */
-
- while (level > 0) {
- /* Attempt to get the next object in this scope */
-
- status = acpi_get_next_object (ACPI_TYPE_ANY, parent_handle,
- child_handle, &next_child_handle);
-
- child_handle = next_child_handle;
-
-
- /* Did we get a new object? */
-
- if (ACPI_SUCCESS (status)) {
- /* Check if this object has any children */
-
- if (ACPI_SUCCESS (acpi_get_next_object (ACPI_TYPE_ANY, child_handle,
- 0, &dummy))) {
- /*
- * There is at least one child of this object,
- * visit the object
- */
-
- level++;
- parent_handle = child_handle;
- child_handle = 0;
- }
- }
-
- else {
- /*
- * No more children in this object, go back up to
- * the object's parent
- */
- level--;
-
- /* Delete all children now */
-
- acpi_ns_delete_children (child_handle);
-
- child_handle = parent_handle;
- acpi_get_parent (parent_handle, &parent_handle);
- }
- }
-
- /* Now delete the starting object, and we are done */
-
- acpi_ns_delete_node (child_handle);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_unload_name_space
- *
- * PARAMETERS: Handle - Root of namespace subtree to be deleted
- *
- * RETURN: Status
- *
- * DESCRIPTION: Shrinks the namespace, typically in response to an undocking
- * event. Deletes an entire subtree starting from (and
- * including) the given handle.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_unload_namespace (
- ACPI_HANDLE handle)
-{
- ACPI_STATUS status;
-
-
- /* Parameter validation */
-
- if (!acpi_gbl_root_node) {
- return (AE_NO_NAMESPACE);
- }
-
- if (!handle) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* This function does the real work */
-
- status = acpi_ns_delete_subtree (handle);
-
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/namespace/nsnames.c b/reactos/drivers/bus/acpi/namespace/nsnames.c
deleted file mode 100644
index e39a344ff5d..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsnames.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: nsnames - Name manipulation and search
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsnames")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_get_table_pathname
- *
- * PARAMETERS: Node - Scope whose name is needed
- *
- * RETURN: Pointer to storage containing the fully qualified name of
- * the scope, in Label format (all segments strung together
- * with no separators)
- *
- * DESCRIPTION: Used for debug printing in Acpi_ns_search_table().
- *
- ******************************************************************************/
-
-NATIVE_CHAR *
-acpi_ns_get_table_pathname (
- ACPI_NAMESPACE_NODE *node)
-{
- NATIVE_CHAR *name_buffer;
- u32 size;
- ACPI_NAME name;
- ACPI_NAMESPACE_NODE *child_node;
- ACPI_NAMESPACE_NODE *parent_node;
-
-
- if (!acpi_gbl_root_node || !node) {
- /*
- * If the name space has not been initialized,
- * this function should not have been called.
- */
- return (NULL);
- }
-
- child_node = node->child;
-
-
- /* Calculate required buffer size based on depth below root */
-
- size = 1;
- parent_node = child_node;
- while (parent_node) {
- parent_node = acpi_ns_get_parent_object (parent_node);
- if (parent_node) {
- size += ACPI_NAME_SIZE;
- }
- }
-
-
- /* Allocate a buffer to be returned to caller */
-
- name_buffer = acpi_cm_callocate (size + 1);
- if (!name_buffer) {
- REPORT_ERROR (("Ns_get_table_pathname: allocation failure\n"));
- return (NULL);
- }
-
-
- /* Store terminator byte, then build name backwards */
-
- name_buffer[size] = '\0';
- while ((size > ACPI_NAME_SIZE) &&
- acpi_ns_get_parent_object (child_node)) {
- size -= ACPI_NAME_SIZE;
- name = acpi_ns_find_parent_name (child_node);
-
- /* Put the name into the buffer */
-
- MOVE_UNALIGNED32_TO_32 ((name_buffer + size), &name);
- child_node = acpi_ns_get_parent_object (child_node);
- }
-
- name_buffer[--size] = AML_ROOT_PREFIX;
-
-
- return (name_buffer);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_get_pathname_length
- *
- * PARAMETERS: Node - Namespace node
- *
- * RETURN: Length of path, including prefix
- *
- * DESCRIPTION: Get the length of the pathname string for this node
- *
- ******************************************************************************/
-
-u32
-acpi_ns_get_pathname_length (
- ACPI_NAMESPACE_NODE *node)
-{
- u32 size;
- ACPI_NAMESPACE_NODE *next_node;
-
- /*
- * Compute length of pathname as 5 * number of name segments.
- * Go back up the parent tree to the root
- */
- for (size = 0, next_node = node;
- acpi_ns_get_parent_object (next_node);
- next_node = acpi_ns_get_parent_object (next_node)) {
- size += PATH_SEGMENT_LENGTH;
- }
-
- /* Special case for size still 0 - no parent for "special" nodes */
-
- if (!size) {
- size = PATH_SEGMENT_LENGTH;
- }
-
- return (size + 1);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_handle_to_pathname
- *
- * PARAMETERS: Target_handle - Handle of named object whose name is
- * to be found
- * Buf_size - Size of the buffer provided
- * User_buffer - Where the pathname is returned
- *
- * RETURN: Status, Buffer is filled with pathname if status is AE_OK
- *
- * DESCRIPTION: Build and return a full namespace pathname
- *
- * MUTEX: Locks Namespace
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_handle_to_pathname (
- ACPI_HANDLE target_handle,
- u32 *buf_size,
- NATIVE_CHAR *user_buffer)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_NAMESPACE_NODE *node;
- u32 path_length;
- u32 user_buf_size;
- ACPI_NAME name;
- u32 size;
-
-
- if (!acpi_gbl_root_node || !target_handle) {
- /*
- * If the name space has not been initialized,
- * this function should not have been called.
- */
-
- return (AE_NO_NAMESPACE);
- }
-
- node = acpi_ns_convert_handle_to_entry (target_handle);
- if (!node) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* Set return length to the required path length */
-
- path_length = acpi_ns_get_pathname_length (node);
- size = path_length - 1;
-
- user_buf_size = *buf_size;
- *buf_size = path_length;
-
- /* Check if the user buffer is sufficiently large */
-
- if (path_length > user_buf_size) {
- status = AE_BUFFER_OVERFLOW;
- goto exit;
- }
-
- /* Store null terminator */
-
- user_buffer[size] = 0;
- size -= ACPI_NAME_SIZE;
-
- /* Put the original ACPI name at the end of the path */
-
- MOVE_UNALIGNED32_TO_32 ((user_buffer + size),
- &node->name);
-
- user_buffer[--size] = PATH_SEPARATOR;
-
- /* Build name backwards, putting "." between segments */
-
- while ((size > ACPI_NAME_SIZE) && node) {
- size -= ACPI_NAME_SIZE;
- name = acpi_ns_find_parent_name (node);
- MOVE_UNALIGNED32_TO_32 ((user_buffer + size), &name);
-
- user_buffer[--size] = PATH_SEPARATOR;
- node = acpi_ns_get_parent_object (node);
- }
-
- /*
- * Overlay the "." preceding the first segment with
- * the root name "\"
- */
-
- user_buffer[size] = '\\';
-
-exit:
- return (status);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/namespace/nsobject.c b/reactos/drivers/bus/acpi/namespace/nsobject.c
deleted file mode 100644
index 0a114f6e903..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsobject.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: nsobject - Utilities for objects attached to namespace
- * table entries
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsobject")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_attach_object
- *
- * PARAMETERS: Node - Parent Node
- * Object - Object to be attached
- * Type - Type of object, or ACPI_TYPE_ANY if not
- * known
- *
- * DESCRIPTION: Record the given object as the value associated with the
- * name whose ACPI_HANDLE is passed. If Object is NULL
- * and Type is ACPI_TYPE_ANY, set the name as having no value.
- *
- * MUTEX: Assumes namespace is locked
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_attach_object (
- ACPI_NAMESPACE_NODE *node,
- ACPI_OPERAND_OBJECT *object,
- OBJECT_TYPE_INTERNAL type)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_OPERAND_OBJECT *previous_obj_desc;
- OBJECT_TYPE_INTERNAL obj_type = ACPI_TYPE_ANY;
- u8 flags;
- u16 opcode;
-
-
- /*
- * Parameter validation
- */
-
- if (!acpi_gbl_root_node) {
- /* Name space not initialized */
-
- REPORT_ERROR (("Ns_attach_object: Namespace not initialized\n"));
- return (AE_NO_NAMESPACE);
- }
-
- if (!node) {
- /* Invalid handle */
-
- REPORT_ERROR (("Ns_attach_object: Null Named_obj handle\n"));
- return (AE_BAD_PARAMETER);
- }
-
- if (!object && (ACPI_TYPE_ANY != type)) {
- /* Null object */
-
- REPORT_ERROR (("Ns_attach_object: Null object, but type not ACPI_TYPE_ANY\n"));
- return (AE_BAD_PARAMETER);
- }
-
- if (!VALID_DESCRIPTOR_TYPE (node, ACPI_DESC_TYPE_NAMED)) {
- /* Not a name handle */
-
- REPORT_ERROR (("Ns_attach_object: Invalid handle\n"));
- return (AE_BAD_PARAMETER);
- }
-
- /* Check if this object is already attached */
-
- if (node->object == object) {
- return (AE_OK);
- }
-
-
- /* Get the current flags field of the Node */
-
- flags = node->flags;
- flags &= ~ANOBJ_AML_ATTACHMENT;
-
-
- /* If null object, we will just install it */
-
- if (!object) {
- obj_desc = NULL;
- obj_type = ACPI_TYPE_ANY;
- }
-
- /*
- * If the object is an Node with an attached object,
- * we will use that (attached) object
- */
-
- else if (VALID_DESCRIPTOR_TYPE (object, ACPI_DESC_TYPE_NAMED) &&
- ((ACPI_NAMESPACE_NODE *) object)->object) {
- /*
- * Value passed is a name handle and that name has a
- * non-null value. Use that name's value and type.
- */
-
- obj_desc = ((ACPI_NAMESPACE_NODE *) object)->object;
- obj_type = ((ACPI_NAMESPACE_NODE *) object)->type;
-
- /*
- * Copy appropriate flags
- */
-
- if (((ACPI_NAMESPACE_NODE *) object)->flags & ANOBJ_AML_ATTACHMENT) {
- flags |= ANOBJ_AML_ATTACHMENT;
- }
- }
-
-
- /*
- * Otherwise, we will use the parameter object, but we must type
- * it first
- */
-
- else {
- obj_desc = (ACPI_OPERAND_OBJECT *) object;
-
-
- /* If a valid type (non-ANY) was given, just use it */
-
- if (ACPI_TYPE_ANY != type) {
- obj_type = type;
- }
-
-
- /*
- * Type is TYPE_Any, we must try to determinte the
- * actual type of the object
- */
-
- /*
- * Check if value points into the AML code
- */
- else if (acpi_tb_system_table_pointer (object)) {
- /*
- * Object points into the AML stream.
- * Set a flag bit in the Node to indicate this
- */
-
- flags |= ANOBJ_AML_ATTACHMENT;
-
- /*
- * The next byte (perhaps the next two bytes)
- * will be the AML opcode
- */
-
- MOVE_UNALIGNED16_TO_16 (&opcode, object);
-
- /* Check for a recognized Opcode */
-
- switch (opcode) {
-
- case AML_OP_PREFIX:
-
- if (opcode != AML_REVISION_OP) {
- /*
- * Op_prefix is unrecognized unless part
- * of Revision_op
- */
-
- break;
- }
-
- /* Else fall through to set type as Number */
-
-
- case AML_ZERO_OP: case AML_ONES_OP: case AML_ONE_OP:
- case AML_BYTE_OP: case AML_WORD_OP: case AML_DWORD_OP:
-
- obj_type = ACPI_TYPE_INTEGER;
- break;
-
-
- case AML_STRING_OP:
-
- obj_type = ACPI_TYPE_STRING;
- break;
-
-
- case AML_BUFFER_OP:
-
- obj_type = ACPI_TYPE_BUFFER;
- break;
-
-
- case AML_MUTEX_OP:
-
- obj_type = ACPI_TYPE_MUTEX;
- break;
-
-
- case AML_PACKAGE_OP:
-
- obj_type = ACPI_TYPE_PACKAGE;
- break;
-
-
- default:
-
- return (AE_TYPE);
- break;
- }
- }
-
- else {
- /*
- * Cannot figure out the type -- set to Def_any which
- * will print as an error in the name table dump
- */
-
-
- obj_type = INTERNAL_TYPE_DEF_ANY;
- }
- }
-
-
- /*
- * Must increment the new value's reference count
- * (if it is an internal object)
- */
-
- acpi_cm_add_reference (obj_desc);
-
- /* Save the existing object (if any) for deletion later */
-
- previous_obj_desc = node->object;
-
- /* Install the object and set the type, flags */
-
- node->object = obj_desc;
- node->type = (u8) obj_type;
- node->flags |= flags;
-
-
- /*
- * Delete an existing attached object.
- */
-
- if (previous_obj_desc) {
- /* One for the attach to the Node */
-
- acpi_cm_remove_reference (previous_obj_desc);
-
- /* Now delete */
-
- acpi_cm_remove_reference (previous_obj_desc);
- }
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_detach_object
- *
- * PARAMETERS: Node - An object whose Value will be deleted
- *
- * RETURN: None.
- *
- * DESCRIPTION: Delete the Value associated with a namespace object. If the
- * Value is an allocated object, it is freed. Otherwise, the
- * field is simply cleared.
- *
- ******************************************************************************/
-
-void
-acpi_ns_detach_object (
- ACPI_NAMESPACE_NODE *node)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
-
-
- obj_desc = node->object;
- if (!obj_desc) {
- return;
- }
-
- /* Clear the entry in all cases */
-
- node->object = NULL;
-
- /* Found a valid value */
-
- /*
- * Not every value is an object allocated via Acpi_cm_callocate,
- * - must check
- */
-
- if (!acpi_tb_system_table_pointer (obj_desc)) {
- /* Attempt to delete the object (and all subobjects) */
-
- acpi_cm_remove_reference (obj_desc);
- }
-
- return;
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_get_attached_object
- *
- * PARAMETERS: Handle - Parent Node to be examined
- *
- * RETURN: Current value of the object field from the Node whose
- * handle is passed
- *
- ******************************************************************************/
-
-void *
-acpi_ns_get_attached_object (
- ACPI_HANDLE handle)
-{
-
- if (!handle) {
- /* handle invalid */
-
- return (NULL);
- }
-
- return (((ACPI_NAMESPACE_NODE *) handle)->object);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/namespace/nssearch.c b/reactos/drivers/bus/acpi/namespace/nssearch.c
deleted file mode 100644
index 53d6f19568b..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nssearch.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: nssearch - Namespace search
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nssearch")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_search_node
- *
- * PARAMETERS: *Target_name - Ascii ACPI name to search for
- * *Node - Starting table where search will begin
- * Type - Object type to match
- * **Return_node - Where the matched Named obj is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Search a single namespace table. Performs a simple search,
- * does not add entries or search parents.
- *
- *
- * Named object lists are built (and subsequently dumped) in the
- * order in which the names are encountered during the namespace load;
- *
- * All namespace searching is linear in this implementation, but
- * could be easily modified to support any improved search
- * algorithm. However, the linear search was chosen for simplicity
- * and because the trees are small and the other interpreter
- * execution overhead is relatively high.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_search_node (
- u32 target_name,
- ACPI_NAMESPACE_NODE *node,
- OBJECT_TYPE_INTERNAL type,
- ACPI_NAMESPACE_NODE **return_node)
-{
- ACPI_NAMESPACE_NODE *next_node;
-
-
- /*
- * Search for name in this table, which is to say that we must search
- * for the name among the children of this object
- */
-
- next_node = node->child;
- while (next_node) {
- /* Check for match against the name */
-
- if (next_node->name == target_name) {
- /*
- * Found matching entry. Capture the type if appropriate, before
- * returning the entry.
- *
- * The Def_field_defn and Bank_field_defn cases are actually looking up
- * the Region in which the field will be defined
- */
-
- if ((INTERNAL_TYPE_DEF_FIELD_DEFN == type) ||
- (INTERNAL_TYPE_BANK_FIELD_DEFN == type)) {
- type = ACPI_TYPE_REGION;
- }
-
- /*
- * Scope, Def_any, and Index_field_defn are bogus "types" which do not
- * actually have anything to do with the type of the name being
- * looked up. For any other value of Type, if the type stored in
- * the entry is Any (i.e. unknown), save the actual type.
- */
-
- if (type != INTERNAL_TYPE_SCOPE &&
- type != INTERNAL_TYPE_DEF_ANY &&
- type != INTERNAL_TYPE_INDEX_FIELD_DEFN &&
- next_node->type == ACPI_TYPE_ANY) {
- next_node->type = (u8) type;
- }
-
- *return_node = next_node;
- return (AE_OK);
- }
-
-
- /*
- * The last entry in the list points back to the parent,
- * so a flag is used to indicate the end-of-list
- */
- if (next_node->flags & ANOBJ_END_OF_PEER_LIST) {
- /* Searched entire list, we are done */
-
- break;
- }
-
- /* Didn't match name, move on to the next peer object */
-
- next_node = next_node->peer;
- }
-
-
- /* Searched entire table, not found */
-
-
- return (AE_NOT_FOUND);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_search_parent_tree
- *
- * PARAMETERS: *Target_name - Ascii ACPI name to search for
- * *Node - Starting table where search will begin
- * Type - Object type to match
- * **Return_node - Where the matched Named Obj is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Called when a name has not been found in the current namespace
- * table. Before adding it or giving up, ACPI scope rules require
- * searching enclosing scopes in cases identified by Acpi_ns_local().
- *
- * "A name is located by finding the matching name in the current
- * name space, and then in the parent name space. If the parent
- * name space does not contain the name, the search continues
- * recursively until either the name is found or the name space
- * does not have a parent (the root of the name space). This
- * indicates that the name is not found" (From ACPI Specification,
- * section 5.3)
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-acpi_ns_search_parent_tree (
- u32 target_name,
- ACPI_NAMESPACE_NODE *node,
- OBJECT_TYPE_INTERNAL type,
- ACPI_NAMESPACE_NODE **return_node)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *parent_node;
-
-
- parent_node = acpi_ns_get_parent_object (node);
-
- /*
- * If there is no parent (at the root) or type is "local", we won't be
- * searching the parent tree.
- */
- if ((acpi_ns_local (type)) ||
- (!parent_node)) {
-
-
- return (AE_NOT_FOUND);
- }
-
-
- /* Search the parent tree */
-
- /*
- * Search parents until found the target or we have backed up to
- * the root
- */
-
- while (parent_node) {
- /* Search parent scope */
- /* TBD: [Investigate] Why ACPI_TYPE_ANY? */
-
- status = acpi_ns_search_node (target_name, parent_node,
- ACPI_TYPE_ANY, return_node);
-
- if (ACPI_SUCCESS (status)) {
- return (status);
- }
-
- /*
- * Not found here, go up another level
- * (until we reach the root)
- */
-
- parent_node = acpi_ns_get_parent_object (parent_node);
- }
-
-
- /* Not found in parent tree */
-
- return (AE_NOT_FOUND);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_search_and_enter
- *
- * PARAMETERS: Target_name - Ascii ACPI name to search for (4 chars)
- * Walk_state - Current state of the walk
- * *Node - Starting table where search will begin
- * Interpreter_mode - Add names only in MODE_Load_pass_x.
- * Otherwise,search only.
- * Type - Object type to match
- * Flags - Flags describing the search restrictions
- * **Return_node - Where the Node is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Search for a name segment in a single name table,
- * optionally adding it if it is not found. If the passed
- * Type is not Any and the type previously stored in the
- * entry was Any (i.e. unknown), update the stored type.
- *
- * In IMODE_EXECUTE, search only.
- * In other modes, search and add if not found.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_search_and_enter (
- u32 target_name,
- ACPI_WALK_STATE *walk_state,
- ACPI_NAMESPACE_NODE *node,
- OPERATING_MODE interpreter_mode,
- OBJECT_TYPE_INTERNAL type,
- u32 flags,
- ACPI_NAMESPACE_NODE **return_node)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *new_node;
-
-
- /* Parameter validation */
-
- if (!node || !target_name || !return_node) {
- REPORT_ERROR (("Ns_search_and_enter: bad (null) parameter\n"));
- return (AE_BAD_PARAMETER);
- }
-
-
- /* Name must consist of printable characters */
-
- if (!acpi_cm_valid_acpi_name (target_name)) {
- REPORT_ERROR (("Ns_search_and_enter: Bad character in ACPI Name\n"));
- return (AE_BAD_CHARACTER);
- }
-
-
- /* Try to find the name in the table specified by the caller */
-
- *return_node = ENTRY_NOT_FOUND;
- status = acpi_ns_search_node (target_name, node,
- type, return_node);
- if (status != AE_NOT_FOUND) {
- /*
- * If we found it AND the request specifies that a find is an error,
- * return the error
- */
- if ((status == AE_OK) &&
- (flags & NS_ERROR_IF_FOUND)) {
- status = AE_EXIST;
- }
-
- /*
- * Either found it or there was an error
- * -- finished either way
- */
- return (status);
- }
-
-
- /*
- * Not found in the table. If we are NOT performing the
- * first pass (name entry) of loading the namespace, search
- * the parent tree (all the way to the root if necessary.)
- * We don't want to perform the parent search when the
- * namespace is actually being loaded. We want to perform
- * the search when namespace references are being resolved
- * (load pass 2) and during the execution phase.
- */
-
- if ((interpreter_mode != IMODE_LOAD_PASS1) &&
- (flags & NS_SEARCH_PARENT)) {
- /*
- * Not found in table - search parent tree according
- * to ACPI specification
- */
-
- status = acpi_ns_search_parent_tree (target_name, node,
- type, return_node);
- if (ACPI_SUCCESS (status)) {
- return (status);
- }
- }
-
-
- /*
- * In execute mode, just search, never add names. Exit now.
- */
- if (interpreter_mode == IMODE_EXECUTE) {
- return (AE_NOT_FOUND);
- }
-
-
- /* Create the new named object */
-
- new_node = acpi_ns_create_node (target_name);
- if (!new_node) {
- return (AE_NO_MEMORY);
- }
-
- /* Install the new object into the parent's list of children */
-
- acpi_ns_install_node (walk_state, node, new_node, type);
- *return_node = new_node;
-
- return (AE_OK);
-}
-
diff --git a/reactos/drivers/bus/acpi/namespace/nsutils.c b/reactos/drivers/bus/acpi/namespace/nsutils.c
deleted file mode 100644
index 268352075b8..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsutils.c
+++ /dev/null
@@ -1,811 +0,0 @@
-/******************************************************************************
- *
- * Module Name: nsutils - Utilities for accessing ACPI namespace, accessing
- * parents and siblings and Scope manipulation
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsutils")
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_valid_root_prefix
- *
- * PARAMETERS: Prefix - Character to be checked
- *
- * RETURN: TRUE if a valid prefix
- *
- * DESCRIPTION: Check if a character is a valid ACPI Root prefix
- *
- ***************************************************************************/
-
-u8
-acpi_ns_valid_root_prefix (
- NATIVE_CHAR prefix)
-{
-
- return ((u8) (prefix == '\\'));
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_valid_path_separator
- *
- * PARAMETERS: Sep - Character to be checked
- *
- * RETURN: TRUE if a valid path separator
- *
- * DESCRIPTION: Check if a character is a valid ACPI path separator
- *
- ***************************************************************************/
-
-u8
-acpi_ns_valid_path_separator (
- NATIVE_CHAR sep)
-{
-
- return ((u8) (sep == '.'));
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_get_type
- *
- * PARAMETERS: Handle - Parent Node to be examined
- *
- * RETURN: Type field from Node whose handle is passed
- *
- ***************************************************************************/
-
-OBJECT_TYPE_INTERNAL
-acpi_ns_get_type (
- ACPI_HANDLE handle)
-{
-
- if (!handle) {
- REPORT_WARNING (("Ns_get_type: Null handle\n"));
- return (ACPI_TYPE_ANY);
- }
-
- return (((ACPI_NAMESPACE_NODE *) handle)->type);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_local
- *
- * PARAMETERS: Type - A namespace object type
- *
- * RETURN: LOCAL if names must be found locally in objects of the
- * passed type, 0 if enclosing scopes should be searched
- *
- ***************************************************************************/
-
-u32
-acpi_ns_local (
- OBJECT_TYPE_INTERNAL type)
-{
-
- if (!acpi_cm_valid_object_type (type)) {
- /* Type code out of range */
-
- REPORT_WARNING (("Ns_local: Invalid Object Type\n"));
- return (NSP_NORMAL);
- }
-
- return ((u32) acpi_gbl_ns_properties[type] & NSP_LOCAL);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_internalize_name
- *
- * PARAMETERS: *External_name - External representation of name
- * **Converted Name - Where to return the resulting
- * internal represention of the name
- *
- * RETURN: Status
- *
- * DESCRIPTION: Convert an external representation (e.g. "\_PR_.CPU0")
- * to internal form (e.g. 5c 2f 02 5f 50 52 5f 43 50 55 30)
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ns_internalize_name (
- NATIVE_CHAR *external_name,
- NATIVE_CHAR **converted_name)
-{
- NATIVE_CHAR *result = NULL;
- NATIVE_CHAR *internal_name;
- u32 num_segments = 0;
- u8 fully_qualified = FALSE;
- u32 i;
- u32 num_carats = 0;
-
-
- if ((!external_name) ||
- (*external_name == 0) ||
- (!converted_name)) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /*
- * For the internal name, the required length is 4 bytes
- * per segment, plus 1 each for Root_prefix, Multi_name_prefix_op,
- * segment count, trailing null (which is not really needed,
- * but no there's harm in putting it there)
- *
- * strlen() + 1 covers the first Name_seg, which has no
- * path separator
- */
-
- if (acpi_ns_valid_root_prefix (external_name[0])) {
- fully_qualified = TRUE;
- external_name++;
- }
-
- else {
- /*
- * Handle Carat prefixes
- */
-
- while (*external_name == '^') {
- num_carats++;
- external_name++;
- }
- }
-
- /*
- * Determine the number of ACPI name "segments" by counting
- * the number of path separators within the string. Start
- * with one segment since the segment count is (# separators)
- * + 1, and zero separators is ok.
- */
-
- if (*external_name) {
- num_segments = 1;
- for (i = 0; external_name[i]; i++) {
- if (acpi_ns_valid_path_separator (external_name[i])) {
- num_segments++;
- }
- }
- }
-
-
- /* We need a segment to store the internal version of the name */
-
- internal_name = acpi_cm_callocate ((ACPI_NAME_SIZE * num_segments) + 4 + num_carats);
- if (!internal_name) {
- return (AE_NO_MEMORY);
- }
-
-
- /* Setup the correct prefixes, counts, and pointers */
-
- if (fully_qualified) {
- internal_name[0] = '\\';
-
- if (num_segments <= 1) {
- result = &internal_name[1];
- }
- else if (num_segments == 2) {
- internal_name[1] = AML_DUAL_NAME_PREFIX;
- result = &internal_name[2];
- }
- else {
- internal_name[1] = AML_MULTI_NAME_PREFIX_OP;
- internal_name[2] = (char) num_segments;
- result = &internal_name[3];
- }
-
- }
-
- else {
- /*
- * Not fully qualified.
- * Handle Carats first, then append the name segments
- */
-
- i = 0;
- if (num_carats) {
- for (i = 0; i < num_carats; i++) {
- internal_name[i] = '^';
- }
- }
-
- if (num_segments == 1) {
- result = &internal_name[i];
- }
-
- else if (num_segments == 2) {
- internal_name[i] = AML_DUAL_NAME_PREFIX;
- result = &internal_name[i+1];
- }
-
- else {
- internal_name[i] = AML_MULTI_NAME_PREFIX_OP;
- internal_name[i+1] = (char) num_segments;
- result = &internal_name[i+2];
- }
- }
-
-
- /* Build the name (minus path separators) */
-
- for (; num_segments; num_segments--) {
- for (i = 0; i < ACPI_NAME_SIZE; i++) {
- if (acpi_ns_valid_path_separator (*external_name) ||
- (*external_name == 0)) {
- /*
- * Pad the segment with underscore(s) if
- * segment is short
- */
-
- result[i] = '_';
- }
-
- else {
- /* Convert s8 to uppercase and save it */
-
- result[i] = (char) TOUPPER (*external_name);
- external_name++;
- }
-
- }
-
- /* Now we must have a path separator, or the pathname is bad */
-
- if (!acpi_ns_valid_path_separator (*external_name) &&
- (*external_name != 0)) {
- acpi_cm_free (internal_name);
- return (AE_BAD_PARAMETER);
- }
-
- /* Move on the next segment */
-
- external_name++;
- result += ACPI_NAME_SIZE;
- }
-
-
- /* Return the completed name */
-
- /* Terminate the string! */
- *result = 0;
- *converted_name = internal_name;
-
-
-
- return (AE_OK);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_externalize_name
- *
- * PARAMETERS: *Internal_name - Internal representation of name
- * **Converted_name - Where to return the resulting
- * external representation of name
- *
- * RETURN: Status
- *
- * DESCRIPTION: Convert internal name (e.g. 5c 2f 02 5f 50 52 5f 43 50 55 30)
- * to its external form (e.g. "\_PR_.CPU0")
- *
- ****************************************************************************/
-
-ACPI_STATUS
-acpi_ns_externalize_name (
- u32 internal_name_length,
- char *internal_name,
- u32 *converted_name_length,
- char **converted_name)
-{
- u32 prefix_length = 0;
- u32 names_index = 0;
- u32 names_count = 0;
- u32 i = 0;
- u32 j = 0;
-
-
- if (!internal_name_length ||
- !internal_name ||
- !converted_name_length ||
- !converted_name) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /*
- * Check for a prefix (one '\' | one or more '^').
- */
- switch (internal_name[0]) {
- case '\\':
- prefix_length = 1;
- break;
-
- case '^':
- for (i = 0; i < internal_name_length; i++) {
- if (internal_name[i] != '^') {
- prefix_length = i + 1;
- }
- }
-
- if (i == internal_name_length) {
- prefix_length = i;
- }
-
- break;
- }
-
- /*
- * Check for object names. Note that there could be 0-255 of these
- * 4-byte elements.
- */
- if (prefix_length < internal_name_length) {
- switch (internal_name[prefix_length]) {
-
- /* 4-byte names */
-
- case AML_MULTI_NAME_PREFIX_OP:
- names_index = prefix_length + 2;
- names_count = (u32) internal_name[prefix_length + 1];
- break;
-
-
- /* two 4-byte names */
-
- case AML_DUAL_NAME_PREFIX:
- names_index = prefix_length + 1;
- names_count = 2;
- break;
-
-
- /* Null_name */
-
- case 0:
- names_index = 0;
- names_count = 0;
- break;
-
-
- /* one 4-byte name */
-
- default:
- names_index = prefix_length;
- names_count = 1;
- break;
- }
- }
-
- /*
- * Calculate the length of Converted_name, which equals the length
- * of the prefix, length of all object names, length of any required
- * punctuation ('.') between object names, plus the NULL terminator.
- */
- *converted_name_length = prefix_length + (4 * names_count) +
- ((names_count > 0) ? (names_count - 1) : 0) + 1;
-
- /*
- * Check to see if we're still in bounds. If not, there's a problem
- * with Internal_name (invalid format).
- */
- if (*converted_name_length > internal_name_length) {
- REPORT_ERROR (("Ns_externalize_name: Invalid internal name\n"));
- return (AE_BAD_PATHNAME);
- }
-
- /*
- * Build Converted_name...
- */
-
- (*converted_name) = acpi_cm_callocate (*converted_name_length);
- if (!(*converted_name)) {
- return (AE_NO_MEMORY);
- }
-
- j = 0;
-
- for (i = 0; i < prefix_length; i++) {
- (*converted_name)[j++] = internal_name[i];
- }
-
- if (names_count > 0) {
- for (i = 0; i < names_count; i++) {
- if (i > 0) {
- (*converted_name)[j++] = '.';
- }
-
- (*converted_name)[j++] = internal_name[names_index++];
- (*converted_name)[j++] = internal_name[names_index++];
- (*converted_name)[j++] = internal_name[names_index++];
- (*converted_name)[j++] = internal_name[names_index++];
- }
- }
-
- return (AE_OK);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_convert_handle_to_entry
- *
- * PARAMETERS: Handle - Handle to be converted to an Node
- *
- * RETURN: A Name table entry pointer
- *
- * DESCRIPTION: Convert a namespace handle to a real Node
- *
- ****************************************************************************/
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_convert_handle_to_entry (
- ACPI_HANDLE handle)
-{
-
- /*
- * Simple implementation for now;
- * TBD: [Future] Real integer handles allow for more verification
- * and keep all pointers within this subsystem!
- */
-
- if (!handle) {
- return (NULL);
- }
-
- if (handle == ACPI_ROOT_OBJECT) {
- return (acpi_gbl_root_node);
- }
-
-
- /* We can at least attempt to verify the handle */
-
- if (!VALID_DESCRIPTOR_TYPE (handle, ACPI_DESC_TYPE_NAMED)) {
- return (NULL);
- }
-
- return ((ACPI_NAMESPACE_NODE *) handle);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_convert_entry_to_handle
- *
- * PARAMETERS: Node - Node to be converted to a Handle
- *
- * RETURN: An USER ACPI_HANDLE
- *
- * DESCRIPTION: Convert a real Node to a namespace handle
- *
- ****************************************************************************/
-
-ACPI_HANDLE
-acpi_ns_convert_entry_to_handle (
- ACPI_NAMESPACE_NODE *node)
-{
-
-
- /*
- * Simple implementation for now;
- * TBD: [Future] Real integer handles allow for more verification
- * and keep all pointers within this subsystem!
- */
-
- return ((ACPI_HANDLE) node);
-
-
-/* ---------------------------------------------------
-
- if (!Node)
- {
- return (NULL);
- }
-
- if (Node == Acpi_gbl_Root_node)
- {
- return (ACPI_ROOT_OBJECT);
- }
-
-
- return ((ACPI_HANDLE) Node);
-------------------------------------------------------*/
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ns_terminate
- *
- * PARAMETERS: none
- *
- * RETURN: none
- *
- * DESCRIPTION: free memory allocated for table storage.
- *
- ******************************************************************************/
-
-void
-acpi_ns_terminate (void)
-{
- ACPI_OPERAND_OBJECT *obj_desc;
- ACPI_NAMESPACE_NODE *this_node;
-
-
- this_node = acpi_gbl_root_node;
-
- /*
- * 1) Free the entire namespace -- all objects, tables, and stacks
- */
- /*
- * Delete all objects linked to the root
- * (additional table descriptors)
- */
-
- acpi_ns_delete_namespace_subtree (this_node);
-
- /* Detach any object(s) attached to the root */
-
- obj_desc = acpi_ns_get_attached_object (this_node);
- if (obj_desc) {
- acpi_ns_detach_object (this_node);
- acpi_cm_remove_reference (obj_desc);
- }
-
- acpi_ns_delete_children (this_node);
-
-
- /*
- * 2) Now we can delete the ACPI tables
- */
-
- acpi_tb_delete_acpi_tables ();
-
- return;
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_opens_scope
- *
- * PARAMETERS: Type - A valid namespace type
- *
- * RETURN: NEWSCOPE if the passed type "opens a name scope" according
- * to the ACPI specification, else 0
- *
- ***************************************************************************/
-
-u32
-acpi_ns_opens_scope (
- OBJECT_TYPE_INTERNAL type)
-{
-
- if (!acpi_cm_valid_object_type (type)) {
- /* type code out of range */
-
- REPORT_WARNING (("Ns_opens_scope: Invalid Object Type\n"));
- return (NSP_NORMAL);
- }
-
- return (((u32) acpi_gbl_ns_properties[type]) & NSP_NEWSCOPE);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_get_node
- *
- * PARAMETERS: *Pathname - Name to be found, in external (ASL) format. The
- * \ (backslash) and ^ (carat) prefixes, and the
- * . (period) to separate segments are supported.
- * Start_node - Root of subtree to be searched, or NS_ALL for the
- * root of the name space. If Name is fully
- * qualified (first s8 is '\'), the passed value
- * of Scope will not be accessed.
- * Return_node - Where the Node is returned
- *
- * DESCRIPTION: Look up a name relative to a given scope and return the
- * corresponding Node. NOTE: Scope can be null.
- *
- * MUTEX: Locks namespace
- *
- ***************************************************************************/
-
-ACPI_STATUS
-acpi_ns_get_node (
- NATIVE_CHAR *pathname,
- ACPI_NAMESPACE_NODE *start_node,
- ACPI_NAMESPACE_NODE **return_node)
-{
- ACPI_GENERIC_STATE scope_info;
- ACPI_STATUS status;
- NATIVE_CHAR *internal_path = NULL;
-
-
- /* Ensure that the namespace has been initialized */
-
- if (!acpi_gbl_root_node) {
- return (AE_NO_NAMESPACE);
- }
-
- if (!pathname) {
- return (AE_BAD_PARAMETER);
- }
-
-
- /* Convert path to internal representation */
-
- status = acpi_ns_internalize_name (pathname, &internal_path);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* Setup lookup scope (search starting point) */
-
- scope_info.scope.node = start_node;
-
- /* Lookup the name in the namespace */
-
- status = acpi_ns_lookup (&scope_info, internal_path,
- ACPI_TYPE_ANY, IMODE_EXECUTE,
- NS_NO_UPSEARCH | NS_DONT_OPEN_SCOPE,
- NULL, return_node);
-
-
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- /* Cleanup */
-
- acpi_cm_free (internal_path);
-
- return (status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_find_parent_name
- *
- * PARAMETERS: *Child_node - Named Obj whose name is to be found
- *
- * RETURN: The ACPI name
- *
- * DESCRIPTION: Search for the given obj in its parent scope and return the
- * name segment, or "????" if the parent name can't be found
- * (which "should not happen").
- *
- ***************************************************************************/
-
-ACPI_NAME
-acpi_ns_find_parent_name (
- ACPI_NAMESPACE_NODE *child_node)
-{
- ACPI_NAMESPACE_NODE *parent_node;
-
-
- if (child_node) {
- /* Valid entry. Get the parent Node */
-
- parent_node = acpi_ns_get_parent_object (child_node);
- if (parent_node) {
- if (parent_node->name) {
- return (parent_node->name);
- }
- }
-
- }
-
-
- return (ACPI_UNKNOWN_NAME);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_get_parent_object
- *
- * PARAMETERS: Node - Current table entry
- *
- * RETURN: Parent entry of the given entry
- *
- * DESCRIPTION: Obtain the parent entry for a given entry in the namespace.
- *
- ***************************************************************************/
-
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_get_parent_object (
- ACPI_NAMESPACE_NODE *node)
-{
-
-
- if (!node) {
- return (NULL);
- }
-
- /*
- * Walk to the end of this peer list.
- * The last entry is marked with a flag and the peer
- * pointer is really a pointer back to the parent.
- * This saves putting a parent back pointer in each and
- * every named object!
- */
-
- while (!(node->flags & ANOBJ_END_OF_PEER_LIST)) {
- node = node->peer;
- }
-
-
- return (node->peer);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_ns_get_next_valid_object
- *
- * PARAMETERS: Node - Current table entry
- *
- * RETURN: Next valid object in the table. NULL if no more valid
- * objects
- *
- * DESCRIPTION: Find the next valid object within a name table.
- * Useful for implementing NULL-end-of-list loops.
- *
- ***************************************************************************/
-
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_get_next_valid_object (
- ACPI_NAMESPACE_NODE *node)
-{
-
- /* If we are at the end of this peer list, return NULL */
-
- if (node->flags & ANOBJ_END_OF_PEER_LIST) {
- return NULL;
- }
-
- /* Otherwise just return the next peer */
-
- return (node->peer);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/namespace/nswalk.c b/reactos/drivers/bus/acpi/namespace/nswalk.c
deleted file mode 100644
index ddfdecdc97c..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nswalk.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/******************************************************************************
- *
- * Module Name: nswalk - Functions for walking the APCI namespace
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nswalk")
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_get_next_object
- *
- * PARAMETERS: Type - Type of object to be searched for
- * Parent - Parent object whose children we are
- * getting
- * Last_child - Previous child that was found.
- * The NEXT child will be returned
- *
- * RETURN: ACPI_NAMESPACE_NODE - Pointer to the NEXT child or NULL if
- * none is found.
- *
- * DESCRIPTION: Return the next peer object within the namespace. If Handle
- * is valid, Scope is ignored. Otherwise, the first object
- * within Scope is returned.
- *
- ****************************************************************************/
-
-ACPI_NAMESPACE_NODE *
-acpi_ns_get_next_object (
- OBJECT_TYPE_INTERNAL type,
- ACPI_NAMESPACE_NODE *parent_node,
- ACPI_NAMESPACE_NODE *child_node)
-{
- ACPI_NAMESPACE_NODE *next_node = NULL;
-
-
- if (!child_node) {
-
- /* It's really the parent's _scope_ that we want */
-
- if (parent_node->child) {
- next_node = parent_node->child;
- }
- }
-
- else {
- /* Start search at the NEXT object */
-
- next_node = acpi_ns_get_next_valid_object (child_node);
- }
-
-
- /* If any type is OK, we are done */
-
- if (type == ACPI_TYPE_ANY) {
- /* Next_node is NULL if we are at the end-of-list */
-
- return (next_node);
- }
-
-
- /* Must search for the object -- but within this scope only */
-
- while (next_node) {
- /* If type matches, we are done */
-
- if (next_node->type == type) {
- return (next_node);
- }
-
- /* Otherwise, move on to the next object */
-
- next_node = acpi_ns_get_next_valid_object (next_node);
- }
-
-
- /* Not found */
-
- return (NULL);
-}
-
-
-/******************************************************************************
- *
- * FUNCTION: Acpi_ns_walk_namespace
- *
- * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for
- * Start_node - Handle in namespace where search begins
- * Max_depth - Depth to which search is to reach
- * Unlock_before_callback- Whether to unlock the NS before invoking
- * the callback routine
- * User_function - Called when an object of "Type" is found
- * Context - Passed to user function
- *
- * RETURNS Return value from the User_function if terminated early.
- * Otherwise, returns NULL.
- *
- * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
- * starting (and ending) at the object specified by Start_handle.
- * The User_function is called whenever an object that matches
- * the type parameter is found. If the user function returns
- * a non-zero value, the search is terminated immediately and this
- * value is returned to the caller.
- *
- * The point of this procedure is to provide a generic namespace
- * walk routine that can be called from multiple places to
- * provide multiple services; the User Function can be tailored
- * to each task, whether it is a print function, a compare
- * function, etc.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_ns_walk_namespace (
- OBJECT_TYPE_INTERNAL type,
- ACPI_HANDLE start_node,
- u32 max_depth,
- u8 unlock_before_callback,
- WALK_CALLBACK user_function,
- void *context,
- void **return_value)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *child_node;
- ACPI_NAMESPACE_NODE *parent_node;
- OBJECT_TYPE_INTERNAL child_type;
- u32 level;
-
-
- /* Special case for the namespace Root Node */
-
- if (start_node == ACPI_ROOT_OBJECT) {
- start_node = acpi_gbl_root_node;
- }
-
-
- /* Null child means "get first object" */
-
- parent_node = start_node;
- child_node = 0;
- child_type = ACPI_TYPE_ANY;
- level = 1;
-
- /*
- * Traverse the tree of objects until we bubble back up to where we
- * started. When Level is zero, the loop is done because we have
- * bubbled up to (and passed) the original parent handle (Start_entry)
- */
-
- while (level > 0) {
- /*
- * Get the next typed object in this scope. Null returned
- * if not found
- */
-
- status = AE_OK;
- child_node = acpi_ns_get_next_object (ACPI_TYPE_ANY,
- parent_node,
- child_node);
-
- if (child_node) {
- /*
- * Found an object, Get the type if we are not
- * searching for ANY
- */
-
- if (type != ACPI_TYPE_ANY) {
- child_type = child_node->type;
- }
-
- if (child_type == type) {
- /*
- * Found a matching object, invoke the user
- * callback function
- */
-
- if (unlock_before_callback) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- }
-
- status = user_function (child_node, level,
- context, return_value);
-
- if (unlock_before_callback) {
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
- }
-
- switch (status) {
- case AE_OK:
- case AE_CTRL_DEPTH:
- /* Just keep going */
- break;
-
- case AE_CTRL_TERMINATE:
- /* Exit now, with OK status */
- return (AE_OK);
- break;
-
- default:
- /* All others are valid exceptions */
- return (status);
- break;
- }
- }
-
- /*
- * Depth first search:
- * Attempt to go down another level in the namespace
- * if we are allowed to. Don't go any further if we
- * have reached the caller specified maximum depth
- * or if the user function has specified that the
- * maximum depth has been reached.
- */
-
- if ((level < max_depth) && (status != AE_CTRL_DEPTH)) {
- if (acpi_ns_get_next_object (ACPI_TYPE_ANY,
- child_node, 0)) {
- /*
- * There is at least one child of this
- * object, visit the object
- */
- level++;
- parent_node = child_node;
- child_node = 0;
- }
- }
- }
-
- else {
- /*
- * No more children in this object (Acpi_ns_get_next_object
- * failed), go back upwards in the namespace tree to
- * the object's parent.
- */
- level--;
- child_node = parent_node;
- parent_node = acpi_ns_get_parent_object (parent_node);
- }
- }
-
- /* Complete walk, not terminated by user function */
- return (AE_OK);
-}
-
-
diff --git a/reactos/drivers/bus/acpi/namespace/nsxfname.c b/reactos/drivers/bus/acpi/namespace/nsxfname.c
deleted file mode 100644
index 780919c4a63..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsxfname.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/******************************************************************************
- *
- * Module Name: nsxfname - Public interfaces to the ACPI subsystem
- * ACPI Namespace oriented interfaces
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsxfname")
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_get_handle
- *
- * PARAMETERS: Parent - Object to search under (search scope).
- * Path_name - Pointer to an asciiz string containing the
- * name
- * Ret_handle - Where the return handle is placed
- *
- * RETURN: Status
- *
- * DESCRIPTION: This routine will search for a caller specified name in the
- * name space. The caller can restrict the search region by
- * specifying a non NULL parent. The parent value is itself a
- * namespace handle.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_handle (
- ACPI_HANDLE parent,
- ACPI_STRING pathname,
- ACPI_HANDLE *ret_handle)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *node = NULL;
- ACPI_NAMESPACE_NODE *prefix_node = NULL;
-
-
- if (!ret_handle || !pathname) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Convert a parent handle to a prefix node */
-
- if (parent) {
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- prefix_node = acpi_ns_convert_handle_to_entry (parent);
- if (!prefix_node) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- }
-
- /* Special case for root, since we can't search for it */
-
- if (STRCMP (pathname, NS_ROOT_PATH) == 0) {
- *ret_handle = acpi_ns_convert_entry_to_handle (acpi_gbl_root_node);
- return (AE_OK);
- }
-
- /*
- * Find the Node and convert to a handle
- */
- status = acpi_ns_get_node (pathname, prefix_node, &node);
-
- *ret_handle = NULL;
- if (ACPI_SUCCESS (status)) {
- *ret_handle = acpi_ns_convert_entry_to_handle (node);
- }
-
- return (status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_get_pathname
- *
- * PARAMETERS: Handle - Handle to be converted to a pathname
- * Name_type - Full pathname or single segment
- * Ret_path_ptr - Buffer for returned path
- *
- * RETURN: Pointer to a string containing the fully qualified Name.
- *
- * DESCRIPTION: This routine returns the fully qualified name associated with
- * the Handle parameter. This and the Acpi_pathname_to_handle are
- * complementary functions.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_name (
- ACPI_HANDLE handle,
- u32 name_type,
- ACPI_BUFFER *ret_path_ptr)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *node;
-
-
- /* Buffer pointer must be valid always */
-
- if (!ret_path_ptr || (name_type > ACPI_NAME_TYPE_MAX)) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Allow length to be zero and ignore the pointer */
-
- if ((ret_path_ptr->length) &&
- (!ret_path_ptr->pointer)) {
- return (AE_BAD_PARAMETER);
- }
-
- if (name_type == ACPI_FULL_PATHNAME) {
- /* Get the full pathname (From the namespace root) */
-
- status = acpi_ns_handle_to_pathname (handle, &ret_path_ptr->length,
- ret_path_ptr->pointer);
- return (status);
- }
-
- /*
- * Wants the single segment ACPI name.
- * Validate handle and convert to an Node
- */
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
- node = acpi_ns_convert_handle_to_entry (handle);
- if (!node) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
- /* Check if name will fit in buffer */
-
- if (ret_path_ptr->length < PATH_SEGMENT_LENGTH) {
- ret_path_ptr->length = PATH_SEGMENT_LENGTH;
- status = AE_BUFFER_OVERFLOW;
- goto unlock_and_exit;
- }
-
- /* Just copy the ACPI name from the Node and zero terminate it */
-
- STRNCPY (ret_path_ptr->pointer, (NATIVE_CHAR *) &node->name,
- ACPI_NAME_SIZE);
- ((NATIVE_CHAR *) ret_path_ptr->pointer) [ACPI_NAME_SIZE] = 0;
- status = AE_OK;
-
-
-unlock_and_exit:
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: Acpi_get_object_info
- *
- * PARAMETERS: Handle - Object Handle
- * Info - Where the info is returned
- *
- * RETURN: Status
- *
- * DESCRIPTION: Returns information about an object as gleaned from the
- * namespace node and possibly by running several standard
- * control methods (Such as in the case of a device.)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_object_info (
- ACPI_HANDLE handle,
- ACPI_DEVICE_INFO *info)
-{
- DEVICE_ID hid;
- DEVICE_ID uid;
- ACPI_STATUS status;
- u32 device_status = 0;
- ACPI_INTEGER address = 0;
- ACPI_NAMESPACE_NODE *node;
-
-
- /* Parameter validation */
-
- if (!handle || !info) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- node = acpi_ns_convert_handle_to_entry (handle);
- if (!node) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (AE_BAD_PARAMETER);
- }
-
- info->type = node->type;
- info->name = node->name;
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- /*
- * If not a device, we are all done.
- */
- if (info->type != ACPI_TYPE_DEVICE) {
- return (AE_OK);
- }
-
-
- /*
- * Get extra info for ACPI devices only. Run the
- * _HID, _UID, _STA, and _ADR methods. Note: none
- * of these methods are required, so they may or may
- * not be present. The Info->Valid bits are used
- * to indicate which methods ran successfully.
- */
-
- info->valid = 0;
-
- /* Execute the _HID method and save the result */
-
- status = acpi_cm_execute_HID (node, &hid);
- if (ACPI_SUCCESS (status)) {
- STRNCPY (info->hardware_id, hid.buffer, sizeof(info->hardware_id));
-
- info->valid |= ACPI_VALID_HID;
- }
-
- /* Execute the _UID method and save the result */
-
- status = acpi_cm_execute_UID (node, &uid);
- if (ACPI_SUCCESS (status)) {
- STRCPY (info->unique_id, uid.buffer);
-
- info->valid |= ACPI_VALID_UID;
- }
-
- /*
- * Execute the _STA method and save the result
- * _STA is not always present
- */
-
- status = acpi_cm_execute_STA (node, &device_status);
- if (ACPI_SUCCESS (status)) {
- info->current_status = device_status;
- info->valid |= ACPI_VALID_STA;
- }
-
- /*
- * Execute the _ADR method and save result if successful
- * _ADR is not always present
- */
-
- status = acpi_cm_evaluate_numeric_object (METHOD_NAME__ADR,
- node, &address);
-
- if (ACPI_SUCCESS (status)) {
- info->address = address;
- info->valid |= ACPI_VALID_ADR;
- }
-
- return (AE_OK);
-}
-
diff --git a/reactos/drivers/bus/acpi/namespace/nsxfobj.c b/reactos/drivers/bus/acpi/namespace/nsxfobj.c
deleted file mode 100644
index 1eaaedfbf7c..00000000000
--- a/reactos/drivers/bus/acpi/namespace/nsxfobj.c
+++ /dev/null
@@ -1,690 +0,0 @@
-/*******************************************************************************
- *
- * Module Name: nsxfobj - Public interfaces to the ACPI subsystem
- * ACPI Object oriented interfaces
- * $Revision: 1.1 $
- *
- ******************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 R. Byron Moore
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-#define _COMPONENT ACPI_NAMESPACE
- MODULE_NAME ("nsxfobj")
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_evaluate_object
- *
- * PARAMETERS: Handle - Object handle (optional)
- * *Pathname - Object pathname (optional)
- * **Params - List of parameters to pass to
- * method, terminated by NULL.
- * Params itself may be NULL
- * if no parameters are being
- * passed.
- * *Return_object - Where to put method's return value (if
- * any). If NULL, no value is returned.
- *
- * RETURN: Status
- *
- * DESCRIPTION: Find and evaluate the given object, passing the given
- * parameters if necessary. One of "Handle" or "Pathname" must
- * be valid (non-null)
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_evaluate_object (
- ACPI_HANDLE handle,
- ACPI_STRING pathname,
- ACPI_OBJECT_LIST *param_objects,
- ACPI_BUFFER *return_buffer)
-{
- ACPI_STATUS status;
- ACPI_OPERAND_OBJECT **param_ptr = NULL;
- ACPI_OPERAND_OBJECT *return_obj = NULL;
- ACPI_OPERAND_OBJECT *object_ptr = NULL;
- u32 buffer_space_needed;
- u32 user_buffer_length;
- u32 count;
- u32 i;
- u32 param_length;
- u32 object_length;
-
-
- /*
- * If there are parameters to be passed to the object
- * (which must be a control method), the external objects
- * must be converted to internal objects
- */
-
- if (param_objects && param_objects->count) {
- /*
- * Allocate a new parameter block for the internal objects
- * Add 1 to count to allow for null terminated internal list
- */
-
- count = param_objects->count;
- param_length = (count + 1) * sizeof (void *);
- object_length = count * sizeof (ACPI_OPERAND_OBJECT);
-
- param_ptr = acpi_cm_callocate (param_length + /* Parameter List part */
- object_length); /* Actual objects */
- if (!param_ptr) {
- return (AE_NO_MEMORY);
- }
-
- object_ptr = (ACPI_OPERAND_OBJECT *) ((u8 *) param_ptr +
- param_length);
-
- /*
- * Init the param array of pointers and NULL terminate
- * the list
- */
-
- for (i = 0; i < count; i++) {
- param_ptr[i] = &object_ptr[i];
- acpi_cm_init_static_object (&object_ptr[i]);
- }
- param_ptr[count] = NULL;
-
- /*
- * Convert each external object in the list to an
- * internal object
- */
- for (i = 0; i < count; i++) {
- status = acpi_cm_copy_eobject_to_iobject (¶m_objects->pointer[i],
- param_ptr[i]);
-
- if (ACPI_FAILURE (status)) {
- acpi_cm_delete_internal_object_list (param_ptr);
- return (status);
- }
- }
- }
-
-
- /*
- * Three major cases:
- * 1) Fully qualified pathname
- * 2) No handle, not fully qualified pathname (error)
- * 3) Valid handle
- */
-
- if ((pathname) &&
- (acpi_ns_valid_root_prefix (pathname[0]))) {
- /*
- * The path is fully qualified, just evaluate by name
- */
- status = acpi_ns_evaluate_by_name (pathname, param_ptr, &return_obj);
- }
-
- else if (!handle) {
- /*
- * A handle is optional iff a fully qualified pathname
- * is specified. Since we've already handled fully
- * qualified names above, this is an error
- */
-
-
-
- status = AE_BAD_PARAMETER;
- }
-
- else {
- /*
- * We get here if we have a handle -- and if we have a
- * pathname it is relative. The handle will be validated
- * in the lower procedures
- */
-
- if (!pathname) {
- /*
- * The null pathname case means the handle is for
- * the actual object to be evaluated
- */
- status = acpi_ns_evaluate_by_handle (handle, param_ptr, &return_obj);
- }
-
- else {
- /*
- * Both a Handle and a relative Pathname
- */
- status = acpi_ns_evaluate_relative (handle, pathname, param_ptr,
- &return_obj);
- }
- }
-
-
- /*
- * If we are expecting a return value, and all went well above,
- * copy the return value to an external object.
- */
-
- if (return_buffer) {
- user_buffer_length = return_buffer->length;
- return_buffer->length = 0;
-
- if (return_obj) {
- if (VALID_DESCRIPTOR_TYPE (return_obj, ACPI_DESC_TYPE_NAMED)) {
- /*
- * If we got an Node as a return object,
- * this means the object we are evaluating
- * has nothing interesting to return (such
- * as a mutex, etc.) We return an error
- * because these types are essentially
- * unsupported by this interface. We
- * don't check up front because this makes
- * it easier to add support for various
- * types at a later date if necessary.
- */
- status = AE_TYPE;
- return_obj = NULL; /* No need to delete an Node */
- }
-
- if (ACPI_SUCCESS (status)) {
- /*
- * Find out how large a buffer is needed
- * to contain the returned object
- */
- status = acpi_cm_get_object_size (return_obj,
- &buffer_space_needed);
- if (ACPI_SUCCESS (status)) {
- /*
- * Check if there is enough room in the
- * caller's buffer
- */
-
- if (user_buffer_length < buffer_space_needed) {
- /*
- * Caller's buffer is too small, can't
- * give him partial results fail the call
- * but return the buffer size needed
- */
-
- return_buffer->length = buffer_space_needed;
- status = AE_BUFFER_OVERFLOW;
- }
-
- else {
- /*
- * We have enough space for the object, build it
- */
- status = acpi_cm_copy_iobject_to_eobject (return_obj,
- return_buffer);
- return_buffer->length = buffer_space_needed;
- }
- }
- }
- }
- }
-
-
- /* Delete the return and parameter objects */
-
- if (return_obj) {
- /*
- * Delete the internal return object. (Or at least
- * decrement the reference count by one)
- */
- acpi_cm_remove_reference (return_obj);
- }
-
- /*
- * Free the input parameter list (if we created one),
- */
-
- if (param_ptr) {
- /* Free the allocated parameter block */
-
- acpi_cm_delete_internal_object_list (param_ptr);
- }
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_get_next_object
- *
- * PARAMETERS: Type - Type of object to be searched for
- * Parent - Parent object whose children we are getting
- * Last_child - Previous child that was found.
- * The NEXT child will be returned
- * Ret_handle - Where handle to the next object is placed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Return the next peer object within the namespace. If Handle is
- * valid, Scope is ignored. Otherwise, the first object within
- * Scope is returned.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_next_object (
- ACPI_OBJECT_TYPE type,
- ACPI_HANDLE parent,
- ACPI_HANDLE child,
- ACPI_HANDLE *ret_handle)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_NAMESPACE_NODE *node;
- ACPI_NAMESPACE_NODE *parent_node = NULL;
- ACPI_NAMESPACE_NODE *child_node = NULL;
-
-
- /* Parameter validation */
-
- if (type > ACPI_TYPE_MAX) {
- return (AE_BAD_PARAMETER);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* If null handle, use the parent */
-
- if (!child) {
- /* Start search at the beginning of the specified scope */
-
- parent_node = acpi_ns_convert_handle_to_entry (parent);
- if (!parent_node) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
- }
-
- /* Non-null handle, ignore the parent */
-
- else {
- /* Convert and validate the handle */
-
- child_node = acpi_ns_convert_handle_to_entry (child);
- if (!child_node) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
- }
-
-
- /* Internal function does the real work */
-
- node = acpi_ns_get_next_object ((OBJECT_TYPE_INTERNAL) type,
- parent_node, child_node);
- if (!node) {
- status = AE_NOT_FOUND;
- goto unlock_and_exit;
- }
-
- if (ret_handle) {
- *ret_handle = acpi_ns_convert_entry_to_handle (node);
- }
-
-
-unlock_and_exit:
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_get_type
- *
- * PARAMETERS: Handle - Handle of object whose type is desired
- * *Ret_type - Where the type will be placed
- *
- * RETURN: Status
- *
- * DESCRIPTION: This routine returns the type associatd with a particular handle
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_type (
- ACPI_HANDLE handle,
- ACPI_OBJECT_TYPE *ret_type)
-{
- ACPI_NAMESPACE_NODE *node;
-
-
- /* Parameter Validation */
-
- if (!ret_type) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Special case for the predefined Root Node
- * (return type ANY)
- */
- if (handle == ACPI_ROOT_OBJECT) {
- *ret_type = ACPI_TYPE_ANY;
- return (AE_OK);
- }
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* Convert and validate the handle */
-
- node = acpi_ns_convert_handle_to_entry (handle);
- if (!node) {
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (AE_BAD_PARAMETER);
- }
-
- *ret_type = node->type;
-
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_get_parent
- *
- * PARAMETERS: Handle - Handle of object whose parent is desired
- * Ret_handle - Where the parent handle will be placed
- *
- * RETURN: Status
- *
- * DESCRIPTION: Returns a handle to the parent of the object represented by
- * Handle.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_parent (
- ACPI_HANDLE handle,
- ACPI_HANDLE *ret_handle)
-{
- ACPI_NAMESPACE_NODE *node;
- ACPI_STATUS status = AE_OK;
-
-
- /* No trace macro, too verbose */
-
-
- if (!ret_handle) {
- return (AE_BAD_PARAMETER);
- }
-
- /* Special case for the predefined Root Node (no parent) */
-
- if (handle == ACPI_ROOT_OBJECT) {
- return (AE_NULL_ENTRY);
- }
-
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- /* Convert and validate the handle */
-
- node = acpi_ns_convert_handle_to_entry (handle);
- if (!node) {
- status = AE_BAD_PARAMETER;
- goto unlock_and_exit;
- }
-
-
- /* Get the parent entry */
-
- *ret_handle =
- acpi_ns_convert_entry_to_handle (acpi_ns_get_parent_object (node));
-
- /* Return exeption if parent is null */
-
- if (!acpi_ns_get_parent_object (node)) {
- status = AE_NULL_ENTRY;
- }
-
-
-unlock_and_exit:
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_walk_namespace
- *
- * PARAMETERS: Type - ACPI_OBJECT_TYPE to search for
- * Start_object - Handle in namespace where search begins
- * Max_depth - Depth to which search is to reach
- * User_function - Called when an object of "Type" is found
- * Context - Passed to user function
- * Return_value - Location where return value of
- * User_function is put if terminated early
- *
- * RETURNS Return value from the User_function if terminated early.
- * Otherwise, returns NULL.
- *
- * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
- * starting (and ending) at the object specified by Start_handle.
- * The User_function is called whenever an object that matches
- * the type parameter is found. If the user function returns
- * a non-zero value, the search is terminated immediately and this
- * value is returned to the caller.
- *
- * The point of this procedure is to provide a generic namespace
- * walk routine that can be called from multiple places to
- * provide multiple services; the User Function can be tailored
- * to each task, whether it is a print function, a compare
- * function, etc.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_walk_namespace (
- ACPI_OBJECT_TYPE type,
- ACPI_HANDLE start_object,
- u32 max_depth,
- WALK_CALLBACK user_function,
- void *context,
- void **return_value)
-{
- ACPI_STATUS status;
-
-
- /* Parameter validation */
-
- if ((type > ACPI_TYPE_MAX) ||
- (!max_depth) ||
- (!user_function)) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Lock the namespace around the walk.
- * The namespace will be unlocked/locked around each call
- * to the user function - since this function
- * must be allowed to make Acpi calls itself.
- */
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
- status = acpi_ns_walk_namespace ((OBJECT_TYPE_INTERNAL) type,
- start_object, max_depth,
- NS_WALK_UNLOCK,
- user_function, context,
- return_value);
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- return (status);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_ns_get_device_callback
- *
- * PARAMETERS: Callback from Acpi_get_device
- *
- * RETURN: Status
- *
- * DESCRIPTION: Takes callbacks from Walk_namespace and filters out all non-
- * present devices, or if they specified a HID, it filters based
- * on that.
- *
- ******************************************************************************/
-
-static ACPI_STATUS
-acpi_ns_get_device_callback (
- ACPI_HANDLE obj_handle,
- u32 nesting_level,
- void *context,
- void **return_value)
-{
- ACPI_STATUS status;
- ACPI_NAMESPACE_NODE *node;
- u32 flags;
- DEVICE_ID device_id;
- ACPI_GET_DEVICES_INFO *info;
-
-
- info = context;
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
-
- node = acpi_ns_convert_handle_to_entry (obj_handle);
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- if (!node) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * Run _STA to determine if device is present
- */
-
- status = acpi_cm_execute_STA (node, &flags);
- if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- if (!(flags & 0x01)) {
- /* don't return at the device or children of the device if not there */
-
- return (AE_CTRL_DEPTH);
- }
-
- /*
- * Filter based on device HID
- */
- if (info->hid != NULL) {
- status = acpi_cm_execute_HID (node, &device_id);
-
- if (status == AE_NOT_FOUND) {
- return (AE_OK);
- }
-
- else if (ACPI_FAILURE (status)) {
- return (status);
- }
-
- if (STRNCMP (device_id.buffer, info->hid, sizeof (device_id.buffer)) != 0) {
- return (AE_OK);
- }
- }
-
- info->user_function (obj_handle, nesting_level, info->context, return_value);
-
- return (AE_OK);
-}
-
-
-/*******************************************************************************
- *
- * FUNCTION: Acpi_get_devices
- *
- * PARAMETERS: HID - HID to search for. Can be NULL.
- * User_function - Called when a matching object is found
- * Context - Passed to user function
- * Return_value - Location where return value of
- * User_function is put if terminated early
- *
- * RETURNS Return value from the User_function if terminated early.
- * Otherwise, returns NULL.
- *
- * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
- * starting (and ending) at the object specified by Start_handle.
- * The User_function is called whenever an object that matches
- * the type parameter is found. If the user function returns
- * a non-zero value, the search is terminated immediately and this
- * value is returned to the caller.
- *
- * This is a wrapper for Walk_namespace, but the callback performs
- * additional filtering. Please see Acpi_get_device_callback.
- *
- ******************************************************************************/
-
-ACPI_STATUS
-acpi_get_devices (
- NATIVE_CHAR *HID,
- WALK_CALLBACK user_function,
- void *context,
- void **return_value)
-{
- ACPI_STATUS status;
- ACPI_GET_DEVICES_INFO info;
-
-
- /* Parameter validation */
-
- if (!user_function) {
- return (AE_BAD_PARAMETER);
- }
-
- /*
- * We're going to call their callback from OUR callback, so we need
- * to know what it is, and their context parameter.
- */
- info.context = context;
- info.user_function = user_function;
- info.hid = HID;
-
- /*
- * Lock the namespace around the walk.
- * The namespace will be unlocked/locked around each call
- * to the user function - since this function
- * must be allowed to make Acpi calls itself.
- */
-
- acpi_cm_acquire_mutex (ACPI_MTX_NAMESPACE);
- status = acpi_ns_walk_namespace (ACPI_TYPE_DEVICE,
- ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
- NS_WALK_UNLOCK,
- acpi_ns_get_device_callback, &info,
- return_value);
-
- acpi_cm_release_mutex (ACPI_MTX_NAMESPACE);
-
- return (status);
-}
diff --git a/reactos/drivers/bus/acpi/ospm/acpienum.c b/reactos/drivers/bus/acpi/ospm/acpienum.c
deleted file mode 100644
index 6edac4e1d44..00000000000
--- a/reactos/drivers/bus/acpi/ospm/acpienum.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/* $Id$
- *
- * PROJECT: ReactOS ACPI bus driver
- * FILE: acpi/ospm/acpienum.c
- * PURPOSE: ACPI namespace enumerator
- * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
- * UPDATE HISTORY:
- * 01-05-2001 CSH Created
- */
-#include
-
-#define NDEBUG
-#include
-
-
-#ifndef NDEBUG
-static void
-bm_print1 (
- BM_NODE *node,
- u32 flags)
-{
- ACPI_BUFFER buffer;
- BM_DEVICE *device = NULL;
- char *type_string = NULL;
-
- if (!node)
- {
- return;
- }
-
- device = &(node->device);
-
- if (flags & BM_PRINT_PRESENT)
- {
- if (!BM_DEVICE_PRESENT(device))
- {
- return;
- }
- }
-
- buffer.length = 256;
- buffer.pointer = acpi_os_callocate(buffer.length);
- if (!buffer.pointer)
- {
- return;
- }
-
- acpi_get_name(device->acpi_handle, ACPI_FULL_PATHNAME, &buffer);
-
- switch(device->id.type)
- {
- case BM_TYPE_SYSTEM:
- type_string = "System";
- break;
-
- case BM_TYPE_SCOPE:
- type_string = "Scope";
- break;
-
- case BM_TYPE_PROCESSOR:
- type_string = "Processor";
- break;
-
- case BM_TYPE_THERMAL_ZONE:
- type_string = "ThermalZone";
- break;
-
- case BM_TYPE_POWER_RESOURCE:
- type_string = "PowerResource";
- break;
-
- case BM_TYPE_FIXED_BUTTON:
- type_string = "Button";
- break;
-
- case BM_TYPE_DEVICE:
- type_string = "Device";
- break;
-
- default:
- type_string = "Unknown";
- break;
- }
-
- if (!(flags & BM_PRINT_GROUP))
- {
- DbgPrint("+------------------------------------------------------------\n");
- }
-
- DbgPrint("%s[0x%02x] hid[%s] %s\n", type_string, device->handle, device->id.hid, buffer.pointer);
- DbgPrint(" acpi_handle[0x%08x] flags[0x%02x] status[0x%02x]\n", device->acpi_handle, device->flags, device->status);
-
- if (flags & BM_PRINT_IDENTIFICATION)
- {
- DbgPrint(" identification: uid[%s] adr[0x%08x]\n", device->id.uid, device->id.adr);
- }
-
- if (flags & BM_PRINT_LINKAGE)
- {
- DbgPrint(" linkage: this[%p] parent[%p] next[%p]\n", node, node->parent, node->next);
- DbgPrint(" scope.head[%p] scope.tail[%p]\n", node->scope.head, node->scope.tail);
- }
-
- if (flags & BM_PRINT_POWER)
- {
- DbgPrint(" power: state[D%d] flags[0x%08X]\n", device->power.state, device->power.flags);
- DbgPrint(" S0[0x%02x] S1[0x%02x] S2[0x%02x]\n", device->power.dx_supported[0], device->power.dx_supported[1], device->power.dx_supported[2]);
- DbgPrint(" S3[0x%02x] S4[0x%02x] S5[0x%02x]\n", device->power.dx_supported[3], device->power.dx_supported[4], device->power.dx_supported[5]);
- }
-
- if (!(flags & BM_PRINT_GROUP))
- {
- DbgPrint("+------------------------------------------------------------\n");
- }
-
- acpi_os_free(buffer.pointer);
-
- return;
-}
-#endif
-
-
-NTSTATUS
-ACPIEnumerateDevices(PFDO_DEVICE_EXTENSION DeviceExtension)
-{
- BM_HANDLE_LIST HandleList;
- PACPI_DEVICE AcpiDevice;
- ACPI_STATUS AcpiStatus;
- BM_DEVICE_ID Criteria;
- BM_NODE *Node;
- KIRQL OldIrql;
- ULONG i;
-
- DPRINT("Called\n");
-
- RtlZeroMemory(&Criteria, sizeof(BM_DEVICE_ID));
- Criteria.type = BM_TYPE_ALL;
-
- AcpiStatus = bm_search(BM_HANDLE_ROOT, &Criteria, &HandleList);
- if (ACPI_SUCCESS(AcpiStatus))
- {
- DPRINT("Got %d devices\n", HandleList.count);
-
- for (i = 0; i < HandleList.count; i++)
- {
- AcpiStatus = bm_get_node(HandleList.handles[i], 0, &Node);
- if (ACPI_SUCCESS(AcpiStatus))
- {
- DPRINT("Got BM node information: (Node 0x%X)\n", Node);
-
- if ((Node->device.flags & BM_FLAGS_IDENTIFIABLE) &&
- (Node->device.id.hid[0] != 0))
- {
-#ifndef NDEBUG
- bm_print1(Node, BM_PRINT_ALL - BM_PRINT_PRESENT);
-#endif
-
- AcpiDevice = (PACPI_DEVICE)ExAllocatePool(NonPagedPool,
- sizeof(ACPI_DEVICE));
- if (AcpiDevice == NULL)
- {
- return STATUS_INSUFFICIENT_RESOURCES;
- }
-
- RtlZeroMemory(AcpiDevice, sizeof(ACPI_DEVICE));
-
- AcpiDevice->Pdo = NULL;
- AcpiDevice->BmHandle = HandleList.handles[i];
-
- KeAcquireSpinLock(&DeviceExtension->DeviceListLock, &OldIrql);
- InsertHeadList(&DeviceExtension->DeviceListHead,
- &AcpiDevice->DeviceListEntry);
- DeviceExtension->DeviceListCount++;
- KeReleaseSpinLock(&DeviceExtension->DeviceListLock, OldIrql);
- }
- }
- else
- {
- DPRINT("Could not get BM node\n");
- }
- }
- }
- else
- {
- DPRINT("Got no devices (Status 0x%X)\n", AcpiStatus);
- }
-
- return STATUS_SUCCESS;
-}
-
-/* EOF */
diff --git a/reactos/drivers/bus/acpi/ospm/acpisys.c b/reactos/drivers/bus/acpi/ospm/acpisys.c
deleted file mode 100644
index 148209dc233..00000000000
--- a/reactos/drivers/bus/acpi/ospm/acpisys.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* $Id$
- *
- * PROJECT: ReactOS ACPI bus driver
- * FILE: acpi/ospm/acpisys.c
- * PURPOSE: Driver entry
- * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
- * UPDATE HISTORY:
- * 01-05-2001 CSH Created
- */
-#include
-
-#define NDEBUG
-#include
-
-NTSTATUS
-NTAPI
-DriverEntry(
- IN PDRIVER_OBJECT DriverObject,
- IN PUNICODE_STRING RegistryPath
-);
-
-#ifdef ALLOC_PRAGMA
-
-// Make the initialization routines discardable, so that they
-// don't waste space
-
-#pragma alloc_text(init, DriverEntry)
-
-#endif /* ALLOC_PRAGMA */
-
-
-NTSTATUS
-NTAPI
-ACPIDispatchDeviceControl(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp)
-{
- PIO_STACK_LOCATION IrpSp;
- NTSTATUS Status;
-
- DPRINT("Called. IRP is at (0x%X)\n", Irp);
-
- Irp->IoStatus.Information = 0;
-
- IrpSp = IoGetCurrentIrpStackLocation(Irp);
- switch (IrpSp->Parameters.DeviceIoControl.IoControlCode) {
- default:
- DPRINT("Unknown IOCTL 0x%X\n", IrpSp->Parameters.DeviceIoControl.IoControlCode);
- Status = STATUS_NOT_IMPLEMENTED;
- break;
- }
-
- if (Status != STATUS_PENDING) {
- Irp->IoStatus.Status = Status;
-
- DPRINT("Completing IRP at 0x%X\n", Irp);
-
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
- }
-
- DPRINT("Leaving. Status 0x%X\n", Status);
-
- return Status;
-}
-
-
-NTSTATUS
-NTAPI
-ACPIPnpControl(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp)
-/*
- * FUNCTION: Handle Plug and Play IRPs
- * ARGUMENTS:
- * DeviceObject = Pointer to PDO or FDO
- * Irp = Pointer to IRP that should be handled
- * RETURNS:
- * Status
- */
-{
- PCOMMON_DEVICE_EXTENSION DeviceExtension;
- NTSTATUS Status;
-
- DPRINT("Called\n");
-
- DeviceExtension = (PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-
- if (DeviceExtension->IsFDO) {
- Status = FdoPnpControl(DeviceObject, Irp);
- } else {
- Status = PdoPnpControl(DeviceObject, Irp);
- }
-
- return Status;
-}
-
-
-NTSTATUS
-NTAPI
-ACPIPowerControl(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp)
-{
- PCOMMON_DEVICE_EXTENSION DeviceExtension;
- NTSTATUS Status;
-
- DPRINT("Called\n");
-
- DeviceExtension = (PCOMMON_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
-
- if (DeviceExtension->IsFDO) {
- Status = FdoPowerControl(DeviceObject, Irp);
- } else {
- Status = PdoPowerControl(DeviceObject, Irp);
- }
-
- return Status;
-}
-
-
-NTSTATUS
-NTAPI
-ACPIAddDevice(
- IN PDRIVER_OBJECT DriverObject,
- IN PDEVICE_OBJECT PhysicalDeviceObject)
-{
- PFDO_DEVICE_EXTENSION DeviceExtension;
- PDEVICE_OBJECT Fdo;
- NTSTATUS Status;
-
- DPRINT("Called\n");
-
- if (PhysicalDeviceObject == NULL)
- return STATUS_SUCCESS;
-
- Status = IoCreateDevice(DriverObject,
- sizeof(FDO_DEVICE_EXTENSION),
- NULL,
- FILE_DEVICE_ACPI,
- FILE_DEVICE_SECURE_OPEN,
- TRUE,
- &Fdo);
- if (!NT_SUCCESS(Status))
- {
- DPRINT("IoCreateDevice() failed with status 0x%X\n", Status);
- return Status;
- }
-
- DeviceExtension = (PFDO_DEVICE_EXTENSION)Fdo->DeviceExtension;
-
- DeviceExtension->Pdo = PhysicalDeviceObject;
- DeviceExtension->Common.IsFDO = TRUE;
-
- DeviceExtension->Common.Ldo =
- IoAttachDeviceToDeviceStack(Fdo, PhysicalDeviceObject);
-
- DeviceExtension->State = dsStopped;
-
- Fdo->Flags &= ~DO_DEVICE_INITIALIZING;
-
- DPRINT("Done AddDevice\n");
-
- return STATUS_SUCCESS;
-}
-
-
-NTSTATUS
-NTAPI
-DriverEntry(
- IN PDRIVER_OBJECT DriverObject,
- IN PUNICODE_STRING RegistryPath)
-{
- DPRINT("Advanced Configuration and Power Interface Bus Driver\n");
-
- DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH) ACPIDispatchDeviceControl;
- DriverObject->MajorFunction[IRP_MJ_PNP] = (PDRIVER_DISPATCH) ACPIPnpControl;
- DriverObject->MajorFunction[IRP_MJ_POWER] = (PDRIVER_DISPATCH) ACPIPowerControl;
- DriverObject->DriverExtension->AddDevice = ACPIAddDevice;
-
- return STATUS_SUCCESS;
-}
-
-/* EOF */
diff --git a/reactos/drivers/bus/acpi/ospm/bn.c b/reactos/drivers/bus/acpi/ospm/bn.c
deleted file mode 100644
index 6df7113a533..00000000000
--- a/reactos/drivers/bus/acpi/ospm/bn.c
+++ /dev/null
@@ -1,599 +0,0 @@
-/*****************************************************************************
- *
- * Module Name: bn.c
- * $Revision: 1.2 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 Andrew Grover
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Plxxe, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include
-
-#define _COMPONENT ACPI_BUTTON
- MODULE_NAME ("bn")
-
-
-static struct proc_dir_entry *bn_proc_root = NULL;
-
-
-/*****************************************************************************
- * Internal Functions
- *****************************************************************************/
-
-/*****************************************************************************
- *
- * FUNCTION: bn_print
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION: Prints out information on a specific button.
- *
- ****************************************************************************/
-
-void
-bn_print (
- BN_CONTEXT *button)
-{
-#ifdef ACPI_DEBUG
- ACPI_BUFFER buffer;
-#endif /*ACPI_DEBUG*/
-
- if (!button) {
- return;
- }
-
- switch (button->type) {
-
- case BN_TYPE_POWER_BUTTON:
- case BN_TYPE_POWER_BUTTON_FIXED:
- acpi_os_printf("Power Button: found\n");
- break;
-
- case BN_TYPE_SLEEP_BUTTON:
- case BN_TYPE_SLEEP_BUTTON_FIXED:
- acpi_os_printf("Sleep Button: found\n");
- break;
-
- case BN_TYPE_LID_SWITCH:
- acpi_os_printf("Lid Switch: found\n");
- break;
- }
-
-#ifdef ACPI_DEBUG
- buffer.length = 256;
- buffer.pointer = acpi_os_callocate(buffer.length);
- if (!buffer.pointer) {
- return;
- }
-
- /*
- * Get the full pathname for this ACPI object.
- */
- acpi_get_name(button->acpi_handle, ACPI_FULL_PATHNAME, &buffer);
-
- /*
- * Print out basic button information.
- */
- DEBUG_PRINT(ACPI_INFO, ("+------------------------------------------------------------\n"));
-
- switch (button->type) {
-
- case BN_TYPE_POWER_BUTTON:
- case BN_TYPE_POWER_BUTTON_FIXED:
- DEBUG_PRINT(ACPI_INFO, ("| PowerButton[0x%02x]|[%p] %s\n", button->device_handle, button->acpi_handle, buffer.pointer));
- break;
-
- case BN_TYPE_SLEEP_BUTTON:
- case BN_TYPE_SLEEP_BUTTON_FIXED:
- DEBUG_PRINT(ACPI_INFO, ("| SleepButton[0x%02x]|[%p] %s\n", button->device_handle, button->acpi_handle, buffer.pointer));
- break;
-
- case BN_TYPE_LID_SWITCH:
- DEBUG_PRINT(ACPI_INFO, ("| LidSwitch[0x%02x]|[%p] %s\n", button->device_handle, button->acpi_handle, buffer.pointer));
- break;
- }
-
- DEBUG_PRINT(ACPI_INFO, ("+------------------------------------------------------------\n"));
-
- acpi_os_free(buffer.pointer);
-#endif /*ACPI_DEBUG*/
-
- return;
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bn_add_device
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bn_add_device(
- BM_HANDLE device_handle,
- void **context)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE *device = NULL;
- BN_CONTEXT *button = NULL;
-
- FUNCTION_TRACE("bn_add_device");
-
- DEBUG_PRINT(ACPI_INFO, ("Adding button device [0x%02x].\n", device_handle));
-
- if (!context || *context) {
- DEBUG_PRINT(ACPI_ERROR, ("Invalid context.\n"));
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- /*
- * Get information on this device.
- */
- status = bm_get_device_info( device_handle, &device );
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
-
- /*
- * Allocate a new BN_CONTEXT structure.
- */
- button = acpi_os_callocate(sizeof(BN_CONTEXT));
- if (!button) {
- return_ACPI_STATUS(AE_NO_MEMORY);
- }
-
- button->device_handle = device->handle;
- button->acpi_handle = device->acpi_handle;
-
- /*
- * Power Button?
- * -------------
- * Either fixed-feature or generic (namespace) types.
- */
- if (strncmp(device->id.hid, BN_HID_POWER_BUTTON,
- sizeof(BM_DEVICE_HID)) == 0) {
-
- if (device->id.type == BM_TYPE_FIXED_BUTTON) {
-
- button->type = BN_TYPE_POWER_BUTTON_FIXED;
-
- /* Register for fixed-feature events. */
- status = acpi_install_fixed_event_handler(
- ACPI_EVENT_POWER_BUTTON, bn_notify_fixed,
- (void*)button);
- }
- else {
- button->type = BN_TYPE_POWER_BUTTON;
- }
-
- //proc_mkdir(BN_PROC_POWER_BUTTON, bn_proc_root);
-
- }
-
- /*
- * Sleep Button?
- * -------------
- * Either fixed-feature or generic (namespace) types.
- */
- else if (strncmp( device->id.hid, BN_HID_SLEEP_BUTTON,
- sizeof(BM_DEVICE_HID)) == 0) {
-
- if (device->id.type == BM_TYPE_FIXED_BUTTON) {
-
- button->type = BN_TYPE_SLEEP_BUTTON_FIXED;
-
- /* Register for fixed-feature events. */
- status = acpi_install_fixed_event_handler(
- ACPI_EVENT_SLEEP_BUTTON, bn_notify_fixed,
- (void*)button);
- }
- else {
- button->type = BN_TYPE_SLEEP_BUTTON;
- }
-
- //proc_mkdir(BN_PROC_SLEEP_BUTTON, bn_proc_root);
- }
-
- /*
- * LID Switch?
- * -----------
- */
- else if (strncmp( device->id.hid, BN_HID_LID_SWITCH,
- sizeof(BM_DEVICE_HID)) == 0) {
-
- button->type = BN_TYPE_LID_SWITCH;
-
- //proc_mkdir(BN_PROC_LID_SWITCH, bn_proc_root);
- }
-
- *context = button;
-
- bn_print(button);
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bn_remove_device
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bn_remove_device(
- void **context)
-{
- ACPI_STATUS status = AE_OK;
- BN_CONTEXT *button = NULL;
-
- FUNCTION_TRACE("bn_remove_device");
-
- if (!context || !*context) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- button = (BN_CONTEXT*)*context;
-
- DEBUG_PRINT(ACPI_INFO, ("Removing button device [0x%02x].\n", button->device_handle));
-
- /*
- * Remove the /proc entry for this button.
- */
- switch (button->type) {
-
- case BN_TYPE_POWER_BUTTON:
- case BN_TYPE_POWER_BUTTON_FIXED:
- /* Unregister for fixed-feature events. */
- status = acpi_remove_fixed_event_handler(
- ACPI_EVENT_POWER_BUTTON, bn_notify_fixed);
- //remove_proc_entry(BN_PROC_POWER_BUTTON, bn_proc_root);
- break;
-
- case BN_TYPE_SLEEP_BUTTON:
- case BN_TYPE_SLEEP_BUTTON_FIXED:
- /* Unregister for fixed-feature events. */
- status = acpi_remove_fixed_event_handler(
- ACPI_EVENT_SLEEP_BUTTON, bn_notify_fixed);
- //remove_proc_entry(BN_PROC_SLEEP_BUTTON, bn_proc_root);
- break;
-
- case BN_TYPE_LID_SWITCH:
- //remove_proc_entry(BN_PROC_LID_SWITCH, bn_proc_root);
- break;
- }
-
- acpi_os_free(button);
-
- *context = NULL;
-
- return_ACPI_STATUS(status);
-}
-
-
-/*****************************************************************************
- * External Functions
- *****************************************************************************/
-
-/*****************************************************************************
- *
- * FUNCTION: bn_initialize
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
-
- ****************************************************************************/
-
-ACPI_STATUS
-bn_initialize (void)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE_ID criteria;
- BM_DRIVER driver;
-
- FUNCTION_TRACE("bn_initialize");
-
- MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID));
- MEMSET(&driver, 0, sizeof(BM_DRIVER));
-
- driver.notify = &bn_notify;
- driver.request = &bn_request;
-
- /*
- * Create button's root /proc entry.
- */
- //bn_proc_root = proc_mkdir(BN_PROC_ROOT, bm_proc_root);
- //if (!bn_proc_root) {
-// return_ACPI_STATUS(AE_ERROR);
-// }
-
- /*
- * Register for power buttons.
- */
- MEMCPY(criteria.hid, BN_HID_POWER_BUTTON, sizeof(BN_HID_POWER_BUTTON));
- status = bm_register_driver(&criteria, &driver);
-
- /*
- * Register for sleep buttons.
- */
- MEMCPY(criteria.hid, BN_HID_SLEEP_BUTTON, sizeof(BN_HID_SLEEP_BUTTON));
- status = bm_register_driver(&criteria, &driver);
-
- /*
- * Register for LID switches.
- */
- MEMCPY(criteria.hid, BN_HID_LID_SWITCH, sizeof(BN_HID_LID_SWITCH));
- status = bm_register_driver(&criteria, &driver);
-
- if (status == AE_NOT_FOUND)
- status = AE_OK;
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bn_terminate
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bn_terminate (void)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE_ID criteria;
- BM_DRIVER driver;
-
- FUNCTION_TRACE("bn_terminate");
-
- MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID));
- MEMSET(&driver, 0, sizeof(BM_DRIVER));
-
- driver.notify = &bn_notify;
- driver.request = &bn_request;
-
- /*
- * Unregister for power buttons.
- */
- MEMCPY(criteria.hid, BN_HID_POWER_BUTTON, sizeof(BN_HID_POWER_BUTTON));
- status = bm_unregister_driver(&criteria, &driver);
-
- /*
- * Unregister for sleep buttons.
- */
- MEMCPY(criteria.hid, BN_HID_SLEEP_BUTTON, sizeof(BN_HID_SLEEP_BUTTON));
- status = bm_unregister_driver(&criteria, &driver);
-
- /*
- * Unregister for LID switches.
- */
- MEMCPY(criteria.hid, BN_HID_LID_SWITCH, sizeof(BN_HID_LID_SWITCH));
- status = bm_unregister_driver(&criteria, &driver);
-
- /*
- * Remove button's root /proc entry.
- */
- if (bn_proc_root) {
- //remove_proc_entry(BN_PROC_ROOT, bm_proc_root);
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bn_notify_fixed
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bn_notify_fixed (
- void *context)
-{
- ACPI_STATUS status = AE_OK;
- BN_CONTEXT *button = NULL;
-
- FUNCTION_TRACE("bn_notify_fixed");
-
- if (!context) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- button = (BN_CONTEXT*)context;
-
- DbgPrint("Fixed button status change event detected.\n");
-
- switch (button->type) {
-
- case BN_TYPE_POWER_BUTTON_FIXED:
- DEBUG_PRINT(ACPI_INFO, ("Fixed-feature button status change event detected.\n"));
- /*bm_generate_event(button->device_handle, BN_PROC_ROOT,
- BN_PROC_POWER_BUTTON, BN_NOTIFY_STATUS_CHANGE, 0);*/
- break;
-
- case BN_TYPE_SLEEP_BUTTON_FIXED:
- DEBUG_PRINT(ACPI_INFO, ("Fixed-feature button status change event detected.\n"));
- /*bm_generate_event(button->device_handle, BN_PROC_ROOT,
- BN_PROC_SLEEP_BUTTON, BN_NOTIFY_STATUS_CHANGE, 0);*/
- break;
-
- default:
- DEBUG_PRINT(ACPI_INFO, ("Unsupported fixed-feature event detected.\n"));
- status = AE_SUPPORT;
- break;
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bn_notify
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bn_notify (
- BM_NOTIFY notify_type,
- BM_HANDLE device_handle,
- void **context)
-{
- ACPI_STATUS status = AE_OK;
-
- FUNCTION_TRACE("bn_notify");
-
- if (!context) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- switch (notify_type) {
- case BM_NOTIFY_DEVICE_ADDED:
- status = bn_add_device(device_handle, context);
- break;
-
- case BM_NOTIFY_DEVICE_REMOVED:
- status = bn_remove_device(context);
- break;
-
- case BN_NOTIFY_STATUS_CHANGE:
- DEBUG_PRINT(ACPI_INFO, ("Button status change event detected.\n"));
-
- DbgPrint("Button status change event detected.\n");
-
- if (!context || !*context) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- switch(((BN_CONTEXT*)*context)->type) {
-
- case BN_TYPE_POWER_BUTTON:
- case BN_TYPE_POWER_BUTTON_FIXED:
- /*bm_generate_event(device_handle, BN_PROC_ROOT,
- BN_PROC_POWER_BUTTON, notify_type, 0);*/
- break;
-
- case BN_TYPE_SLEEP_BUTTON:
- case BN_TYPE_SLEEP_BUTTON_FIXED:
- /*bm_generate_event(device_handle, BN_PROC_ROOT,
- BN_PROC_SLEEP_BUTTON, notify_type, 0);*/
- break;
-
- case BN_TYPE_LID_SWITCH:
- /*bm_generate_event(device_handle, BN_PROC_ROOT,
- BN_PROC_LID_SWITCH, notify_type, 0);*/
- break;
-
- default:
- status = AE_SUPPORT;
- break;
- }
-
- break;
-
- default:
- status = AE_SUPPORT;
- break;
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bn_request
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bn_request (
- BM_REQUEST *request,
- void *context)
-{
- ACPI_STATUS status = AE_OK;
-
- FUNCTION_TRACE("bn_request");
-
- /*
- * Must have a valid request structure and context.
- */
- if (!request || !context) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- /*
- * Handle Request:
- * ---------------
- */
- switch (request->command) {
-
- default:
- status = AE_SUPPORT;
- break;
- }
-
- request->status = status;
-
- return_ACPI_STATUS(status);
-}
diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bm.c b/reactos/drivers/bus/acpi/ospm/busmgr/bm.c
deleted file mode 100644
index 42253ae36dc..00000000000
--- a/reactos/drivers/bus/acpi/ospm/busmgr/bm.c
+++ /dev/null
@@ -1,1047 +0,0 @@
-/******************************************************************************
- *
- * Module Name: bm.c
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 Andrew Grover
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_BUS_MANAGER
- MODULE_NAME ("bm")
-
-
-/****************************************************************************
- * Globals
- ****************************************************************************/
-
-extern FADT_DESCRIPTOR_REV2 acpi_fadt;
-/* TODO: Make dynamically sizeable. */
-static BM_NODE_LIST node_list;
-
-
-/****************************************************************************
- * Internal Functions
- ****************************************************************************/
-
-/****************************************************************************
- *
- * FUNCTION: bm_print
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-void
-bm_print (
- BM_NODE *node,
- u32 flags)
-{
- ACPI_BUFFER buffer;
- BM_DEVICE *device = NULL;
- char *type_string = NULL;
-
- if (!node) {
- return;
- }
-
- device = &(node->device);
-
- if (flags & BM_PRINT_PRESENT) {
- if (!BM_DEVICE_PRESENT(device)) {
- return;
- }
- }
-
- buffer.length = 256;
- buffer.pointer = acpi_os_callocate(buffer.length);
- if (!buffer.pointer) {
- return;
- }
-
- acpi_get_name(device->acpi_handle, ACPI_FULL_PATHNAME, &buffer);
-
- switch(device->id.type) {
- case BM_TYPE_SYSTEM:
- type_string = "System";
- break;
- case BM_TYPE_SCOPE:
- type_string = "Scope";
- break;
- case BM_TYPE_PROCESSOR:
- type_string = "Processor";
- break;
- case BM_TYPE_THERMAL_ZONE:
- type_string = "ThermalZone";
- break;
- case BM_TYPE_POWER_RESOURCE:
- type_string = "PowerResource";
- break;
- case BM_TYPE_FIXED_BUTTON:
- type_string = "Button";
- break;
- case BM_TYPE_DEVICE:
- type_string = "Device";
- break;
- default:
- type_string = "Unknown";
- break;
- }
-
- if (!(flags & BM_PRINT_GROUP)) {
- DEBUG_PRINT(ACPI_INFO, ("+------------------------------------------------------------\n"));
- }
-
- DEBUG_PRINT(ACPI_INFO, ("%s[0x%02x] hid[%s] %s\n", type_string, device->handle, device->id.hid, buffer.pointer));
- DEBUG_PRINT(ACPI_INFO, (" acpi_handle[0x%08x] flags[0x%02x] status[0x%02x]\n", device->acpi_handle, device->flags, device->status));
-
- if (flags & BM_PRINT_IDENTIFICATION) {
- DEBUG_PRINT(ACPI_INFO, (" identification: uid[%s] adr[0x%08x]\n", device->id.uid, device->id.adr));
- }
-
- if (flags & BM_PRINT_LINKAGE) {
- DEBUG_PRINT(ACPI_INFO, (" linkage: this[%p] parent[%p] next[%p]\n", node, node->parent, node->next));
- DEBUG_PRINT(ACPI_INFO, (" scope.head[%p] scope.tail[%p]\n", node->scope.head, node->scope.tail));
- }
-
- if (flags & BM_PRINT_POWER) {
- DEBUG_PRINT(ACPI_INFO, (" power: state[D%d] flags[0x%08X]\n", device->power.state, device->power.flags));
- DEBUG_PRINT(ACPI_INFO, (" S0[0x%02x] S1[0x%02x] S2[0x%02x]\n", device->power.dx_supported[0], device->power.dx_supported[1], device->power.dx_supported[2]));
- DEBUG_PRINT(ACPI_INFO, (" S3[0x%02x] S4[0x%02x] S5[0x%02x]\n", device->power.dx_supported[3], device->power.dx_supported[4], device->power.dx_supported[5]));
- }
-
- if (!(flags & BM_PRINT_GROUP)) {
- DEBUG_PRINT(ACPI_INFO, ("+------------------------------------------------------------\n"));
- }
-
- acpi_os_free(buffer.pointer);
-
- return;
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_print_hierarchy
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-void
-bm_print_hierarchy (void)
-{
- u32 i = 0;
-
- FUNCTION_TRACE("bm_print_hierarchy");
-
- DEBUG_PRINT(ACPI_INFO, ("+------------------------------------------------------------\n"));
-
- for (i = 0; i < node_list.count; i++) {
- bm_print(node_list.nodes[i], BM_PRINT_GROUP | BM_PRINT_PRESENT);
- }
-
- DEBUG_PRINT(ACPI_INFO, ("+------------------------------------------------------------\n"));
-
- return_VOID;
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_get_status
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_get_status (
- BM_DEVICE *device)
-{
- ACPI_STATUS status = AE_OK;
-
- if (!device) {
- return AE_BAD_PARAMETER;
- }
-
- device->status = BM_STATUS_UNKNOWN;
-
- /*
- * Dynamic Status?
- * ---------------
- * If _STA isn't present we just return the default status.
- */
- if (!(device->flags & BM_FLAGS_DYNAMIC_STATUS)) {
- device->status = BM_STATUS_DEFAULT;
- return AE_OK;
- }
-
- /*
- * Evaluate _STA:
- * --------------
- */
- status = bm_evaluate_simple_integer(device->acpi_handle, "_STA",
- &(device->status));
-
- return status;
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_get_identification
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_get_identification (
- BM_DEVICE *device)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_DEVICE_INFO info;
-
- if (!device) {
- return AE_BAD_PARAMETER;
- }
-
- if (!(device->flags & BM_FLAGS_IDENTIFIABLE)) {
- return AE_OK;
- }
-
- MEMSET(&(device->id.uid), 0, sizeof(device->id.uid));
- MEMSET(&(device->id.hid), 0, sizeof(device->id.hid));
- device->id.adr = BM_ADDRESS_UNKNOWN;
-
- /*
- * Get Object Info:
- * ----------------
- * Evalute _UID, _HID, _ADR, and _STA...
- */
- status = acpi_get_object_info(device->acpi_handle, &info);
- if (ACPI_FAILURE(status)) {
- return status;
- }
-
- if (info.valid & ACPI_VALID_UID) {
- MEMCPY((void*)device->id.uid, (void*)info.unique_id,
- sizeof(BM_DEVICE_UID));
- }
-
- if (info.valid & ACPI_VALID_HID) {
- MEMCPY((void*)device->id.hid, (void*)info.hardware_id,
- sizeof(BM_DEVICE_HID));
- }
-
- if (info.valid & ACPI_VALID_ADR) {
- device->id.adr = info.address;
- }
-
- return status;
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_get_flags
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_get_flags (
- BM_DEVICE *device)
-{
- ACPI_HANDLE acpi_handle = NULL;
-
- if (!device) {
- return AE_BAD_PARAMETER;
- }
-
- device->flags = BM_FLAGS_UNKNOWN;
-
- switch (device->id.type) {
-
- case BM_TYPE_DEVICE:
-
- /*
- * Presence of _DCK indicates a docking station.
- */
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle,
- "_DCK", &acpi_handle))) {
- device->flags |= BM_FLAGS_DOCKING_STATION;
- }
-
- /*
- * Presence of _EJD and/or _EJx indicates 'ejectable'.
- * TODO: _EJx...
- */
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle,
- "_EJD", &acpi_handle))) {
- device->flags |= BM_FLAGS_EJECTABLE;
- }
-
- /*
- * Presence of _PR0 or _PS0 indicates 'power manageable'.
- */
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle,
- "_PR0", &acpi_handle)) ||
- ACPI_SUCCESS(acpi_get_handle(device->acpi_handle,
- "_PS0", &acpi_handle))) {
- device->flags |= BM_FLAGS_POWER_CONTROL;
- }
-
- /*
- * Presence of _CRS indicates 'configurable'.
- */
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle,
- "_CRS", &acpi_handle))) {
- device->flags |= BM_FLAGS_CONFIGURABLE;
- }
-
- /* Fall through to next case statement. */
-
- case BM_TYPE_PROCESSOR:
- case BM_TYPE_THERMAL_ZONE:
- case BM_TYPE_POWER_RESOURCE:
- /*
- * Presence of _HID or _ADR indicates 'identifiable'.
- */
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle,
- "_HID", &acpi_handle)) ||
- ACPI_SUCCESS(acpi_get_handle(device->acpi_handle,
- "_ADR", &acpi_handle))) {
- device->flags |= BM_FLAGS_IDENTIFIABLE;
- }
-
- /*
- * Presence of _STA indicates 'dynamic status'.
- */
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle,
- "_STA", &acpi_handle))) {
- device->flags |= BM_FLAGS_DYNAMIC_STATUS;
- }
-
- break;
- }
-
- return AE_OK;
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_add_namespace_device
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_add_namespace_device (
- ACPI_HANDLE acpi_handle,
- ACPI_OBJECT_TYPE acpi_type,
- BM_NODE *parent,
- BM_NODE **child)
-{
- ACPI_STATUS status = AE_OK;
- BM_NODE *node = NULL;
- BM_DEVICE *device = NULL;
-
- FUNCTION_TRACE("bm_add_namespace_device");
-
- if (!parent || !child) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- if (node_list.count > BM_HANDLES_MAX) {
- return_ACPI_STATUS(AE_NO_MEMORY);
- }
-
- (*child) = NULL;
-
- /*
- * Create Node:
- * ------------
- */
- node = acpi_os_callocate(sizeof(BM_NODE));
- if (!node) {
- return_ACPI_STATUS(AE_NO_MEMORY);
- }
-
- node->parent = parent;
- node->next = NULL;
-
- device = &(node->device);
-
- device->handle = node_list.count;
- device->acpi_handle = acpi_handle;
-
- /*
- * Device Type:
- * ------------
- */
- switch (acpi_type) {
- case INTERNAL_TYPE_SCOPE:
- device->id.type = BM_TYPE_SCOPE;
- break;
- case ACPI_TYPE_PROCESSOR:
- device->id.type = BM_TYPE_PROCESSOR;
- break;
- case ACPI_TYPE_THERMAL:
- device->id.type = BM_TYPE_THERMAL_ZONE;
- break;
- case ACPI_TYPE_POWER:
- device->id.type = BM_TYPE_POWER_RESOURCE;
- break;
- case ACPI_TYPE_DEVICE:
- device->id.type = BM_TYPE_DEVICE;
- break;
- }
-
- /*
- * Get Other Device Info:
- * ----------------------
- * But only if this device's parent is present (which implies
- * this device MAY be present).
- */
- if (BM_NODE_PRESENT(node->parent)) {
- /*
- * Device Flags
- */
- status = bm_get_flags(device);
- if (ACPI_FAILURE(status)) {
- goto end;
- }
-
- /*
- * Device Identification
- */
- status = bm_get_identification(device);
- if (ACPI_FAILURE(status)) {
- goto end;
- }
-
- /*
- * Device Status
- */
- status = bm_get_status(device);
- if (ACPI_FAILURE(status)) {
- goto end;
- }
-
- /*
- * Power Management:
- * -----------------
- * If this node doesn't provide direct power control
- * then we inherit PM capabilities from its parent.
- *
- * TODO: Inherit!
- */
- if (device->flags & BM_FLAGS_POWER_CONTROL) {
- status = bm_get_pm_capabilities(node);
- if (ACPI_FAILURE(status)) {
- goto end;
- }
- }
- }
-
-end:
- if (ACPI_FAILURE(status)) {
- acpi_os_free(node);
- }
- else {
- /*
- * Add to the node_list.
- */
- node_list.nodes[node_list.count++] = node;
-
- /*
- * Formulate Hierarchy:
- * --------------------
- * Arrange within the namespace by assigning the parent and
- * adding to the parent device's list of children (scope).
- */
- if (!parent->scope.head) {
- parent->scope.head = node;
- }
- else {
- if (!parent->scope.tail) {
- (parent->scope.head)->next = node;
- }
- else {
- (parent->scope.tail)->next = node;
- }
- }
- parent->scope.tail = node;
-
- (*child) = node;
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_enumerate_namespace
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_enumerate_namespace (void)
-{
- ACPI_STATUS status = AE_OK;
- ACPI_HANDLE parent_handle = ACPI_ROOT_OBJECT;
- ACPI_HANDLE child_handle = NULL;
- BM_NODE *parent = NULL;
- BM_NODE *child = NULL;
- ACPI_OBJECT_TYPE acpi_type = 0;
- u32 level = 1;
-
- FUNCTION_TRACE("bm_enumerate_namespace");
-
- parent = node_list.nodes[0];
-
- /*
- * Enumerate ACPI Namespace:
- * -------------------------
- * Parse through the ACPI namespace, identify all 'devices',
- * and create a new entry for each in our collection.
- */
- while (level > 0) {
-
- /*
- * Get the next object at this level.
- */
- status = acpi_get_next_object(ACPI_TYPE_ANY, parent_handle, child_handle, &child_handle);
- if (ACPI_SUCCESS(status)) {
-
- /*
- * TODO: This is a hack to get around the problem
- * identifying scope objects. Scopes
- * somehow need to be uniquely identified.
- */
- status = acpi_get_type(child_handle, &acpi_type);
- if (ACPI_SUCCESS(status) && (acpi_type == ACPI_TYPE_ANY)) {
- status = acpi_get_next_object(ACPI_TYPE_ANY, child_handle, 0, NULL);
- if (ACPI_SUCCESS(status)) {
- acpi_type = INTERNAL_TYPE_SCOPE;
- }
- }
-
- /*
- * Device?
- * -------
- * If this object is a 'device', insert into the
- * ACPI Bus Manager's local hierarchy and search
- * the object's scope for any child devices (a
- * depth-first search).
- */
- switch (acpi_type) {
- case INTERNAL_TYPE_SCOPE:
- case ACPI_TYPE_DEVICE:
- case ACPI_TYPE_PROCESSOR:
- case ACPI_TYPE_THERMAL:
- case ACPI_TYPE_POWER:
- status = bm_add_namespace_device(child_handle, acpi_type, parent, &child);
- if (ACPI_SUCCESS(status)) {
- status = acpi_get_next_object(ACPI_TYPE_ANY, child_handle, 0, NULL);
- if (ACPI_SUCCESS(status)) {
- level++;
- parent_handle = child_handle;
- child_handle = 0;
- parent = child;
- }
- }
- break;
- }
- }
-
- /*
- * Scope Exhausted:
- * ----------------
- * No more children in this object's scope, Go back up
- * in the namespace tree to the object's parent.
- */
- else {
- level--;
- child_handle = parent_handle;
- acpi_get_parent(parent_handle,
- &parent_handle);
-
- if (parent) {
- parent = parent->parent;
- }
- else {
- return_ACPI_STATUS(AE_NULL_ENTRY);
- }
- }
- }
-
- return_ACPI_STATUS(AE_OK);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_add_fixed_feature_device
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_add_fixed_feature_device (
- BM_NODE *parent,
- BM_DEVICE_TYPE device_type,
- char *device_hid)
-{
- ACPI_STATUS status = AE_OK;
- BM_NODE *node = NULL;
-
- FUNCTION_TRACE("bm_add_fixed_feature_device");
-
- if (!parent) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- if (node_list.count > BM_HANDLES_MAX) {
- return_ACPI_STATUS(AE_NO_MEMORY);
- }
-
- /*
- * Allocate the new device and add to the device array.
- */
- node = acpi_os_callocate(sizeof(BM_NODE));
- if (!node) {
- return_ACPI_STATUS(AE_NO_MEMORY);
- }
-
- /*
- * Get device info.
- */
- node->device.handle = node_list.count;
- node->device.acpi_handle = ACPI_ROOT_OBJECT;
- node->device.id.type = BM_TYPE_FIXED_BUTTON;
- if (device_hid) {
- MEMCPY((void*)node->device.id.hid, device_hid,
- sizeof(node->device.id.hid));
- }
- node->device.flags = BM_FLAGS_FIXED_FEATURE;
- node->device.status = BM_STATUS_DEFAULT;
- /* TODO: Device PM capabilities */
-
- /*
- * Add to the node_list.
- */
- node_list.nodes[node_list.count++] = node;
-
- /*
- * Formulate Hierarchy:
- * --------------------
- * Arrange within the namespace by assigning the parent and
- * adding to the parent device's list of children (scope).
- */
- node->parent = parent;
- node->next = NULL;
-
- if (parent) {
- if (!parent->scope.head) {
- parent->scope.head = node;
- }
- else {
- if (!parent->scope.tail) {
- (parent->scope.head)->next = node;
- }
- else {
- (parent->scope.tail)->next = node;
- }
- }
- parent->scope.tail = node;
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_enumerate_fixed_features
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_enumerate_fixed_features (void)
-{
- FUNCTION_TRACE("bm_enumerate_fixed_features");
-
- /*
- * Root Object:
- * ------------
- * Fabricate the root object, which happens to always get a
- * device_handle of zero.
- */
- node_list.nodes[0] = acpi_os_callocate(sizeof(BM_NODE));
- if (NULL == (node_list.nodes[0])) {
- return_ACPI_STATUS(AE_NO_MEMORY);
- }
-
- node_list.nodes[0]->device.handle = BM_HANDLE_ROOT;
- node_list.nodes[0]->device.acpi_handle = ACPI_ROOT_OBJECT;
- node_list.nodes[0]->device.flags = BM_FLAGS_UNKNOWN;
- node_list.nodes[0]->device.status = BM_STATUS_DEFAULT;
- node_list.nodes[0]->device.id.type = BM_TYPE_SYSTEM;
- /* TODO: Get system PM capabilities (Sx states?) */
-
- node_list.count++;
-
- /*
- * Fixed Features:
- * ---------------
- * Enumerate fixed-feature devices (e.g. power and sleep buttons).
- */
- if (acpi_fadt.pwr_button == 0) {
- bm_add_fixed_feature_device(node_list.nodes[0],
- BM_TYPE_FIXED_BUTTON, BM_HID_POWER_BUTTON);
- }
-
- if (acpi_fadt.sleep_button == 0) {
- bm_add_fixed_feature_device(node_list.nodes[0],
- BM_TYPE_FIXED_BUTTON, BM_HID_SLEEP_BUTTON);
- }
-
- return_ACPI_STATUS(AE_OK);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_get_handle
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_get_handle (
- ACPI_HANDLE acpi_handle,
- BM_HANDLE *device_handle)
-{
- ACPI_STATUS status = AE_OK;
- u32 i = 0;
-
- FUNCTION_TRACE("bm_get_handle");
-
- if (!device_handle) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- *device_handle = BM_HANDLE_UNKNOWN;
-
- /*
- * Search all devices for a match on the ACPI handle.
- */
- for (i=0; idevice.acpi_handle == acpi_handle) {
- *device_handle = node_list.nodes[i]->device.handle;
- break;
- }
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_get_node
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_get_node (
- BM_HANDLE device_handle,
- ACPI_HANDLE acpi_handle,
- BM_NODE **node)
-{
- ACPI_STATUS status = AE_OK;
-
- FUNCTION_TRACE("bm_get_node");
-
- if (!node) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- /*
- * If no device handle, resolve acpi handle to device handle.
- */
- if (!device_handle && acpi_handle) {
- status = bm_get_handle(acpi_handle, &device_handle);
- if (ACPI_FAILURE(status))
- return_ACPI_STATUS(status);
- }
-
- /*
- * Valid device handle?
- */
- if (device_handle > BM_HANDLES_MAX) {
- DEBUG_PRINT(ACPI_ERROR, ("Invalid node handle [0x%02x] detected.\n", device_handle));
- return_ACPI_STATUS(AE_ERROR);
- }
-
- *node = node_list.nodes[device_handle];
-
- /*
- * Valid node?
- */
- if (!(*node)) {
- DEBUG_PRINT(ACPI_ERROR, ("Invalid (NULL) node entry [0x%02x] detected.\n", device_handle));
- return_ACPI_STATUS(AE_NULL_ENTRY);
- }
-
- return_ACPI_STATUS(AE_OK);
-}
-
-
-/****************************************************************************
- * External Functions
- ****************************************************************************/
-
-/****************************************************************************
- *
- * FUNCTION: bm_initialize
- *
- * PARAMETERS:
- *
- * RETURN: Exception code.
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_initialize (void)
-{
- ACPI_STATUS status = AE_OK;
- u32 start = 0;
- u32 stop = 0;
- u32 elapsed = 0;
-
- FUNCTION_TRACE("bm_initialize");
-
- MEMSET(&node_list, 0, sizeof(BM_HANDLE_LIST));
-
- acpi_get_timer(&start);
-
- DEBUG_PRINT(ACPI_INFO, ("Building device hierarchy.\n"));
-
- /*
- * Enumerate ACPI fixed-feature devices.
- */
- status = bm_enumerate_fixed_features();
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
-
- /*
- * Enumerate the ACPI namespace.
- */
- status = bm_enumerate_namespace();
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
-
- acpi_get_timer(&stop);
- acpi_get_timer_duration(start, stop, &elapsed);
-
- DEBUG_PRINT(ACPI_INFO, ("Device heirarchy build took [%d] microseconds.\n", elapsed));
-
- /*
- * Display hierarchy.
- */
-#ifdef ACPI_DEBUG
- bm_print_hierarchy();
-#endif /*ACPI_DEBUG*/
-
- /*
- * Register for all standard and device-specific notifications.
- */
- DEBUG_PRINT(ACPI_INFO, ("Registering for all device notifications.\n"));
-
- status = acpi_install_notify_handler(ACPI_ROOT_OBJECT,
- ACPI_SYSTEM_NOTIFY, &bm_notify, NULL);
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_ERROR, ("Unable to register for standard notifications.\n"));
- return_ACPI_STATUS(status);
- }
-
- status = acpi_install_notify_handler(ACPI_ROOT_OBJECT,
- ACPI_DEVICE_NOTIFY, &bm_notify, NULL);
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_ERROR, ("Unable to register for device-specific notifications.\n"));
- return_ACPI_STATUS(status);
- }
-
- /*
- * Initialize /proc interface.
- */
- //DEBUG_PRINT(ACPI_INFO, ("Initializing /proc interface.\n"));
- //status = bm_proc_initialize();
-
- DEBUG_PRINT(ACPI_INFO, ("ACPI Bus Manager enabled.\n"));
-
- /*
- * Initialize built-in power resource driver.
- */
- bm_pr_initialize();
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_terminate
- *
- * PARAMETERS:
- *
- * RETURN: Exception code.
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_terminate (void)
-{
- ACPI_STATUS status = AE_OK;
- u32 i = 0;
-
- FUNCTION_TRACE("bm_terminate");
-
- /*
- * Terminate built-in power resource driver.
- */
- bm_pr_terminate();
-
- /*
- * Remove the /proc interface.
- */
- //DEBUG_PRINT(ACPI_INFO, ("Removing /proc interface.\n"));
- //status = bm_proc_terminate();
-
-
- /*
- * Unregister for all notifications.
- */
-
- DEBUG_PRINT(ACPI_INFO, ("Unregistering for device notifications.\n"));
-
- status = acpi_remove_notify_handler(ACPI_ROOT_OBJECT,
- ACPI_SYSTEM_NOTIFY, &bm_notify);
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_ERROR, ("Unable to un-register for standard notifications.\n"));
- }
-
- status = acpi_remove_notify_handler(ACPI_ROOT_OBJECT,
- ACPI_DEVICE_NOTIFY, &bm_notify);
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_ERROR, ("Unable to un-register for device-specific notifications.\n"));
- }
-
- /*
- * Parse through the device array, freeing all entries.
- */
- DEBUG_PRINT(ACPI_INFO, ("Removing device hierarchy.\n"));
- for (i = 0; i < node_list.count; i++) {
- if (node_list.nodes[i]) {
- acpi_os_free(node_list.nodes[i]);
- }
- }
-
- DEBUG_PRINT(ACPI_INFO, ("ACPI Bus Manager disabled.\n"));
-
- return_ACPI_STATUS(AE_OK);
-}
diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmnotify.c b/reactos/drivers/bus/acpi/ospm/busmgr/bmnotify.c
deleted file mode 100644
index 1f6e4176061..00000000000
--- a/reactos/drivers/bus/acpi/ospm/busmgr/bmnotify.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/*****************************************************************************
- *
- * Module Name: bmnotify.c
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 Andrew Grover
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-
-#define _COMPONENT ACPI_BUS_MANAGER
- MODULE_NAME ("bmnotify")
-
-
-/****************************************************************************
- * Internal Functions
- ****************************************************************************/
-
-/****************************************************************************
- *
- * FUNCTION: bm_generate_notify
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_generate_notify (
- BM_NODE *node,
- u32 notify_type)
-{
- ACPI_STATUS status = AE_OK;
-
- FUNCTION_TRACE("bm_generate_notify");
-
- if (!node) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- DEBUG_PRINT(ACPI_INFO, ("Sending notify [0x%02x] to device [0x%02x].\n", notify_type, node->device.handle));
-
- if (!(node->device.flags & BM_FLAGS_DRIVER_CONTROL) ||
- !(node->driver.notify)) {
- DEBUG_PRINT(ACPI_WARN, ("No driver installed for device [0x%02x].\n", node->device.handle));
- return_ACPI_STATUS(AE_NOT_EXIST);
- }
-
- status = node->driver.notify(notify_type, node->device.handle,
- &(node->driver.context));
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_device_check
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_device_check (
- BM_NODE *node,
- u32 *status_change)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE *device = NULL;
- BM_DEVICE_STATUS old_status = BM_STATUS_UNKNOWN;
-
- FUNCTION_TRACE("bm_device_check");
-
- if (!node) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- device = &(node->device);
-
- if (status_change) {
- *status_change = FALSE;
- }
-
- old_status = device->status;
-
- /*
- * Parent Present?
- * ---------------
- * Only check this device if its parent is present (which implies
- * this device MAY be present).
- */
- if (!BM_NODE_PRESENT(node->parent)) {
- return_ACPI_STATUS(AE_OK);
- }
-
- /*
- * Get Status:
- * -----------
- * And see if the status has changed.
- */
- status = bm_get_status(device);
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
-
- if (old_status == node->device.status) {
- return_ACPI_STATUS(AE_OK);
- }
-
- if (status_change) {
- *status_change = TRUE;
- }
-
- /*
- * Device Insertion?
- * -----------------
- */
- if ((device->status & BM_STATUS_PRESENT) &&
- !(old_status & BM_STATUS_PRESENT)) {
- /* TODO: Make sure driver is loaded, and if not, load. */
- status = bm_generate_notify(node, BM_NOTIFY_DEVICE_ADDED);
- }
-
- /*
- * Device Removal?
- * ---------------
- */
- else if (!(device->status & BM_STATUS_PRESENT) &&
- (old_status & BM_STATUS_PRESENT)) {
- /* TODO: Unload driver if last device instance. */
- status = bm_generate_notify(node, BM_NOTIFY_DEVICE_REMOVED);
- }
-
- return_ACPI_STATUS(AE_OK);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_bus_check
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_bus_check (
- BM_NODE *parent_node)
-{
- ACPI_STATUS status = AE_OK;
- u32 status_change = FALSE;
-
- FUNCTION_TRACE("bm_bus_check");
-
- if (!parent_node) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- /*
- * Status Change?
- * --------------
- */
- status = bm_device_check(parent_node, &status_change);
- if (ACPI_FAILURE(status) || !status_change) {
- return_ACPI_STATUS(status);
- }
-
- /*
- * Enumerate Scope:
- * ----------------
- * TODO: Enumerate child devices within this device's scope and
- * run bm_device_check()'s on them...
- */
-
- return_ACPI_STATUS(AE_OK);
-}
-
-
-/****************************************************************************
- * External Functions
- ****************************************************************************/
-
-/****************************************************************************
- *
- * FUNCTION: bm_notify
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-void
-bm_notify (
- ACPI_HANDLE acpi_handle,
- u32 notify_value,
- void *context)
-{
- ACPI_STATUS status = AE_OK;
- BM_NODE *node = NULL;
-
- FUNCTION_TRACE("bm_notify");
-
- /*
- * Resolve the ACPI handle.
- */
- status = bm_get_node(0, acpi_handle, &node);
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_INFO, ("Recieved notify [0x%02x] for unknown device [%p].\n", notify_value, acpi_handle));
- return_VOID;
- }
-
- /*
- * Device-Specific or Standard?
- * ----------------------------
- * Device-specific notifies are forwarded to the control module's
- * notify() function for processing. Standard notifies are handled
- * internally.
- */
- if (notify_value > 0x7F) {
- status = bm_generate_notify(node, notify_value);
- }
- else {
- switch (notify_value) {
-
- case BM_NOTIFY_BUS_CHECK:
- DEBUG_PRINT(ACPI_INFO, ("Received BUS CHECK notification.\n"));
- status = bm_bus_check(node);
- break;
-
- case BM_NOTIFY_DEVICE_CHECK:
- DEBUG_PRINT(ACPI_INFO, ("Received DEVICE CHECK notification.\n"));
- status = bm_device_check(node, NULL);
- break;
-
- case BM_NOTIFY_DEVICE_WAKE:
- DEBUG_PRINT(ACPI_INFO, ("Received DEVICE WAKE notification.\n"));
- /* TODO */
- break;
-
- case BM_NOTIFY_EJECT_REQUEST:
- DEBUG_PRINT(ACPI_INFO, ("Received EJECT REQUEST notification.\n"));
- /* TODO */
- break;
-
- case BM_NOTIFY_DEVICE_CHECK_LIGHT:
- DEBUG_PRINT(ACPI_INFO, ("Received DEVICE CHECK LIGHT notification.\n"));
- /* TODO: Exactly what does the 'light' mean? */
- status = bm_device_check(node, NULL);
- break;
-
- case BM_NOTIFY_FREQUENCY_MISMATCH:
- DEBUG_PRINT(ACPI_INFO, ("Received FREQUENCY MISMATCH notification.\n"));
- /* TODO */
- break;
-
- case BM_NOTIFY_BUS_MODE_MISMATCH:
- DEBUG_PRINT(ACPI_INFO, ("Received BUS MODE MISMATCH notification.\n"));
- /* TODO */
- break;
-
- case BM_NOTIFY_POWER_FAULT:
- DEBUG_PRINT(ACPI_INFO, ("Received POWER FAULT notification.\n"));
- /* TODO */
- break;
-
- default:
- DEBUG_PRINT(ACPI_INFO, ("Received unknown/unsupported notification.\n"));
- break;
- }
- }
-
- return_VOID;
-}
-
-
diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmpm.c b/reactos/drivers/bus/acpi/ospm/busmgr/bmpm.c
deleted file mode 100644
index 61d65aef58e..00000000000
--- a/reactos/drivers/bus/acpi/ospm/busmgr/bmpm.c
+++ /dev/null
@@ -1,395 +0,0 @@
-/*****************************************************************************
- *
- * Module Name: bmpm.c
- * $Revision: 1.1 $
- *
- *****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 Andrew Grover
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-
-#include
-
-
-#define _COMPONENT ACPI_POWER_CONTROL
- MODULE_NAME ("bmpm")
-
-
-/****************************************************************************
- * Internal Functions
- ****************************************************************************/
-
-/****************************************************************************
- *
- * FUNCTION: bm_get_inferred_power_state
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_get_inferred_power_state (
- BM_DEVICE *device)
-{
- ACPI_STATUS status = AE_OK;
- BM_HANDLE_LIST pr_list;
- BM_POWER_STATE list_state = ACPI_STATE_UNKNOWN;
- char object_name[5] = {'_','P','R','0','\0'};
- u32 i = 0;
-
- FUNCTION_TRACE("bm_get_inferred_power_state");
-
- if (!device) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- MEMSET(&pr_list, 0, sizeof(BM_HANDLE_LIST));
-
- device->power.state = ACPI_STATE_D3;
-
- /*
- * Calculate Power State:
- * ----------------------
- * Try to infer the devices's power state by checking the state of
- * the devices's power resources. We start by evaluating _PR0
- * (resource requirements at D0) and work through _PR1 and _PR2.
- * We know the current devices power state when all resources (for
- * a give Dx state) are ON. If no power resources are on then the
- * device is assumed to be off (D3).
- */
- for (i=ACPI_STATE_D0; iacpi_handle,
- object_name, &pr_list);
-
- if (ACPI_SUCCESS(status)) {
-
- status = bm_pr_list_get_state(&pr_list,
- &list_state);
-
- if (ACPI_SUCCESS(status)) {
-
- if (list_state == ACPI_STATE_D0) {
- device->power.state = i;
- break;
- }
- }
- }
- }
-
- return_ACPI_STATUS(AE_OK);
-}
-
-
-/****************************************************************************
- * External Functions
- ****************************************************************************/
-
-/****************************************************************************
- *
- * FUNCTION: bm_get_power_state
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_get_power_state (
- BM_NODE *node)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE *device = NULL;
-
- FUNCTION_TRACE("bm_get_power_state");
-
- if (!node) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- device = &(node->device);
-
- device->power.state = ACPI_STATE_UNKNOWN;
-
- if (device->flags & BM_FLAGS_POWER_STATE) {
- status = bm_evaluate_simple_integer(device->acpi_handle,
- "_PSC", &(device->power.state));
- }
- else {
- status = bm_get_inferred_power_state(device);
- }
-
- if (ACPI_SUCCESS(status)) {
- DEBUG_PRINT(ACPI_INFO, ("Device [0x%02x] is at power state [D%d].\n", device->handle, device->power.state));
- }
- else {
- DEBUG_PRINT(ACPI_INFO, ("Error getting power state for device [0x%02x]\n", device->handle));
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_set_power_state
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_set_power_state (
- BM_NODE *node,
- BM_POWER_STATE state)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE *device = NULL;
- BM_DEVICE *parent_device = NULL;
- BM_HANDLE_LIST current_list;
- BM_HANDLE_LIST target_list;
- char object_name[5] = {'_','P','R','0','\0'};
-
- FUNCTION_TRACE("bm_set_power_state");
-
- if (!node || !node->parent || (state > ACPI_STATE_D3)) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- MEMSET(¤t_list, 0, sizeof(BM_HANDLE_LIST));
- MEMSET(&target_list, 0, sizeof(BM_HANDLE_LIST));
-
- device = &(node->device);
- parent_device = &(node->parent->device);
-
- /*
- * Check Parent's Power State:
- * ---------------------------
- * Can't be in a higher power state (lower Dx value) than parent.
- */
- if (state < parent_device->power.state) {
- DEBUG_PRINT(ACPI_WARN, ("Cannot set device [0x%02x] to a higher-powered state than parent_device.\n", device->handle));
- return_ACPI_STATUS(AE_ERROR);
- }
-
- /*
- * Get Resources:
- * --------------
- * Get the power resources associated with the device's current
- * and target power states.
- */
- if (device->power.state != ACPI_STATE_UNKNOWN) {
- object_name[3] = '0' + device->power.state;
- bm_evaluate_reference_list(device->acpi_handle,
- object_name, ¤t_list);
- }
-
- object_name[3] = '0' + state;
- bm_evaluate_reference_list(device->acpi_handle, object_name,
- &target_list);
-
- /*
- * Transition Resources:
- * ---------------------
- * Transition all power resources referenced by this device to
- * the correct power state (taking into consideration sequencing
- * and dependencies to other devices).
- */
- if (current_list.count || target_list.count) {
- status = bm_pr_list_transition(¤t_list, &target_list);
- }
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
-
- /*
- * Execute _PSx:
- * -------------
- * Execute the _PSx method corresponding to the target Dx state,
- * if it exists.
- */
- object_name[2] = 'S';
- object_name[3] = '0' + state;
- bm_evaluate_object(device->acpi_handle, object_name, NULL, NULL);
-
- if (ACPI_SUCCESS(status)) {
- DEBUG_PRINT(ACPI_INFO, ("Device [0x%02x] is now at [D%d].\n", device->handle, state));
- device->power.state = state;
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_get_pm_capabilities
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_get_pm_capabilities (
- BM_NODE *node)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE *device = NULL;
- BM_DEVICE *parent_device = NULL;
- ACPI_HANDLE acpi_handle = NULL;
- BM_POWER_STATE dx_supported = ACPI_STATE_UNKNOWN;
- char object_name[5] = {'_','S','0','D','\0'};
- u32 i = 0;
-
- FUNCTION_TRACE("bm_get_pm_capabilities");
-
- if (!node || !node->parent) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- device = &(node->device);
- parent_device = &(node->parent->device);
-
- /*
- * Power Management Flags:
- * -----------------------
- */
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle, "_PSC",
- &acpi_handle))) {
- device->power.flags |= BM_FLAGS_POWER_STATE;
- }
-
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle, "_IRC",
- &acpi_handle))) {
- device->power.flags |= BM_FLAGS_INRUSH_CURRENT;
- }
-
- if (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle, "_PRW",
- &acpi_handle))) {
- device->power.flags |= BM_FLAGS_WAKE_CAPABLE;
- }
-
- /*
- * Device Power State:
- * -------------------
- * Note that we can't get the device's power state until we've
- * initialized all power resources, so for now we just set to
- * unknown.
- */
- device->power.state = ACPI_STATE_UNKNOWN;
-
- /*
- * Dx Supported in S0:
- * -------------------
- * Figure out which Dx states are supported by this device for the
- * S0 (working) state. Note that D0 and D3 are required (assumed).
- */
- device->power.dx_supported[ACPI_STATE_S0] = BM_FLAGS_D0_SUPPORT |
- BM_FLAGS_D3_SUPPORT;
-
- if ((ACPI_SUCCESS(acpi_get_handle(device->acpi_handle, "_PR1",
- &acpi_handle))) ||
- (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle, "_PS1",
- &acpi_handle)))) {
- device->power.dx_supported[ACPI_STATE_S0] |=
- BM_FLAGS_D1_SUPPORT;
- }
-
- if ((ACPI_SUCCESS(acpi_get_handle(device->acpi_handle, "_PR2",
- &acpi_handle))) ||
- (ACPI_SUCCESS(acpi_get_handle(device->acpi_handle, "_PS2",
- &acpi_handle)))) {
- device->power.dx_supported[ACPI_STATE_S0] |=
- BM_FLAGS_D2_SUPPORT;
- }
-
- /*
- * Dx Supported in S1-S5:
- * ----------------------
- * Figure out which Dx states are supported by this device for
- * all other Sx states.
- */
- for (i = ACPI_STATE_S1; i <= ACPI_STATE_S5; i++) {
-
- /*
- * D3 support is assumed (off is always possible!).
- */
- device->power.dx_supported[i] = BM_FLAGS_D3_SUPPORT;
-
- /*
- * Evalute _SxD:
- * -------------
- * Which returns the highest (power) Dx state supported in
- * this system (Sx) state. We convert this value to a bit
- * mask of supported states (conceptually simpler).
- */
- status = bm_evaluate_simple_integer(device->acpi_handle,
- object_name, &dx_supported);
- if (ACPI_SUCCESS(status)) {
- switch (dx_supported) {
- case 0:
- device->power.dx_supported[i] |=
- BM_FLAGS_D0_SUPPORT;
- /* fall through */
- case 1:
- device->power.dx_supported[i] |=
- BM_FLAGS_D1_SUPPORT;
- /* fall through */
- case 2:
- device->power.dx_supported[i] |=
- BM_FLAGS_D2_SUPPORT;
- /* fall through */
- case 3:
- device->power.dx_supported[i] |=
- BM_FLAGS_D3_SUPPORT;
- break;
- }
-
- /*
- * Validate:
- * ---------
- * Mask of any states that _Sx_d falsely advertises
- * (e.g.claims D1 support but neither _PR2 or _PS2
- * exist). In other words, S1-S5 can't offer a Dx
- * state that isn't supported by S0.
- */
- device->power.dx_supported[i] &=
- device->power.dx_supported[ACPI_STATE_S0];
- }
-
- object_name[2]++;
- }
-
- return_ACPI_STATUS(status);
-}
diff --git a/reactos/drivers/bus/acpi/ospm/busmgr/bmpower.c b/reactos/drivers/bus/acpi/ospm/busmgr/bmpower.c
deleted file mode 100644
index 759c6d7cf0f..00000000000
--- a/reactos/drivers/bus/acpi/ospm/busmgr/bmpower.c
+++ /dev/null
@@ -1,666 +0,0 @@
-/****************************************************************************
- *
- * Module Name: bmpower.c - Driver for ACPI Power Resource 'devices'
- * $Revision: 1.1 $
- *
- ****************************************************************************/
-
-/*
- * Copyright (C) 2000, 2001 Andrew Grover
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/*
- * TODO:
- * -----
- * 1. Sequencing of power resource list transitions.
- * 2. Global serialization of power resource transtions (see ACPI
- * spec section 7.1.2/7.1.3).
- * 3. Better error handling.
- */
-
-
-#include
-
-#define _COMPONENT ACPI_POWER_CONTROL
- MODULE_NAME ("bmpower")
-
-
-/****************************************************************************
- * Function Prototypes
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_notify (
- BM_NOTIFY notify_type,
- BM_HANDLE device_handle,
- void **context);
-
-ACPI_STATUS
-bm_pr_request (
- BM_REQUEST *request,
- void *context);
-
-
-/****************************************************************************
- * Internal Functions
- ****************************************************************************/
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_print
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_print (
- BM_POWER_RESOURCE *pr)
-{
- ACPI_BUFFER buffer;
-
- if (!pr) {
- return(AE_BAD_PARAMETER);
- }
-
- buffer.length = 256;
- buffer.pointer = acpi_os_callocate(buffer.length);
- if (!buffer.pointer) {
- return(AE_NO_MEMORY);
- }
-
- acpi_get_name(pr->acpi_handle, ACPI_FULL_PATHNAME, &buffer);
-
- acpi_os_printf("Power Resource: found\n");
-
- DEBUG_PRINT(ACPI_INFO, ("+------------------------------------------------------------\n"));
- DEBUG_PRINT(ACPI_INFO, ("PowerResource[0x%02X]|[0x%08X] %s\n", pr->device_handle, pr->acpi_handle, buffer.pointer));
- DEBUG_PRINT(ACPI_INFO, (" system_level[S%d] resource_order[%d]\n", pr->system_level, pr->resource_order));
- DEBUG_PRINT(ACPI_INFO, (" state[D%d] reference_count[%d]\n", pr->state, pr->reference_count));
- DEBUG_PRINT(ACPI_INFO, ("+------------------------------------------------------------\n"));
-
- acpi_os_free(buffer.pointer);
-
- return(AE_OK);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_get_state
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_get_state (
- BM_POWER_RESOURCE *pr)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE_STATUS device_status = BM_STATUS_UNKNOWN;
-
- FUNCTION_TRACE("bm_pr_get_state");
-
- if (!pr) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- pr->state = ACPI_STATE_UNKNOWN;
-
- /*
- * Evaluate _STA:
- * --------------
- * Evalute _STA to determine whether the power resource is ON or OFF.
- * Note that if the power resource isn't present we'll get AE_OK but
- * an unknown status.
- */
- status = bm_get_device_status(pr->device_handle, &device_status);
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_ERROR, ("Error reading status for power resource [0x%02x].\n", pr->device_handle));
- return_ACPI_STATUS(status);
- }
- if (device_status == BM_STATUS_UNKNOWN) {
- DEBUG_PRINT(ACPI_ERROR, ("Error reading status for power resource [0x%02x].\n", pr->device_handle));
- return_ACPI_STATUS(AE_NOT_EXIST);
- }
-
- /*
- * Mask off all bits but the first as some systems return non-standard
- * values (e.g. 0x51).
- */
- switch (device_status & 0x01) {
- case 0:
- DEBUG_PRINT(ACPI_INFO, ("Power resource [0x%02x] is OFF.\n", pr->device_handle));
- pr->state = ACPI_STATE_D3;
- break;
- case 1:
- DEBUG_PRINT(ACPI_INFO, ("Power resource [0x%02x] is ON.\n", pr->device_handle));
- pr->state = ACPI_STATE_D0;
- break;
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_set_state
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_set_state (
- BM_POWER_RESOURCE *pr,
- BM_POWER_STATE target_state)
-{
- ACPI_STATUS status = AE_OK;
-
- FUNCTION_TRACE("bm_pr_set_state");
-
- if (!pr) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- status = bm_pr_get_state(pr);
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
-
- if (target_state == pr->state) {
- DEBUG_PRINT(ACPI_INFO, ("Power resource [0x%02X] already at target power state [D%d].\n", pr->device_handle, pr->state));
- return_ACPI_STATUS(AE_OK);
- }
-
- switch (target_state) {
-
- case ACPI_STATE_D0:
- DEBUG_PRINT(ACPI_INFO, ("Turning power resource [0x%02X] ON.\n", pr->device_handle));
- status = bm_evaluate_object(pr->acpi_handle, "_ON", NULL, NULL);
- break;
-
- case ACPI_STATE_D3:
- DEBUG_PRINT(ACPI_INFO, ("Turning power resource [0x%02X] OFF.\n", pr->device_handle));
- status = bm_evaluate_object(pr->acpi_handle, "_OFF", NULL, NULL);
- break;
-
- default:
- status = AE_BAD_PARAMETER;
- break;
- }
-
- status = bm_pr_get_state(pr);
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_list_get_state
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_list_get_state (
- BM_HANDLE_LIST *pr_list,
- BM_POWER_STATE *power_state)
-{
- ACPI_STATUS status = AE_OK;
- BM_POWER_RESOURCE *pr = NULL;
- u32 i = 0;
-
- FUNCTION_TRACE("bm_pr_list_get_state");
-
- if (!pr_list || !power_state) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- if (pr_list->count < 1) {
- pr->state = ACPI_STATE_UNKNOWN;
- return_ACPI_STATUS(AE_ERROR);
- }
-
- (*power_state) = ACPI_STATE_D0;
-
- /*
- * Calculate Current power_state:
- * -----------------------------
- * The current state of a list of power resources is ON if all
- * power resources are currently in the ON state. In other words,
- * if any power resource in the list is OFF then the collection
- * isn't fully ON.
- */
- for (i = 0; i < pr_list->count; i++) {
-
- status = bm_get_device_context(pr_list->handles[i],
- (BM_DRIVER_CONTEXT*)(&pr));
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_WARN, ("Invalid reference to power resource [0x%02X].\n", pr_list->handles[i]));
- (*power_state) = ACPI_STATE_UNKNOWN;
- break;
- }
-
- status = bm_pr_get_state(pr);
- if (ACPI_FAILURE(status)) {
- (*power_state) = ACPI_STATE_UNKNOWN;
- break;
- }
-
- if (pr->state != ACPI_STATE_D0) {
- (*power_state) = pr->state;
- break;
- }
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_list_transition
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_list_transition (
- BM_HANDLE_LIST *current_list,
- BM_HANDLE_LIST *target_list)
-{
- ACPI_STATUS status = AE_OK;
- BM_POWER_RESOURCE *pr = NULL;
- u32 i = 0;
-
- FUNCTION_TRACE("bm_pr_list_transition");
-
- if (!current_list || !target_list) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- /*
- * Reference Target:
- * -----------------
- * Reference all resources for the target power state first (so
- * the device doesn't get turned off while transitioning). Power
- * resources that aren't on (new reference count of 1) are turned on.
- */
- for (i = 0; i < target_list->count; i++) {
-
- status = bm_get_device_context(target_list->handles[i],
- (BM_DRIVER_CONTEXT*)(&pr));
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_WARN, ("Invalid reference to power resource [0x%02X].\n", target_list->handles[i]));
- continue;
- }
-
- if (++pr->reference_count == 1) {
- /* TODO: Need ordering based upon resource_order */
- status = bm_pr_set_state(pr, ACPI_STATE_D0);
- if (ACPI_FAILURE(status)) {
- /* TODO: How do we handle this? */
- DEBUG_PRINT(ACPI_WARN, ("Unable to change power state for power resource [0x%02X].\n", target_list->handles[i]));
- }
- }
- }
-
- /*
- * Dereference Current:
- * --------------------
- * Dereference all resources for the current power state. Power
- * resources no longer referenced (new reference count of 0) are
- * turned off.
- */
- for (i = 0; i < current_list->count; i++) {
-
- status = bm_get_device_context(current_list->handles[i],
- (BM_DRIVER_CONTEXT*)(&pr));
- if (ACPI_FAILURE(status)) {
- DEBUG_PRINT(ACPI_WARN, ("Invalid reference to power resource [0x%02X].\n", target_list->handles[i]));
- continue;
- }
-
- if (--pr->reference_count == 0) {
- /* TODO: Need ordering based upon resource_order */
- status = bm_pr_set_state(pr, ACPI_STATE_D3);
- if (ACPI_FAILURE(status)) {
- /* TODO: How do we handle this? */
- DEBUG_PRINT(ACPI_ERROR, ("Unable to change power state for power resource [0x%02X].\n", current_list->handles[i]));
- }
- }
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_add_device
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_add_device (
- BM_HANDLE device_handle,
- void **context)
-{
- ACPI_STATUS status = AE_OK;
- BM_POWER_RESOURCE *pr = NULL;
- BM_DEVICE *device = NULL;
- ACPI_BUFFER buffer;
- ACPI_OBJECT acpi_object;
-
- FUNCTION_TRACE("bm_pr_add_device");
-
- DEBUG_PRINT(ACPI_INFO, ("Adding power resource [0x%02X].\n", device_handle));
-
- if (!context || *context) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- buffer.length = sizeof(ACPI_OBJECT);
- buffer.pointer = &acpi_object;
-
- /*
- * Get information on this device.
- */
- status = bm_get_device_info(device_handle, &device);
- if (ACPI_FAILURE(status)) {
- return_ACPI_STATUS(status);
- }
-
- /*
- * Allocate a new BM_POWER_RESOURCE structure.
- */
- pr = acpi_os_callocate(sizeof(BM_POWER_RESOURCE));
- if (!pr) {
- return_ACPI_STATUS(AE_NO_MEMORY);
- }
-
- pr->device_handle = device->handle;
- pr->acpi_handle = device->acpi_handle;
-
- /*
- * Get information on this power resource.
- */
- status = acpi_evaluate_object(pr->acpi_handle, NULL, NULL, &buffer);
- if (ACPI_FAILURE(status)) {
- goto end;
- }
-
- pr->system_level = acpi_object.power_resource.system_level;
- pr->resource_order = acpi_object.power_resource.resource_order;
- pr->state = ACPI_STATE_UNKNOWN;
- pr->reference_count = 0;
-
- /*
- * Get the power resource's current state (ON|OFF).
- */
- status = bm_pr_get_state(pr);
-
-end:
- if (ACPI_FAILURE(status)) {
- acpi_os_free(pr);
- }
- else {
- *context = pr;
- bm_pr_print(pr);
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_remove_device
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_remove_device (
- void **context)
-{
- ACPI_STATUS status = AE_OK;
- BM_POWER_RESOURCE *pr = NULL;
-
- FUNCTION_TRACE("bm_pr_remove_device");
-
- if (!context || !*context) {
- return_ACPI_STATUS(AE_BAD_PARAMETER);
- }
-
- pr = (BM_POWER_RESOURCE*)*context;
-
- DEBUG_PRINT(ACPI_INFO, ("Removing power resource [0x%02X].\n", pr->device_handle));
-
- acpi_os_free(pr);
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- * External Functions
- ****************************************************************************/
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_initialize
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_initialize (void)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE_ID criteria;
- BM_DRIVER driver;
-
- FUNCTION_TRACE("bm_pr_initialize");
-
- MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID));
- MEMSET(&driver, 0, sizeof(BM_DRIVER));
-
- criteria.type = BM_TYPE_POWER_RESOURCE;
-
- driver.notify = &bm_pr_notify;
- driver.request = &bm_pr_request;
-
- status = bm_register_driver(&criteria, &driver);
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_terminate
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_terminate (void)
-{
- ACPI_STATUS status = AE_OK;
- BM_DEVICE_ID criteria;
- BM_DRIVER driver;
-
- FUNCTION_TRACE("bm_pr_terminate");
-
- MEMSET(&criteria, 0, sizeof(BM_DEVICE_ID));
- MEMSET(&driver, 0, sizeof(BM_DRIVER));
-
- criteria.type = BM_TYPE_POWER_RESOURCE;
-
- driver.notify = &bm_pr_notify;
- driver.request = &bm_pr_request;
-
- status = bm_unregister_driver(&criteria, &driver);
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_notify
- *
- * PARAMETERS:
- *
- * RETURN:
- *
- * DESCRIPTION:
- *
- ****************************************************************************/
-
-ACPI_STATUS
-bm_pr_notify (
- BM_NOTIFY notify_type,
- BM_HANDLE device_handle,
- void **context)
-{
- ACPI_STATUS status = AE_OK;
-
- FUNCTION_TRACE("bm_pr_notify");
-
- switch (notify_type) {
-
- case BM_NOTIFY_DEVICE_ADDED:
- status = bm_pr_add_device(device_handle, context);
- break;
-
- case BM_NOTIFY_DEVICE_REMOVED:
- status = bm_pr_remove_device(context);
- break;
-
- default:
- status = AE_SUPPORT;
- break;
- }
-
- return_ACPI_STATUS(status);
-}
-
-
-/****************************************************************************
- *
- * FUNCTION: bm_pr_request
- *
- * PARAMETERS: